Own Sites
clinics booking appointments operations

Online booking that can't double-book you

A patient tapping "book" at 11pm should get a slot you can actually keep. How availability is computed, why bookings arrive as pending, and what stops two patients from taking the same time.

admin 3 min read
Online booking that can't double-book you

The worst booking widget is the one that lies. A patient picks 10:30, gets a cheerful confirmation, and arrives to find the room occupied. Now you have two unhappy people in a waiting room and a receptionist apologising for software.

Most "online booking" on small clinic sites is a contact form wearing a costume — it emails you a request and calls it a booking. That's not scheduling. That's a to-do list with extra steps.

Availability is computed, not guessed

When a patient opens booking on a published clinic site, the slots they see are derived from the provider's actual configuration:

How an open slot is decided: business hours, minus breaks, minus booked times, minus off days

Business hours define the window. Per-day breaks come out. Off days come out. Times already taken come out. Slot duration determines the grid. What's left is what a patient can choose — so the offer they see reflects the day you actually have.

Two patients, one slot, 11pm

Availability checks alone don't save you. Two people can load the same page and tap the same slot within the same second, and both will have seen it as free.

That's why the guarantee doesn't live in the widget — it lives in the database. A uniqueness constraint on the combination of provider, date, and start time means the second write loses. Not "usually." Structurally. The race can happen; the double-booking can't.

Bookings arrive as pending, and that's deliberate

A new booking lands as pending, not confirmed. The acknowledgement the patient receives says so plainly rather than implying a promise the clinic hasn't made.

This is a real product decision and it's worth defending. Software cannot know that your Tuesday just fell apart, that the provider is out, or that this particular patient needs a longer visit than the slot allows. Auto-confirming would trade a small convenience for the exact failure the whole system exists to prevent. A human confirms, and the confirmation means something.

Nobody forgets

Once an appointment exists, reminders run on their own — email by default, with one-tap confirm and cancel links so a patient can free the slot without calling you.

The chain from submission through spam checks to a saved record and a notification

Reminders are idempotent by construction: sending is guarded by a conditional update, so a retry, an overlapping run, or a worker restart can't send the same patient the same reminder twice. Reminder software that spams patients gets muted, and a muted reminder is worse than none.

SMS reminders are available on top of email once Twilio credentials are configured — off by default rather than quietly billing you for messages you didn't ask to send.

Bots don't get to fill your calendar

A public booking endpoint is an open invitation. Every booking runs the same spam checks as any other form — honeypot, timing trap — plus per-IP daily caps, so nobody can stuff your Thursday with fake patients from a script. It works out of the box, with nothing to configure.

The short version

Real availability from the provider's real hours. A database that refuses to double-book. Pending until a human says otherwise. Reminders that can't spam. That's the difference between a booking system and a booking-shaped form.

See it on a clinic site →

Share this post