Commit graph

22 commits

Author SHA1 Message Date
Philip Peterson
58988a4fe8 Fix calendar auto-advance and add fault injection for availability
- 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>
2026-06-03 19:52:14 -07:00
Philip Peterson
b000b824ed Service-aware booking: selector drives calendar, inline request form
- 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>
2026-06-03 19:39:35 -07:00
Philip Peterson
2f624f73ba Fix colors 2026-06-03 19:12:53 -07:00
Philip Peterson
e9bce5aac8 Fix dragging issues 2026-06-03 02:31:16 -07:00
Philip Peterson
50f14afcd1 Appointment type selector 2026-06-03 02:13:06 -07:00
Philip Peterson
c073984e82 Redesign booking calendar: inline slots, M-F only, pre-select next day
- 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>
2026-06-03 02:02:56 -07:00
Philip Peterson
b7287e8076 Clean up carousel: remove debug border, drop unused wrapRef
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:56:07 -07:00
Philip Peterson
d56e94ad09 Remove leftRef now that forceUpdate made it redundant
Resize handler uses functional setLeft (no direct left read).
onPointerDown uses left from render closure directly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:54:48 -07:00
Philip Peterson
bccac386a7 Fix carousel: swipe snap, disabled state, pointer events, resize
- Snap clamps after rounding so it can't overshoot max on narrow viewports
- atEnd computed inline each render from live measureMax()
- forceUpdate on resize guarantees re-render even when left doesn't change
- Track gets explicit width (TOTAL_W) so gap areas are hit-testable
- Resize handler always calls setLeft (clamp or no-op) to keep state consistent

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:54:29 -07:00
Philip Peterson
d693e87e02 Simplify swipe: direction-detect on touchend only
Drop live drag tracking, rubber-band resistance, and dragging ref.
A swipe > 50px left/right calls next()/prev() — same result, far less code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:41:13 -07:00
Philip Peterson
52af78a31a Add touch/swipe support to testimonials carousel
Live drag tracks the finger with transition disabled; slight rubber-band
resistance at both edges. On touchend, snaps to the nearest card
boundary within [−maxLeft, 0].

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:40:45 -07:00
Philip Peterson
b41113f318 Fix resize handler: use ref to avoid stale closure and listener churn
Register resize listener once with empty deps; track left via ref so
the debounced callback always reads the current offset without
re-registering on every click.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:40:15 -07:00
Philip Peterson
b0eaca462f Add testimonials carousel, redesign calendar, fix trusted host
- rpt-testimonials: pixel-offset carousel with DOM-measured max scroll,
  cards overflow the 1200px safe area to the right; red debug border on container
- calendar: circle-per-day design replacing event bars; teal outline for
  available days, filled for selected; dateClick replaces moreLinkClick
- settings.php: normalize BASE_URL before parse_url to fix trusted host
  error when scheme is missing; always include localhost fallback patterns

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-03 01:37:13 -07:00
Philip Peterson
1cb8335158 add swatch page, rename colors 2026-06-01 02:46:47 -07:00
Philip Peterson
21d4174c8f wip 2026-06-01 02:21:51 -07:00
Philip Peterson
1d9b1c1625 functionality build out 2026-06-01 01:47:26 -07:00
Philip Peterson
4232cded55 wip
All checks were successful
Build and push image / build (push) Successful in 20m26s
2026-05-25 00:32:23 -07:00
Mork Swork
4649c56a58 Hamburger menu 2026-05-14 21:23:54 -07:00
Mork Swork
9454dc03b4 wip flow 2026-05-13 15:26:33 -07:00
Mork Swork
0a2e80f7b0 wip booking flow 2026-05-13 14:55:52 -07:00
Mork Swork
269813c12d Use modal 2026-05-12 18:33:59 -07:00
Mork Swork
81c82c3da8 Structure 2026-05-12 17:28:47 -07:00