A coaching system for endurance athletes. Workouts and biometrics consolidate from Garmin devices, Withings devices, treadmill photos, voice memos, and manual entries. A Model Context Protocol server lets any large language model the athlete trusts read everything and write back. With a beautiful web UI, the core functionality was designed as infrastructure for AI agents.
Endurance athletes generate data across many surfaces. The watch tracks one slice. The scale another. Treadmill runs that the watch misses get logged from memory or skipped. A coach who works with the athlete reads journal entries and notes from a third place. Most of the data either goes nowhere or sits in tools that do not talk to each other.
Stride consolidates everything in one schema. Garmin contributes workouts and health metrics via a daily cron and a manual sync. Withings contributes weight, body fat, and blood pressure. Treadmill summaries land as workouts when an LLM transcribes the photo and posts it through MCP. Manual workouts and FIT file uploads cover the rest. Journal entries carry an author tag, so coach-written and athlete-written notes share the same surface without losing track of who wrote what.
A Model Context Protocol server with twenty-four tools sits behind the same database. Any language model that speaks MCP can read the full athlete context in a single call — profile, active plan, last ten workouts, fourteen days of health metrics — and write back: a workout, a plan, a journal entry, a revised heart-rate zone. The athlete edits the same fields in the web UI. Both surfaces see the same data.
Built with Claude Code, using its skills and sub-agents as a repeatable process for production-grade work.
In current use daily by one runner training for a fifty-mile ultramarathon.
Workouts and biometrics from every source land in one training journal: Garmin, Withings, treadmill photos, voice memos, manual entries. The same data sits behind an MCP server. Any LLM the athlete picks reads the history and writes the next plan.
Twenty-four MCP tools cover every entity for read and write. Any authenticated LLM client operates the data the way a user does. A treadmill photo becomes a workout from inside the chat. Plans get drafted and revised without leaving it.
One MCP call returns the full athlete context: profile, active plan, last ten workouts, fourteen days of health metrics. The same shape the dashboard renders. Coach and athlete start every session on the same page.
Plans have phases, schedules, written rules, phase targets, and a target-vs-actual chart. Individual days override without rebuilding the plan, which is what most weeks need.
Each workout drills down into its activities. Strength sessions group sets by exercise. Runs show duration, distance, average HR, calories, and the HR zone. Journal entries link from the same page.
Every workout records its source: garmin_sync, manual, coach, or FIT import. The list filters by modality with the source label inline. Whether the coach wrote a workout or the watch logged it reads at a glance.
A TipTap journal with author tags on every entry. The coach writes plan revisions and adherence reviews. The athlete writes felt-sense notes: pacing, shoe choice, knee flare-ups. Workout links and tags make both threads searchable.
Trend cards for resting HR, HRV, VO2 max, weight, and steps. HR zones come from Garmin, body composition from Withings or manual entries. The page the coach reads before adjusting next week's intensity.
Garmin and Withings sync every morning via a 6 AM Vercel cron. Garmin contributes activities and health metrics; Withings contributes weight, body fat, blood pressure. Manual sync and backfill run from settings.
Drop FIT files from any Garmin device on the import page; they become workouts via the same parser the cron uses. The MCP batch_create_workouts tool does the same job from the coach side, with date-plus-title dedup.