What We Shipped
-
Coach subpanels as modals — Memories, Weekly Recap, and Goal Tracker now open as inline modals from Settings instead of separate pages. Keeps context without navigating away.
-
Metric card tooltips — Every card in the Daily Metrics modal now has a hover tooltip explaining what the metric means and how it's calculated. Good for new users who don't know what TSB or HRV status means.
-
Brand logos everywhere — Replaced placeholder icons with official SVGs for Strava, Wahoo, Intervals.icu, Polar, Oura, and Whoop across the SyncMenu and integrations section. Looks significantly more legit.
-
Unified sport color palette — Squashed the 4-map inconsistency across WorkoutCard, WeekView, WeekSummaryCell, and Strava. One source of truth, muted tones throughout.
-
Landing page BYOA section — Replaced the comparison table with an agent integration section highlighting the Bring Your Own Agent API. Added OpenClaw logo, real agent integration copy.
-
Referral friends list — Display names now shown in the referral dashboard with a cleaner column layout.
-
Stripe fixes — Handled deleted Stripe customers in checkout and portal flows (was causing 500s), fixed missing request body in checkout API, improved invoice.paid webhook handler, billing menu now routes unsubscribed users correctly to checkout.
-
Real last_seen_at tracking — Users' activity timestamps now update accurately on each session, fixing stale "last active" display in the admin panel.
-
30-day trial copy — Updated CTAs and signup subtitle throughout to explicitly call out the free 30-day trial.
What We Learned
- Stripe customer records can get deleted manually in the dashboard — need to handle that case gracefully or things blow up at checkout.
- Brand logos matter more than you'd think. The Wahoo "W" we were using wasn't even the real one.
What's Next
- Garmin integration improvements + sleep data enrichment timing
- Onboarding tour polish
- Weekly coach recap fix (provisional column migration)