- Refactor AboutController to PageController to handle multiple static pages:
- /about
- /services/{slug} (diagnostic, sports, pre-post, neuro)
- /contact (new)
- New template riverside-pt-contact.html.twig:
- Contact details (address, phone, email)
- Office hours
- 'Send us a message' section directing to booking tool
- Multiple 'Make an Appointment' links back to /home#book-an-appointment
- Updated riverside_pt.routing.yml with riverside_pt.contact route
- Registered 'riverside_pt_contact' theme in riverside_pt.module
- Updated riverside_pt.install to skip legacy node creation for 'Contact' (and previously About/Services) to avoid alias conflicts
- Minor updates to home template, header handling, libraries (scroll support), and other controllers for consistency with page flows and email/booking features
All details pages (/about, /services/*, /contact) now include clear links back to 'Make an Appointment'.
- Persist selected date across month navigation using module-level vars;
datesSet re-applies is-selected and restores slots when returning
- Show "No availability this month" overlay after a fetch returns empty;
gated on initializedRef+fetchedRef so auto-advance phase is silent
- Fix Dec 31 overflow: showNonCurrentDates:false hides adjacent-month days
- Fix fc-day-disabled background tint in calendar.css
- Gate auto-advance on loading() callback so removeAllEventSources()
spurious eventsSet() fires don't trigger premature month jumping
- Inline overlay styles to avoid Tailwind cascade uncertainty; document
the module-level CX constant pattern as the general fix
- firstName added to booking form; storeSlot sends email directly when
full contact info present, skipping tempstore redirect
- Remove BookingForm.php and /schedule/book route (replaced by inline form)
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>
- Slots panel moves from popup to side-by-side with the calendar
- First available slot is pre-selected (highlighted) on load
- Calendar initializes to the next business day
- eventsSet auto-selects that date if it has availability
- Events endpoint now skips Sat/Sun (N > 5)
- Removed backdrop/close-button popup infrastructure
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>