Day-shift OR rotation
(7a – 7p)
If the user is working all day, the coach adapts the plan. Lifts and easy runs land after 7 PM; nothing before.
Tracking apps log what already happened. Training plans assume a schedule and a life I don't have. So I built something that did. An AI running coach that uses my daily biometric data to keep marathon training on track through everything a training plan doesn't consider.
Off-the-shelf plans assume a normal schedule.
Shift work doesn't have one.
Nights, post-call days, days that don't end at 5 — none of that, or how it affects the body, is in the plan.
Five days. Five collisions. A static plan adjusts to none of them.
A scheduled Cloud function pulls yesterday's sleep, HRV, and readiness from Oura; yesterday's runs from Strava; weight from Withings; the next two weeks of clinical shifts from Google Calendar; and the morning's conditions from a weather API. Each source is provided by a custom-coded MCP server so the orchestrator calls them the same way.
It then pulls the activity, pace, and coach history from Firestore, every metric, every piece of advice the system gave, and the current active plan, and assembles a single prompt: biodata, calendar, active plan, strategy rules, recent history.
That prompt goes to one frontier model. The model alters the plan when needed, stores necessary memories, and sends the briefing. The briefing lands on the phone through Telegram. 86 days, 86 briefings, so far.
The coach is initialized to know what post-call means. The system follows user-defined constraints and works to balance those against realities of scheduling, weather, and biometrics.
Day-shift OR rotation
(7a – 7p)
If the user is working all day, the coach adapts the plan. Lifts and easy runs land after 7 PM; nothing before.
Nights Shifts
→ mandatory rest blockIt knows shift starts and ends and that time between night shifts is not conducive to hard training
Morning after a call shift
→ How fast can things resume?Pulls HRV on recovery night to determine degree of recovery needed before restarting the plan
Across 149 days of continuous Oura data, every recovery metric moved in the right direction. The best — HRV increase of 28.5% — is the signal I care about most.
An 18.4 ms rise in Oura HRV balance — sustained across three months.
Every Oura recovery increased.
Weekly mileage rises through a training block and tapers before a goal race. The system chose the day-by-day shape; this is the cumulative result.