Context / Focus for Today
Major landing page refresh with an interactive AI coach demo and platform integrations showcase. Shipped early access gating with waitlist flow. Garmin sync reliability improvements and mobile UX polish across the board.
Things I Got Done Today
Landing Page Overhaul
Complete refresh of the landing page with new interactive elements and better mobile responsiveness.
- PR #289 feat: add integrations section to landing page with Strava branding — shows platform connections front and center
- feat: add AI coach demo animation and streamline landing page — interactive demo showing the AI coach in action
- ui: redesign coach demo as unified card with calendar view — cleaner presentation
- ui: extend coach demo calendar to full Mon–Sun week view
- ui: swap coach demo right panel to week calendar view
- feat: extend landing page demo to scroll through 3-month marathon plan
- ui: improve landing page export animation
- copy: remove redundant word from integrations section
- fix: center hero heading on landing page
- fix: optically center italic hero text on landing page
- feat: change "Join Early Access" to "Get Early Access" on CTA buttons
- ui: remove Pricing link from landing page header
Mobile UI Audit
Comprehensive pass on mobile experience across the app.
- feat: mobile UI audit fixes — text readability, export action sheet, keyboard avoidance
- feat: mobile UI/UX audit — touch targets, dark mode, landing page cleanup
- fix: maintain consistent modal height for empty metric charts
Early Access Gate
Shipped waitlist flow with invite system for controlled rollout.
- feat: add early access gate with waitlist, invite emails, and conversion tracking
- fix: auto-redirect after signup instead of asking for email confirmation
- fix: add onAuthSuccess redirect to /x and /strava landing pages
Garmin Reliability
Major improvements to Garmin sync reliability with retry logic and better error handling.
- PR #288 Improve Garmin sync error handling with retry logic and user-facing errors
- feat: add garminSyncWithRetry client-side fetch wrapper with retry logic
- feat: wire garminSyncWithRetry into auto-sync and manual sync handlers
- feat: add onError callback to garminAutoSync for surfacing classified errors
- feat: surface Garmin auto-sync errors via toast with reconnect/retry actions
- feat: update toast messages and error copy to match PRD specifications
- feat: add GarminStatusBadge component with colored dot overlay on Sync button
- feat: add action field to Garmin status API for server-driven recovery buttons
- feat: add Garmin health data backfill script
- feat: add Garmin health data gap monitor and make cron pull-token-resilient
- chore: remove dead token-helper.ts (replaced by lib/garmin/client.ts)
Onboarding Improvements
- PR #290 fix: allow closing onboarding modal without completing
- PR #291 feat: improve onboarding survey UX
- fix: improve onboarding survey UX (follow-up)
Testing & Infrastructure
- test: add e2e tests for AI coach calendar integration
- test: add auto-sync onError callback tests
- fix: repair pre-commit/pre-push hooks and fix stale tests
- feat: add Microsoft Clarity for heatmaps and session recordings
- chore: retire auto-compound nightly loop, keep on-demand PRD generator
Plan Engine
- PR #286 fix: pass workoutDays through to buildPlan in API routes
- feat: add % Threshold Pace targets to workout builder
Commits Today
- 3 PRs merged (#286, #288, #289, #290, #291)
- Major: Landing page overhaul with interactive coach demo
- Major: Early access gate with waitlist
- Major: Garmin sync retry logic and error UX
- Mobile: Comprehensive UI/UX audit pass
- Analytics: Microsoft Clarity integration
Notes / Observations
- Interactive demos sell better than screenshots. The coach demo showing a real calendar with workouts appearing is way more compelling than static images.
- Early access gating lets us control rollout velocity and creates urgency. Waitlist → invite flow working smoothly.
- Garmin error handling was a mess — now there's proper retry logic, classified errors, and server-driven recovery buttons. Users see actionable toasts instead of cryptic failures.
- Mobile polish matters. Touch targets, keyboard avoidance, action sheets — the details add up.
Momentum Score: 8 / 10
Big landing page refresh shipped with interactive elements. Early access gate gives us control over the beta rollout. Garmin reliability got a major upgrade with retry logic and proper error surfacing. Mobile UX significantly improved. Good breadth across marketing, reliability, and polish.