๐Ÿ‡ Rabbithole โ† All lessons Work with us โ†’
Step 0 of 6
Day 15 of 30
Rabbithole ยท Learn ยท ~12 min read

Appointment Reminder Bot

Cut no-shows: it reads your calendar and texts clients reminders, and handles the "can we move it?"

Salons & spasDental & medical officesAuto shops Trades & home servicesTutors & coachesTherapistsCleaners
โ˜…

Stop losing money to no-shows and phone tag

A booked slot that nobody shows up to is money gone twice: the time you held, and the customer you could have given it to. Most no-shows are not flakes, they just forgot. And the ones who do remember often want to move the time, which turns into voicemail tag while you are with another client.

This kit is a reminder that already knows your schedule. It reads your calendar, texts each client a friendly reminder at the intervals you choose, and reads the replies. "See you then" gets a thumbs-up. "Can we push to Friday?" gets a proposed new time it shows you first. The rule it never breaks: it can send reminders on its own, but it will not move anything on your calendar until you confirm.

Plain-English glossary, once: Your calendar is the schedule you already keep (Google Calendar, your booking tool, or a simple file). A reminder interval is just "how far ahead to text" (say 24 hours and 2 hours before). Claude is the AI that reads a client's reply in plain words and decides what they meant: confirm, reschedule, or cancel. The kit turns that into a proposed action you approve. Reminders are low risk and can go out automatically; calendar changes are gated behind your tap.
1

Connect your calendar: the schedule you own

What's happening: The bot is only useful if it can see what's booked. You point it at your calendar (a Google Calendar, an export from your booking tool, or a plain data/appointments.json file). The kit reads the upcoming appointments: who, when, what service, and a phone number. That read is all it needs to know who to remind and when.
WhenClientServiceStatus
Thu 9:00amDana ReyesWomen's cut & colorbooked
Thu 1:30pmMarco SilvaBrake inspectionbooked
Fri 11:00amPriya AnandCleaning & exambooked
Fri 4:00pmSam Cole60-min massagebooked
โ†ณ Calendar & bot basics are in the Secretary lesson โ†’
2

Set the reminder schedule: when to text

What's happening: You decide how far ahead reminders go out and what they say. A common setup is one the day before and one a couple of hours before. The kit checks the calendar on a timer (a cron, just a scheduled job), finds appointments crossing each reminder window, and drafts a text for each. Each client gets reminded once per window, never twice for the same thing.
reminders:
  - { before: "24h", channel: "sms" }   # day-before nudge
  - { before: "2h",  channel: "sms" }   # day-of heads-up
quiet_hours: { from: "21:00", to: "08:00" }   # never text overnight
Why this is safe to automate: sending a reminder is low risk. The worst case is a client gets a courteous text they didn't strictly need. So reminders are the one thing the kit will send on its own (inside your quiet-hours rule). Anything that changes the calendar is held for you, every time, which is the next steps.
3

Give it a brain: connect Claude to read the replies

What's happening: Sending a reminder is easy. The hard part is the reply: "yep", "can't make 9, how about after lunch?", "cancel please". Claude reads that plain-English reply and returns a structured intent (a typed object: confirm, reschedule, or cancel, plus any time the client hinted at), never loose prose. The kit then turns that intent into a proposed action you approve.
  1. Go to console.anthropic.com and sign in.
  2. Open API Keys โ†’ Create Key.
  3. Copy the key (it starts with sk-ant-). The setup wizard saves it on your machine.
Default brain: claude-opus-4-8 (sharpest). High volume? Set claude-haiku-4-5 to cut cost.
4

Try it: draft a reminder and parse a reply, send nothing

What's happening: Pick a sample appointment to see the reminder text it would draft. Then paste the kind of reply a client might send and watch the kit parse the intent and, if they want to move it, propose a specific new time from open slots. It then shows you the plan and waits. This is confirm-before-change: it drafts and plans, you approve. This planner is live. It runs entirely in your browser, nothing is sent anywhere.
Reminder Bot ยท Bloom & Co. (sample)

Pick the appointment to remind:

Now paste a client reply (or tap one):

Pure in-browser dry run: no API call, no text sent, no calendar changed.
5

Propose, then confirm: the calendar never moves on its own

What's happening: When a client wants to move or cancel, the kit does not just do it. It finds an open slot that fits their hint, checks it does not collide with anything already booked, and proposes it: to you, and as a "does this work?" text back to the client. Only after a yes from the client and your confirmation does it write the change. The draft above is wired to exactly this. Try the buttons.
Three promises the kit keeps:
โ€ข Reminders can go out automatically (low risk), but no calendar change ever happens without your explicit confirmation. That switch is documented, default-safe, and yours to flip.
โ€ข No double-booking. A proposed slot is checked against the calendar first; if it collides, the kit offers a different open time instead.
โ€ข It never silently cancels. A cancel is surfaced to you, the slot is freed only after you confirm, and the client gets a clear confirmation.
SEND_REMINDERS=auto      # reminders go out on the timer (low risk)
CALENDAR_WRITES=confirm  # every move/cancel waits for your tap (the safe default)
6

Put it on a channel: SMS or a messaging app

What's happening: The same engine can sit behind a text line or a messaging app. The kit ships with a Telegram inbound handler you can run today, and it also runs as an MCP server so you (or Claude) can drive it as a tool, the same idea from Lesson 1. Wire it to whatever your clients already text. Once a client confirms a new time, pair it with the Follow-Up bot so a "thanks, see you Friday" goes out automatically.
npm run dryrun     # draft reminders + parse replies in your terminal, nothing sends
npm run remind     # find appointments due a reminder and draft the texts
npm start          # run the reminder bot for real
npm run mcp        # expose it as an MCP server (drive it from Claude)
Planned, with a kill switch: the kit ships with DRY_RUN on. In dry-run it drafts reminders and plans reschedules but the texter and the calendar writer are gated off, so you can watch it work before a single real text leaves your machine or a single slot moves.

Run it yourself: it's free and it's the real thing

The kit is a complete, runnable, MIT-licensed repo: read a calendar, draft reminders on a schedule, parse client replies into confirm / reschedule / cancel, propose a safe new slot, and write nothing until you confirm. Runs on your machine, nothing crippled.

Get the free kit on GitHub โ†’
โ–ถ

Go live

With the kit downloaded:

npm install
npm run setup     # Claude key + calendar source saved on YOUR machine
npm run dryrun    # draft reminders and parse replies, nothing sends
npm start         # run the reminder bot

Set your reminder windows and quiet hours once, and it keeps an eye on the calendar for you. Prefer the command line first? npm run dryrun drafts the texts and shows you the parsed replies without sending anything. The calendar and bot basics live in the Secretary lesson, and the Follow-Up lesson pairs nicely for the "see you then" messages.

Want it wired to your real booking system and a real text line?

This kit is the DIY taste. We connect your real booking system and two-way SMS, so reminders go out on schedule, reschedules land back on your live calendar with no double-booking, and the whole thing runs without you babysitting it.

Have Rabbithole run it โ†’ โ†ณ Pair it with the Follow-Up bot