- Remove client-side serviceEarliestDate; instead auto-advance month by
month until the server returns events (capped at 12 months)
- Only mark initialized when a date is actually found, so empty months
don't block auto-select on subsequent fetches
- Add per-service fault injection flags in ScheduleController::events
to force zero availability for testing the no-slots UI path
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Merge rpt-appt-type + calendar into unified rpt-booking Preact component;
service state drives event source via useEffect, no DOM event bus
- Each service has distinct availability (different slot density, start hours);
surgical rehab only available 46+ days out
- Slot click reveals inline Last name / Phone / Comments form; submits all
fields together to storeSlot rather than redirecting immediately
- Fix nextBusinessDay() timezone bug (toISOString is UTC; use local date
components instead); pre-select first available day >= next business day
- Today always has no availability (backend now starts from tomorrow)
- Replace all raw hex colour values with named palette tokens throughout
templates and JS components
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>