All work

Case study · Applied AI

AI Running Coach.

A training app I built, then used to run my first 53 km ultra.

Year
2025–26
Role
Solo: app, plan engine, integrations and testing.
Stack
Expo / React Native · Supabase · Inngest · Gemini · DeepSeek · Strava
Illustration for AI Running Coach53 KM
beginner to ultra
0 → 53 km
beginner to ultra
race finish time
6:43
race finish time
test subject: me
n = 1
test subject: me

Problem

A friend dared me to run the Amerongse Berg Ultra: 53 km of trail, six months away. I barely ran. So I built a coach.

  • Real data. It reads my actual runs from Strava.
  • Durable. Plan generation keeps going when the app closes.
  • My call. Big changes need my approval, and every plan can be undone.

How it works

An LLM drafts the plan. A second pass reviews it. Then code checks the rules (progression, tapering, space between hard days) before a plan is applied.

Each step is a checkpointed job, so an interrupted plan picks up where it stopped. Gemini handles the chat, DeepSeek writes the plans.

The key decision

Rules live in code, not in the prompt. That makes every new rule slower to add, since it needs a definition and tests. But a model can't talk its way past a test.

The honest part

What didn't work

A knee injury stopped me for over a month. I paused the AI and trained with a physio instead. It also showed me the app handled a long break badly.

Outcome

First ultra

53 km

6h 43m

Amerongse Berg Ultra · 28 March 2026

One runner, one race. It doesn't prove the app caused the result.

Finished twelve minutes ahead of the friend who dared me.