Back to Developer Logs

Build Log — March 3, 2026

Build Log — March 3, 2026

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_at now uses UTC start_date — fixes cross-source dedup with Garmin activities
  • Garmin HRV entries deduplicated; null reading_type treated 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.clover API version
  • /coach now redirects to /calendar — the email CTA was 404ing for new users