How visitors book a call on our site
A look at the site's booking flow: a custom scheduling component, a small two-route API, and the checks that keep a 60-minute call from being double-booked.

Booking a call is the first real step in any website build with the studio, so the flow needed to feel like part of the site rather than a bolted-on page. Visitors land on the website builds page, click Schedule a call, and jump to a section that holds our own booking component. It offers one thing: a 60-minute video call to talk through what you need before any quote gets written. Everything, from picking a day to the confirmation screen, happens in place without leaving the page.
Behind the component sits a small booking API with two routes. A request to the availability route reads busy time from the studio calendar and returns open slots for the next 30 days. The rules live in one config file: weekdays only, 7:00 to 17:30 Central time, calls starting on the hour, and at least 48 hours of notice. The browser then groups those slots by date in the visitor's own time zone, which it detects on the client. It also offers a picker for common zones and a 12h/24h toggle.
Picking a time moves you to a short form with your name, your email and an optional note. Submitting it posts to the book route, which validates every field, caps the request body at 10,000 bytes, and checks a hidden honeypot field plus an optional bot challenge. The server then confirms the start time is a genuine slot under the current rules and re-checks the calendar for that exact hour. Only then does it create the event with a video link and send the invite. If the slot was just taken, the form says so and reloads the open times.
Getting here took a detour. The first version embedded a hosted appointment page in an iframe, and the commit history records it failing with a refused-to-connect error. The short link answered with an X-Frame-Options header that blocked framing. Pointing the iframe at the page the link redirected to fixed that, and a later change replaced the embed with the component described above. That put the layout, copy and error states in the site's own code. One follow-up fix measures the calendar step's height and holds it on the form step, so the layout no longer jumps when you pick a time.
More articles

How to build a thought-bubble tooltip with pure CSS
A step-by-step CSS tutorial for a tooltip that reads its label from a data attribute, pops up in a rounded bubble, trails off in three little circles and stays clickable, with no JavaScript.

Building night sky effects that know when to sit out
How the Night Sky UI Kit's star cursor, starfield and aurora check the visitor's device and settings before they draw a single frame.

How Romeo learned to answer to its own name
Romeo ships a custom-trained Hey Romeo wake word, picks the right model format for your hardware, and hands your voice off to capture without extra clicks.

How our pull requests get an automatic first review
A Cloudflare Worker picks up GitHub pull request webhooks, has Claude review the diff, submits a real GitHub review, and posts the notification into the correct Slack channel for pull requests.

Inside our resumable, review-gated video production pipeline
How we built a local seven-step pipeline that turns a history topic into a captioned video, with resumable state, bounded retries, and a human review gate.