Pick your person
Opens with people, because that's how regulars think. "Anyone" widens availability. Per-salon label — Dolce shows "Technicians."
Who → what (+ add-ons) → when → details. No account required, no fluff — the bar is Square and Fresha. Every screen below is the real widget; toggle the theme to see it carry a salon's brand.
Opens with people, because that's how regulars think. "Anyone" widens availability. Per-salon label — Dolce shows "Technicians."
Only what that person offers. One main service, then optional add-ons that fold into the running total & the slot length.
Live availability for Tina + 75 min. Closed days, time off, and taken slots are gone — every slot shown maps to a booking the database will accept.
Just name + contact. A reminder opt-in, and an optional "save my info" that signs them in with a 6-digit code — no passwords, no magic links.
Instant confirmation on screen and by email (text too, if enabled). The slot is held the moment this shows — no "pending" limbo.
The confirmation's secure link opens this — no login. Reschedule re-runs availability; cancel is free until the salon's cutoff, then it asks them to call.
Most of the booking system's value is invisible — it's the correctness, not the screens.
A Postgres exclusion constraint refuses two overlapping appointments for the same person — even if two customers tap the same slot in the same second. The loser sees "that time was just taken."
Choosing "Anyone" keeps every free person in play until the final tap, then commits to a specific one inside the transaction. Maximum availability, zero conflicts.
Add-ons extend the total time, so the "when" step only offers slots long enough for the whole visit plus the salon's buffer.
Guests never sign in. Those who opt to save info get a Supabase account verified by a one-time 6-digit code — pre-filled details next time, faster rebooking.
Slots are computed in the salon's timezone and stored as exact instants, so DST and travel never shift an appointment.
Email confirmation every time; SMS reminders only when the salon enables them and the customer opts in. Reminders are idempotent — never sent twice.