2026-09-28 · 10.00 km
Race-day readiness
If you hold your current 66 load per day
Form above about +10 on the day is where most people race well. Cutting volume to roughly 55% for the last 14 days moves you from -1 to +16 without losing meaningful fitness.
The course
Attach the course and the pacing below stops being a guess about a flat road. Upload the organiser GPX, or point at a run where you covered the same ground.
Training block
3 weeks · peaks at 66 km in week 2
Built from what you are running now, not from a template. Volume rises across the block, backs off every fourth week, and the heaviest week lands just before the taper. Every session is a band off your own curve, so it stays right as you get fitter.
You are tracking the plan closely -- within a tenth on most weeks, which is as close as anyone follows a schedule.
| Week | Phase | Volume | Long run | Key sessions |
|---|---|---|---|---|
| 1 · 3 to go | Base | 60 km | 15.6 km |
Steady 4:35–4:51 /km
20-30 min continuous, comfortably hard
Strides 3:46–3:58 /km
6 x 20 s relaxed and fast off a jog |
| 2 · 2 to go | Build | 66 km | 19.8 km |
Threshold 4:16–4:27 /km
3 x 8 min with 2 min jog
Intervals 4:00–4:12 /km
6 x 3 min hard with 2 min jog |
| 3 · 1 to go | Taper | 23 km | 5.8 km |
Sharpener 4:16–4:27 /km
10 min easy, 6 x 90 s at race effort, 10 min easy |
A schedule, not a prescription. It has no idea whether you slept, and the readiness read on the dashboard is the thing that should override it.
Split targets
Slightly negative — 1% steadier out, 1% quicker back
| Checkpoint | Projected | Goal |
|---|---|---|
| 1K | 4:15 | 3:56 |
| 2K | 8:29 | 7:53 |
| 3K | 12:44 | 11:49 |
| 4K | 16:59 | 15:45 |
| 5K | 21:13 | 19:42 |
| 6K | 25:23 | 23:33 |
| 7K | 29:33 | 27:25 |
| 8K | 33:42 | 31:17 |
| 9K | 37:52 | 35:08 |
| Finish | 42:01 | 39:00 |
, so the check has to wait for the parsed document. addEventListener('DOMContentLoaded', function () { try { var dm = ['standalone', 'minimal-ui', 'fullscreen', 'window-controls-overlay']; if (!document.getElementById('frozen-note') && (navigator.standalone || dm.some(function (m) { return matchMedia('(display-mode: ' + m + ')').matches; }))) { var pk = 'portal-installed', reg = JSON.parse(localStorage.getItem(pk) || '{}'); reg.Run315 = Date.now(); localStorage.setItem(pk, JSON.stringify(reg)); } } catch (e) { /* private mode - ignore */ } }); // Installable, and readable on the train. See templates/sw.js. if ('serviceWorker' in navigator) { addEventListener('load', function () { navigator.serviceWorker.register('/Run315/sw.js'); }); }