What We Shipped
Shareable Workout Recaps
The biggest feature of the day. When you open the Activity Stats modal, the AI coach now auto-generates a personalized workout recap on first open — no tapping required. The recap surfaces splits, effort level, and how the session fits your current training load.
More importantly: you can now share it. A Share Recap link in the AI Insights card generates a clean /workout/[id]/share page — a single-screen card designed to screenshot and post. Emoji stripped, auth not required to view, back button included. Built for social sharing without friction.
Renpho Smart Scale Integration
Body composition is now a first-class data source. Renpho smart scale users can connect their account via OAuth, sync weight and body metrics, and see the data alongside their training load in the health dashboard. Full stack shipped: auth flow, sync route, body metrics DB model, settings UI, and a cron for ongoing background sync.
Mobile Nav Overhaul
Flattened the mobile navigation architecture. A persistent bottom nav bar now lives across the dashboard and health pages, with Recovery merged as a tab rather than a separate screen. Rendered via portal to fix iOS position: fixed breakage — a notoriously annoying edge case that's been lurking since launch.
Added pull-to-refresh in PWA standalone mode. It just feels right.
Personalized Metrics Guide
New CTL/ATL/TSB explainer sheet that reads your actual numbers. Instead of generic definitions, you see something like "Your CTL is 68 — that's a solid aerobic base for your current training phase." Dynamic copy, grounded in your real data.
Error Observability & Onboarding
- Sentry webhook handler — sync errors now fire Slack alerts in real time. No more discovering integration failures days later.
- PWA install email — added as step 1 of the welcome drip sequence. New users get a nudge to install the PWA before anything else.
- TrainingPeaks import UI — wired into the integrations settings page. Athletes migrating from TP can now trigger a history pull from the UI.
Fixes Worth Noting
- Strava
completed_atnow uses UTCstart_date— fixes cross-source dedup with Garmin activities - Garmin HRV entries deduplicated;
nullreading_typetreated as OVERNIGHT - Interval distance parsed from workout title (
5x1k → 5.0 km) for compliance scoring - Admin auth persists across dashboard navigation via
sessionStorage - Running shoe icon replaced with Phosphor
SneakerMove— actually looks like a shoe - Stripe upgraded to 20.4.0 with
2026-02-25.cloverAPI version /coachnow redirects to/calendar— the email CTA was 404ing for new users