← Work
MCP ServersHackathonDashboard

Fitness Training Dashboard

Combining disparate training sources into one dashboard for faster workout analysis, with the plan and the actuals side by side.

0
Live APIs connected
0 tools
Custom Strava MCP server
<0 days
from concept → launch

Context

Too much time was spent looking across separate systems to figure out how to best prepare for races and increase my fitness. The data was disjointed and toggling between apps was confusing and a pain. I wanted a single place to see how my body was actually progressing, and how to adjust what's coming.

Challenge

Connect three data sources to pull in historical metrics and plan future workouts. Strava owned my workout data, Google Sheets had my multi-month training plan, and my coach sent a weekly email outlining changes to the plan. On top of that, I wanted an AI coach to analyze my performance and recommend adjustments for my next workout.

Execution

  • Built a custom Strava MCP server (5 tools) so Claude can pull real workout data in real time instead of guessing.

  • Added individual workout analysis so any completed session can be selected and reviewed by a Claude-powered coach that explains how the workout went and what to adjust next time.

  • Parse a 16+ week Google Sheet (every mesocycle, weekly workout, and long run) into a week-keyed map you can page through, forward to any planned week or back across the season.

  • Each week's mileage goal comes straight from the coach's "percent of peak" in the sheet, scaled to my peak, so an 80% week reads as a 20-mile target. That one number kept every week personal and focused on exactly what I needed right then, instead of getting lost in the sauce or staring too far down the season.

  • Hardened three live integrations against real-world failure modes: credential formatting, server-side URL resolution, and API rate limits.

Work

It started with one brief and a race on the calendar
Three sources that never talked to each other, wired into one Next.js dashboard: Garmin and Strava for the actual workouts, a season-long Google Sheet for the plan, and weekly coach emails for the adjustments.
Three sources that never talked to each other, wired into one Next.js dashboard: Garmin and Strava for the actual workouts, a season-long Google Sheet for the plan, and weekly coach emails for the adjustments.
Six milestones, kickoff to live in under two days: the Strava MCP server, plan vs actual, AI workout analysis, history backfill, week navigation, and the season view.
Six milestones, kickoff to live in under two days: the Strava MCP server, plan vs actual, AI workout analysis, history backfill, week navigation, and the season view.
The payoff view: the week's % of peak target, the coach's reps, my own daily plan, and the actual Strava workout, all in one row.
The payoff view: the week's % of peak target, the coach's reps, my own daily plan, and the actual Strava workout, all in one row.
Individual workouts can be selected and analyzed by a Claude-powered coach, with a plain-language read on how the workout went and recommendations for next time.

Individual workouts can be selected and analyzed by a Claude-powered coach, with a plain-language read on how the workout went and recommendations for next time.

The week at a glance, plus the 12-week mileage trend and a countdown to race day.
The week at a glance, plus the 12-week mileage trend and a countdown to race day.
Every tracked week, rendered from the same clean source as the live dashboard.
Every tracked week, rendered from the same clean source as the live dashboard.