Double-bookings are usually a configuration issue, not a software bug. Here's the playbook for diagnosing and preventing them.
The 6 causes
1. Same tech, overlapping appointments — a tech is double-booked at 10 AM. Almost always: shop has multiple booking surfaces (public page + manual entry + walk-in) and the conflict check only ran for one of them. 2. Same bay, two services — two different services landed in Bay 2 from 10:00-11:30 because bay assignment is service-specific and the booking flow didn't respect bay capacity. 3. Off-shift booking — a tech is scheduled at 8 AM but their shift starts at 9. Working hours weren't enforced. 4. Google Calendar drift — tech blocked time in personal Google Calendar but the two-way sync wasn't enabled, so SalesThumb didn't know. 5. Holiday not blocked — shop is closed July 4 but the holiday wasn't entered in SalesThumb, so the public booking page accepted appointments. 6. Buffer time violation — install runs longer than estimated; next appointment was booked back-to-back without buffer.
Fix #1 — Enable real-time conflict check on every booking surface
Settings → Scheduling → Conflict check. Confirm enabled for:
- Public booking page
- Manual entry by front desk
- Walk-in flow
- Reschedule flow
- HQ-level reservation flow (if HQ tier)
All five must be enabled. If you're on the public page and the front desk simultaneously, the conflict check has to run at SUBMIT time, not at slot-display time — that's the gap most platforms miss.
Fix #2 — Set service-to-bay mappings explicitly
Settings → Scheduling → Bay capacity. For each service, set:
- Required bay type (e.g. "Full PPF requires a clean room bay")
- Bay count consumed (most services = 1 bay; some long services consume 2 if you stage in one and finish in another)
- Cannot share with (e.g. "Ceramic curing time cannot share bay with active install")
These constraints make the scheduler refuse impossible bookings.
Fix #3 — Enforce tech working hours
Settings → Team → each tech → Working hours.
Set start/end times per day. SalesThumb scheduler will not book a tech outside their working hours unless you explicitly override at quote time.
Also: set unavailability for vacation days here, not in Google Calendar only.
Fix #4 — Enable two-way Google Calendar sync
Google Calendar two-way sync — full setup. Personal Google Calendar blocks should pull into SalesThumb.
Fix #5 — Block holidays in advance
Settings → Scheduling → Holidays. Block at least:
- Thanksgiving + Black Friday
- Christmas Eve + Christmas Day
- New Year's Eve + New Year's Day
- Memorial Day
- July 4
- Labor Day
- Any shop-specific closures (owner's birthday, anniversary)
Do this in January for the whole year. Block out shop holidays walks through it.
Fix #6 — Set buffer time per service
Settings → Services → each service → Buffer time.
- After a 90-min install, set 15 min buffer (cleanup, photos, walk-through)
- After a 4-hour install, set 30-45 min buffer
- After ceramic curing, set 2-4 hours buffer (no other car in that bay)
Without buffers, the scheduler thinks two consecutive 90-min installs can be back-to-back. In reality, the second customer waits 20 min while the tech wraps up the first. Bake the buffer in.
When a conflict slips through
If despite everything a double-booking lands:
1. Open the conflicting appointments. Look at the booking source (public page, manual, walk-in, HQ). 2. Check the timeline of when each was booked. The later booking should have failed conflict check — find out why. 3. Reach out to the customer who needs to be rescheduled. Apologize, offer a discount ($20-50 makes most customers whole). 4. File a bug at info@roffik.com with the customer/appointment IDs so we can audit.
Daily monitoring
Settings → Scheduling → Conflict report. Shows any current or future bookings flagged as having potential conflicts. Should be empty most days. If not, work the list.