What We Shipped
Training Insights Dashboard
The biggest drop of the day. Commit e6b16433 introduces a full deep-analysis dashboard at /dashboard/insights — the kind of thing coaches charge extra for.
What it surfaces:
- Response profile — which intensity mix produces an athlete's best race results, with confidence levels and race-linked recommendations
- Pattern insights — volume progression, intensity distribution shifts, training consistency, recovery patterns, and aerobic efficiency trends over time
- 52-week volume chart — zone-colored stacked bars so athletes can see exactly how their training evolved over the past year
- Consistency heatmap — GitHub-style grid showing week streaks and average sessions/week
Under the hood, a new /api/training/insights endpoint powers it all. The AI coach also gets a new analyze_training tool — users can ask "analyze my training" in chat and get the same insights conversationally. Skeleton loaders, full dark mode, graceful fallback for athletes without race data. 880 lines of new code, zero shortcuts.
MCP: Four New Read-Only Agent Tools
Commit 2eb2320a significantly expands what external agents can do with athlete data. Four new tools land in the MCP server:
get_race_history— query race results with sport/distance filtersget_training_load— CTL/ATL/TSB via exponential moving averages (42d/7d Banister TRIMP, same math as the internal correlation engine)get_workout_history— workouts enriched with Garmin activity metrics (HR, pace, power, cadence)get_upcoming_races— future events with weather data attached
All read-only, all using the service role key, all following existing auth patterns. This opens the door to third-party coaching agents and integrations hitting real athlete data safely.
Production Crash Fix: Keyboard Handler Guard
Commit f30bfad0 patches a TypeError that was firing in production (Sentry SENTRY-7379950933). Keyboard event targets can be SVGs, document nodes, or other non-HTMLElements that don't have .closest() — the calendar's keyboard handler wasn't checking before calling it. One instanceof HTMLElement guard, problem gone.
The Takeaway
April 1st and nothing here is a joke. The Training Insights dashboard is the most meaningful feature shipped in weeks — it turns raw training data into the kind of actionable analysis that actually changes how athletes train. Four commits, 880+ net new lines on the insights work alone, and a production crash silenced.