An AI head coach built on fourteen years of my own telemetry — every ride, run, swim and night of sleep since 2012. It plans my races leg by leg, seals the prediction before the gun, and audits itself after. This is what two races in seven days taught it — and me.
Three weeks before race one, the system predicted my splits from FTP tests, sleep data, a GPX recon of the course and three years of my age group's results. I published it before the start. That's the method: a forecast you can't quietly edit afterwards.
And this is what the coach saw at 6 a.m. on race morning — a taper landing exactly where it was aimed:
| Tägi Sprint · 16 Aug | Predicted | Actual | Δ |
|---|---|---|---|
| Swim | 8:25 | 9:28 | +63s |
| Bike | 30:50 | 30:54 | +4s |
| Run | 14:55 | 15:35 | +40s |
| Transitions | 4:10 | 4:17 | +7s |
| Total | 58:20 | 1:00:13 | +1:53 |
Outside its own range. But the bike — the split it had named three weeks earlier as the one costing me the podium, quantified at 1:05 short — came in 1:09 short. Wrong about the race. Right about the problem.
A prediction that can't be wrong in public is a demo.
Race two was seven days out. The data said dozens of things; the system prescribed exactly two: race the swim (I'd left my heart rate 7 beats below my own 2023 self) and pedal to the dismount line (I'd shut off 500 m early and gifted 8 seconds).
Both executed. And the watch carried a power script — four segments by distance, each with a target range and a cue written by the coach:
Result: 1:06:00.8 — 5th of 95 in my age group, 22nd of 351 overall. Top 5%. And the number that actually matters:
GAP TO THE PODIUM · THREE MINUTES CLOSED
I fixed the swim effort — heart rate up 4 beats, pushed from the first stroke — and went 16 seconds per 100 m slower. The watch explained it: stroke length collapsed 15% without buoyancy, covered up by 19 extra strokes. That's not a fitness gap. It's a technique gap, measured — and it just became a named project with a swim coach.
The run opened 10 seconds slower than goal pace — by prescription. Every kilometre after was faster than the last, closing at 3:54 with heart rate climbing 162→175. Same speed as race one over 1.1 km more, at 3 beats lower cost. The slowest first kilometre bought the fastest finish.
The race block ran ten weeks, W24 to W34 — Norwegian sub-threshold method, scaled to 7–9 hours a week around a family of five. Start to finish, measured:
| Start · W24 | End · W34 | |
|---|---|---|
| Bike FTP | 237 W (test) | 241 W held 31 min in race |
| Swim CSS | ~1:50 /100m | 1:44 long-course |
| Run threshold | 3:56 /km fresh | 4:10 /km off the bike, at 30°C, negative split |
| Tägi vs my 2023 | 1:00:34 · 4/28 | 1:00:13 · 6/42 — same percentile, field +50% |
| Uster | — | 5/95 · top 5.3% |
| Body weight | ~72.8 kg | ~72.2 kg |
| Gap to the podium | 4:34 (2023) | 1:11 |
The clock says 21 seconds in three years. The podium gap says 3:23 in ten weeks. Pick your metric carefully — it decides what you train next. I picked the gap.
After both races the system audits itself — prediction vs actual, leg by leg, in a document it can't edit later. These five survived contact with reality and are now standing orders:
Four segments, each with a wattage range and a one-line cue. Segments advance by kilometre, not by button press.
Evidence: 3 of 4 segments in range · VI 1.13 → 1.10 race over raceRestraint is a purchase, not a loss. Racing the first km cost a mid-race collapse in race one; banking it bought a full negative split in race two.
Evidence: 4:22 opener → every km faster · final km 3:54The data offers twenty fixes. Two get through. Both were executed on race day — because two is a plan and twenty is noise.
Evidence: swim HR +4 · pedalled to the line, both deliveredSwim the actual lake at the actual start time, days before. Same sun angle for sighting, same water, same no-wetsuit feel. Fear becomes a number.
Evidence: recon pace 1:47–1:49/100m → race plan built on itFull session table — doses, targets, an abort rule — written into the daily brief before I wake. No app-hopping, no recomputing, no ambiguity at 6 a.m.
Evidence: read every morning of race week, on a phone, with coffee3,772 activities, 8,586 nights of sleep and HRV, 74 races since 2012 — in a Postgres database I own. The coach doesn't guess my zones; it reads them. When it says "your bike is 92 seconds short of the podium," that's a query, not a vibe.
Its behaviour is a markdown file in my notes. When it got a race distance wrong, the fix was editing a sentence — on my phone. Every rule on this page is literally a paragraph in that file now. It runs every morning as part of a twelve-agent system that also handles my money, my inbox and my week.
This isn't a product. It's a way of building — and the corpus you already have (Garmin, Strava, a drawer of results) is worth more than any plan you can buy. If you want one of these for your own season, tell me where you're stuck.
TELL ME YOUR RACE → Easiest way in: just email me at cris@grossmann.ai. I read every one myself.