A booking pipeline without backend code
Clients pick a free slot on your site, and the booking lands in your Google Calendar on its own. No database, no server: your calendar is the database. Claude builds the form, Make does the rest.
How it works
Two small automations in Make, each started by a link called a webhook (a web address that runs your automation when something is sent to it):
- Availability: the form asks "which slots are taken on this day?" and Make reads your calendar.
- Booking: the form sends the booking. Make checks the slot is still free, then creates the event. If someone was faster, the form says so.
That second check is what prevents double bookings. Skip it and two people can book the same slot.
Create the two webhooks in Make
Create a free Make account, then two new scenarios. In each one, the first module is Webhooks › Custom webhook: click Add, give it a name, and copy the address Make gives you. Keep both addresses for step 3.
Scenario A, "Availability":
- Webhooks › Custom webhook (it receives a
date). - Google Calendar › Get Free/Busy Information for your calendar, from that date at 00:00 to the next day at 00:00, in your time zone.
- Webhooks › Webhook response, status
200, body: the list of busy periods, as{"busy": [...]}with astartandendfor each.
Scenario B, "Booking":
- Webhooks › Custom webhook (it receives name, email, message, start, end).
- A filter: continue only if the hidden
websitefield is empty. Bots fill it in, people don't. - Google Calendar › Get Free/Busy Information between the booking's start and end.
- A Router with two routes:
Route 1, filter "busy list is empty": Google Calendar › Create an Event (titleCall with {{name}}, the start and end received, the email and message in the description), then Webhook response200with{"ok": true}.
Route 2, filter "busy list is not empty": Webhook response409with{"ok": false}.
In scenario B's settings, turn on sequential processing so two bookings sent in the same second are handled one after the other. Then switch both scenarios ON.
Make's screens change from time to time: the module names above are the ones in Make's Google Calendar app today, but a field label can differ slightly. If you're stuck, Make's built-in AI assistant can configure a module for you from these sentences.
One prompt: Claude builds the booking form
Open claude.ai, paste this prompt, and fill in the brackets with your details and the two webhook addresses.
Create a single index.html file: a booking widget for [my business], in [my colors].
Slots
- Show the next 14 days. I'm closed on [Saturday and Sunday].
- [30]-minute slots from [9:00] to [17:00], in the [Europe/Brussels] time zone.
- When a date is picked, fetch the taken slots: GET [AVAILABILITY WEBHOOK URL]?date=YYYY-MM-DD
The answer is JSON: {"busy": [{"start": "...", "end": "..."}]}
- Disable any slot that overlaps a busy period, and any slot in the past.
Form
- Fields: name, email, message (optional).
- Add a hidden field called "website", left empty (a spam trap for bots).
- On submit, POST JSON {name, email, message, website, start, end} to [BOOKING WEBHOOK URL].
start and end are ISO 8601 with the time zone offset.
- If the answer contains "ok": true, show a confirmation screen with the date and time.
- If not, say "This slot was just taken, please pick another one" and reload the free slots.
- Disable the button while sending. If the network fails, show a clear error message.
Design
- Mobile first, clean, accessible (labels, keyboard navigation).
- No external libraries.
Claude shows the form next to the chat. If something is off, say it in your own words: "the slots are too small", "use my logo color for the button".
Test it, then put it online
- Book a slot: the event should appear in your Google Calendar within a few seconds.
- Reload the form: that slot must now be disabled.
- Open the form in two tabs, pick the same slot in both, and book in both. The second one must say the slot was taken.
To put it online, download the file and drop it on Netlify Drop. You get a link to share, or to embed on your site in an <iframe>.
Your webhook addresses are visible in the page's code. That's normal for this setup, but don't share them elsewhere, and keep the spam filter from step 2.
Frequently asked questions
Why not just use Calendly or Cal.com?
For your own appointments, they're great and often enough. Build your own when you want the form to look exactly like your site, ask your own questions, or offer it to a client as part of their website.
Is it free?
Claude, Make and Google Calendar all have free plans. Each booking uses a few Make operations, so the free plan covers a small business. Limits change, so check Make's current pricing before using it for a client.
Can it send a confirmation email?
Yes. In route 1 of scenario B, add a Gmail or email module after "Create an Event". Or add the client's email as a guest of the event, and Google sends the invitation.
Prefer to have it done for you?
Booking systems, websites, automations: I build them for your business, with a fixed price quoted before we start.