What We Shipped
TrainingPeaks Bulk Import
The big feature of the day: a full TrainingPeaks import pipeline. Five commits built this out from scratch — CSV metrics import (3fae668d), a simplified UI that ditches the import-type selector and date range picker in favor of just dragging in your export zip (44c1c65b), client-side chunking for large uploads with toast progress feedback (0d6fb0b7), parallel batch uploads running 3-concurrent for speed (465d97c1), and deterministic CSV IDs for dedup plus FIT workout date extraction (b34920de). The final piece: a proper bulk import system (8a988482) that ties it all together. If you've got years of data in TrainingPeaks, it now flows into Flow State in one shot.
AI Coach Deep Analytics
PR #591 (930678ff) shipped a major upgrade to the AI Coach: deep analytics covering running dynamics, zone distribution, 365-day training history, and pattern insights. The coach can now tell you things like your cadence trends, time-in-zone breakdowns, and training consistency patterns — not just respond to what you ask but proactively surface what matters.
A companion demo composition (4068393b, 622b12ce) replaced the old DeepAnalytics Remotion animation with a polished HistoricalAnalysis piece for product demos.
Activity Stats & Workout Detail
ActivityStatsModalnow merges top-levelactual_distanceanddurationinto the metrics view (125173c1) — no more missing data from certain import sources.- Workout detail correctly shows actual metrics from all import sources and time-fences recaps (
083bc2c0). - Activity zone distribution and subjective load tracking landed (
c39ae6c7), giving athletes RPE and perceived effort alongside the hard numbers.
Calendar & Navigation
- Calendar month now persists across refreshes (
55adf99b) — no more snapping back to the current month every time. - A new TrainingPeaks-style month picker dropdown (
3fc00a28) makes jumping between months fast and familiar.
Mobile & UX Polish
- Mobile settings now respects light/dark theme instead of being hardcoded to dark mode (
c8bb058b). - Coach header went compact on mobile with proper textarea height reset on submit (
98b30333). - Browser pull-to-refresh disabled to fix chat scroll jank on mobile (
9949f825). - Duplicate close buttons removed and import button text contrast fixed (
c2f01659). - New sport themes for rowing, XC ski, MTB, and cross-training via PR #590 (
a6c8e4f5).
Infrastructure
- Hand-rolled ZIP parser replaced with
fflate(16a74455) — smaller, faster, and actually maintained. - Sentry baseline session replay sampling disabled to preserve quota (
18a11415). - Partial unique index syntax fixed for
daily_health_metrics(0e589e62).
The Takeaway
Twenty-two commits. TrainingPeaks import is the headline — it removes the biggest friction point for athletes migrating from another platform. Deep analytics turns the AI Coach from a conversational tool into something that actually understands your training patterns over time. And the mobile polish across theme support, scroll behavior, and compact layouts shows the kind of attention to detail that makes daily use feel right. Massive Tuesday.