CASE 10
Scheduling & Booking Suite
Two owned booking systems put the operating rules in the business's hands. Both reject overlapping internal reservations at the database boundary. The client-facing build also checks selected connected calendars before showing availability.
- Role
- Scheduling logic, payments, and booking product
- Client
- Internal and client-facing deployments
- Year
- 2026
- Updated
- Stack
- Web app · Database · Calendar + video
- Status
- Live in production
01 The problem
Two businesses needed more control over how they offered time, recorded a reservation, and handled the work that follows. A general booking service can be the right choice when its rules fit. These operations needed booking types, capacity limits, meeting preparation, and exception handling that could change with their own process. The design question was larger than putting a calendar on a page: which rules must hold when two requests arrive together, and how should the team see work that has not finished?
02 The system
Each deployment uses an owned booking page and a shared operating pattern. A visitor chooses a meeting type and sees capacity based on configured hours, buffers, existing bookings, and the checks enabled for that deployment. The reservation is created through one atomic database operation. Calendar events, meeting details, and notices continue as tracked delivery work after the booking record exists.
The two versions deliberately differ. The company-wide build uses its internal schedule and booking records. The client-facing build can also read selected Google and Microsoft calendars before it offers a slot. That distinction matters: a capability verified in one deployment should not be borrowed as evidence for the other.
03 How it holds up
An exclusion constraint rejects a conflicting active reservation at the database boundary, following the database-first pattern for preventing double bookings. That control covers internal booking records even if two requests reach the write at nearly the same time.
External calendars require a different control. The client-facing build reads busy periods from the selected connected calendars and withholds conflicting slots. If a calendar lookup is degraded, its availability path is designed to stop offering slots rather than treat an unknown calendar as empty. An outside calendar can still change after the check, so this is a conflict reduction measure rather than a universal guarantee.
The company-wide build records meeting, calendar, reminder, and notice work separately from the booking itself. Retryable work can resume from its recorded state. When a message may already have been accepted but its final result is unknown, the workflow blocks automatic re-sending and exposes the ambiguity for review. That tradeoff prefers a visible exception over quietly sending the same confirmation twice.
04 The result
Both systems are live production work. Their implemented controls include atomic booking writes, database conflict rejection, deployment-specific availability checks, and separate delivery state for follow-up work. Current booking volume and notification-delivery totals are not published here, and the external-calendar check is a risk control rather than a claim that every possible conflict has been eliminated.
05 Frequently asked questions
How do you stop double bookings in a booking system?
Put the final overlap rule at the database boundary. Both systems create bookings through an atomic database function and use an exclusion constraint for overlapping active reservations. Availability checks improve the experience, while the constraint protects the final write when two requests compete for the same time.
What happens if the meeting link fails after someone books?
The booking record and the meeting setup have separate state. The follow-up workflow can wait, retry a defined failure, or mark the work failed or blocked for attention. A completed booking write therefore does not, by itself, prove that a meeting link, calendar event, or email reached its destination.
Why build your own booking system instead of renting one?
Build when the scheduling rules are central enough to justify owning the software and its upkeep. A rented service is often faster to adopt. An owned system becomes useful when the business needs specific capacity rules, records, integrations, or recovery behavior that the service cannot support economically. The build-versus-buy decision should include ongoing maintenance and failure ownership, not just the first implementation.
How does the suite reduce clashes with an existing calendar?
The client-facing version reads busy periods from selected connected Google and Microsoft calendars before offering a slot. It also applies the database rule to its own active reservations. An external calendar can change between the availability check and the final write, so the design reduces those clashes without claiming every outside race is impossible.
· How it works
- 01
Offer capacity
A visitor chooses a meeting type and sees slots derived from configured hours, buffers, booking records, and the calendars enabled for that deployment.
- 02
Commit the slot
An atomic database write applies the booking rules, while an exclusion constraint rejects an overlapping active reservation.
- 03
Prepare the meeting
Calendar and meeting work continues from a recorded booking, with pending, ready, failed, or blocked state kept separately.
- 04
Track each notice
Client and team notices have their own delivery records, so a saved booking is not mistaken for a delivered message.
- 05
Surface exceptions
Retryable work can resume, while an ambiguous send is blocked from automatic re-sending and left visible for review.
· Results
- Booking write
- Atomic DB control
- External calendars
- Google + Microsoft
- Status
- Live in production
1. Both systems route booking creation through an atomic database function and enforce an exclusion constraint for overlapping active reservations.
2. The client-facing implementation can read selected Google and Microsoft calendars. The company-wide implementation uses its own schedule and booking records without claiming the same connection feature.
3. Meeting, calendar, and notice delivery have their own recorded states. The code distinguishes a booking write from completion of those downstream steps.