Booking flow anatomy
Four steps, four knobs each
The customer-facing booking flow on goldenhour is four steps: service → date → time → confirm. Each step has its own configuration knobs + its own common abandonment causes. Master each step in turn.
Step 01
Pick a service
Customer lands on /book/<slug>. Sees the service grid sorted with featured services first, then by most-recently-edited within each bucket. Tap a service → moves to step 2.
Config knobs
- Service visibility (Settings → Services → isPublic per service)
- Service ordering (Settings → Services → isFeatured toggle)
- Service photo (per-service photoUrl) + description copy
- Per-service available days (constrains which dates show in step 2)
Common abandonment cause
Generic service names + no descriptions + no photos. The grid reads as a list of SKUs, not as a real menu. Add a 1-sentence description + a photo to every service.
Step 02
Pick a date
Customer sees a calendar of the next 14-30 days with per-day availability indicator. Closed days (per business hours OR per-service available-days OR time-blocks) appear greyed-out.
Config knobs
- Business hours (Settings → Hours, per day)
- Per-service available-days (Settings → Services)
- Time blocks (Calendar → block time)
- Booking horizon (max days out: defaults to 60)
- Min lead time (defaults to 24 hours)
Common abandonment cause
Calendar shows ZERO available dates because business hours + per-service available days + drive-buffer don't intersect anywhere. Run the test on your own phone every time you change a setting.
Step 03
Pick a time
Customer sees a grid of slot times for the selected day. Slots are computed via `computeAvailableSlots`: business hours minus existing appointments minus time blocks minus per-service buffers minus drive-buffer (mobile).
Config knobs
- Service duration + processing time + before/after buffers (per-service)
- Drive buffer (Settings → Mobile, account-wide)
- Slot interval (defaults to 30 min)
Common abandonment cause
Buffers stacked too tight = no available slots even on an empty day. Buffers stacked too wide = three slots/day max + frustrated customers. The sweet spot for spray tan: 15-min before + 30-min after + 30-min drive (mobile only).
Step 04
Confirm + pay
Customer enters contact info, fills the intake form, optionally pays deposit, optionally selects add-ons, accepts the policy, submits.
Config knobs
- Intake questions (Settings → Intake)
- Deposit amount (per-service depositCents)
- Add-ons + which services they apply to (Settings → Add-ons)
- Cancellation policy + no-show fee (Settings)
- Booking-page layout sections (Settings → Booking page)
Common abandonment cause
Highest-friction step. 30+ intake questions, surprise no-show fee disclosed only at this step, slow Mapbox geocode for mobile address. Read the page yourself on mobile + count the seconds: under 90s is the target.
Diagnostic checklist
Three checks every 30 days
- 01Walk the flow yourself on mobile. In private/incognito. Time it. Note any moment of friction (slow load, confusing copy, surprise question, abandoned).
- 02Check Reports → Funnel. Compare step-to-step conversion. The biggest drop-off is your next optimization target.
- 03Ask one regular client. Send a voice memo asking them to walk through booking + describe what they see + what confused them. Three minutes of audio beats a year of guessing.