Booked into your real calendar, not a guess at your availability.
Availability computed across staff rotas, buffers, time off and holidays - and a double-booking guarantee the database enforces rather than the application hoping.
How it works
Describe your services and who performs them
Duration, price, buffer before and after, and which staff can deliver it. Working hours are set per location, with time off and holidays on top - so availability reflects the week you actually have, not a generic nine-to-five.
Availability is computed, not guessed
Every slot is checked against the staff member's rota, their existing appointments, their time off, and the buffers on either side of the service. Times are resolved in the location's own timezone, so a daylight-saving change does not quietly move next month's appointments.
It gets booked - by staff, by the customer, or by the AI
Your team books from a calendar they can drag appointments around. Customers book themselves from a public page per location. Either way it is the same availability engine and the same guarantees.
What it can do
- Services with duration, price, and buffers; staff with rotas, time off, and the services they are qualified for
- Availability across staff, existing appointments, buffers and holidays, resolved in the location's own timezone
- A calendar your team can drag appointments around to reschedule
- A public booking page per location - a customer books without creating an account
- 24-hour and 2-hour SMS reminders, armed at the moment the appointment is created
- Full appointment history: who booked it, who moved it, when, and what it was before
- A waitlist that a cancellation is matched against, so an opening at two hours' notice comes with the name of whoever wanted it first
- Intake forms attached to a service, asked on the booking page, with the answers on the appointment and a record of who opened them
- Classes and group sessions: set the places on a service and the booking gets a register, taking one slot in the calendar while reminding each person who is coming
Double-booking is prevented by a Postgres exclusion constraint, so the second overlapping write is refused by the database itself. Checked with 50 simultaneous requests for the same slot - exactly one wins.
24-hour and 2-hour SMS, armed inside the booking transaction. Held out of quiet hours, sent only to customers who agreed, and impossible to send twice - that last one guaranteed by an index rather than by careful code.
Frequently asked questions
How do you actually prevent double booking?
With a Postgres exclusion constraint, so two overlapping appointments for the same staff member cannot both exist - the second write is rejected by the database. This deliberately is not application code checking availability and then inserting, because between that check and that insert another request can do the same thing. The guarantee is tested with 50 concurrent requests for the identical slot: exactly one succeeds.
Do reminders go out to everyone automatically?
Only to people who agreed to be texted, and nothing is back-filled. A customer who booked before consent was recorded gets no reminder until a team member records that they agreed - and the appointment shows a 'no consent' skip rather than silently sending nothing. Reminders also defer out of quiet hours instead of arriving at 3am, and a partial unique index makes sending the same reminder twice impossible rather than unlikely.
Can customers book without an account?
Yes. Each location can publish a booking page you hand out as a link or embed in your own site. It runs through the same booking engine and the same double-booking constraint as your staff calendar - there is no second implementation for the public page, which is how two implementations start giving different answers and the one customers see is the unverified one.
Does it sync with Google Calendar or Microsoft 365?
Not yet. Two-way calendar sync is built against Google and Microsoft OAuth applications that do not exist yet, so it is on the roadmap rather than shipped. Everything above works without it; what you do not get today is an appointment appearing in a personal Google Calendar automatically.
Can I take a deposit at booking?
You can state a deposit policy on the booking page, and customers see it before they book. Actually charging the deposit needs Stripe, which is not connected yet. The policy is shown rather than hidden precisely because finding out about a deposit afterwards is what produces a chargeback.
Where to go next
Works with
Start free. Be live this week.
Built for dental, med spa, home services, and the businesses that live on the phone.