Appointment reminder
A serverless reminder that cuts no-shows. It watches every upcoming appointment, sends each customer the right reminder at the right time, and lets them confirm, reschedule, or cancel with one tap; then it tells your staff who confirmed and who went quiet so gaps get filled early. Nothing pushy; quiet hours respected. Seven posts on the same system — one diagram at a time — with an engineering reference at the end.
-
01
An appointment reminder on AWS for a few dollars a month
The whole system on one page — an appointment intake, a reminder, and a reply piece, plus the moves they share for every booking.
-
02
How an appointment gets on the list
Three lanes feed the list — the Drive sheet itself, an inbox-forwarding lane that parses booking emails into proposed rows for one-tap approval, and an hourly calendar import for events tagged
#appt. -
03
How the reminder knows when to send
An hourly tick reads the list, computes hours-to-appointment per booking, compares against per-service reminder schedules in the rules doc, and picks one of four moves: scheduled, first reminder, second reminder, gap alert. No model on the tick.
-
04
How a reminder reaches the customer
Channel choice per customer, quiet hours, holiday calendars, text messages with one-tap reply links, email fallback, and the four guardrails between the reminder’s chosen move and the actual message landing.
-
05
How a customer confirms or reschedules
Three actions on the reply links: confirm (stop the reminders), reschedule (new time, fresh chain), and cancel (free the slot and alert staff). Every action is logged.
-
06
What the appointment reminder costs
A few dollars a month at SMB volume. The reminder runs hourly, calls no models on the tick, and the main cost is the text messages themselves.
-
07
Engineering reference: the appointment reminder architecture
Same system, drawn purely for engineers. Service names, resource identifiers, region, Bedrock model IDs, Lambda inventory, IAM scopes, the SES inbound rule set, EventBridge Scheduler config, and the DynamoDB schemas.
Frequently asked questions
- What is an appointment reminder?
- A small serverless system that cuts no-shows. It watches every upcoming appointment your business has booked, sends each customer the right reminder at the right time (for example 24 hours and 2 hours before), and lets them confirm, reschedule, or cancel with one tap. It then tells your staff who confirmed and who went quiet, so an early cancel becomes a slot you can fill instead of an empty chair.
- How much does it cost to run?
- About $3/month at typical small-business volume (around 200 appointments a month). The fixed cost is essentially zero. The main variable cost is text messages — each SMS reminder is a small per-message fee. The hourly tick that scans appointments, the one-tap reply handling, and the staff updates are all pennies. At 1,000 appointments a month the bill lands around $12, most of it text messages.
- Which AWS services does it use?
- Lambda (Python 3.14, arm64) with Function URLs for the one-tap reply links, EventBridge Scheduler for the hourly tick and deferred sends, DynamoDB on-demand, S3 (with versioning), SNS for text messages, SES inbound + outbound for the email lane, Secrets Manager, CloudWatch Logs (7-day retention), AWS Budgets, and Bedrock (Claude Haiku 4.5 via Global cross-Region inference) for the booking-email parsing and the weekly staff summary. No API Gateway, no NAT Gateway, no always-on compute, no Knowledge Base.
- Where does the appointment list live?
- In a Google Sheet in a Drive folder. One row per appointment with customer name, phone, email, service, staff member, date and time, status, and a link to the booking. A small
drive-syncLambda mirrors the sheet to S3 every few minutes; the reminder reads from S3 to keep Drive calls predictable and to get S3 versioning for free. - Does the reminder use AI?
- Sparingly. The hourly tick uses no AI — it’s plain Python that reads times and decides on a move. Bedrock Haiku 4.5 fires only when somebody forwards a booking-confirmation email (Textract + Haiku propose a row for staff approval) and once a week for the staff summary. Most of the system is deterministic by design.
- How does a reminder reach the customer without being annoying?
- Each service has its own reminder schedule in the rules doc — a dentist might use 48 hours and 2 hours, a salon 24 hours and 1 hour. Reminders go by text first, email as a fallback, and they respect quiet hours (default 9pm–8am local). Once a customer confirms, the chain stops. Reschedule moves the appointment and starts a fresh chain against the new time. Cancel frees the slot and pings staff so the gap can be filled.
- What happens when a customer taps a reply?
- Three one-tap links on every reminder: Confirm marks the appointment confirmed and stops further reminders. Reschedule opens a short page to pick a new time, which updates the sheet and starts a fresh chain. Cancel frees the slot and alerts staff. Every action is recorded in the
ar-auditDynamoDB table with timestamp, appointment, action, and a before-and-after snapshot, so the change is reversible and the trail is clear for the front desk.