Pacelog
A training log built around one question: am I actually getting fitter?
2026 — ongoing · Solo build — data model, ingestion pipeline, and the analysis screens.
The problem
Running apps bury the one number that matters — are you actually getting fitter? I wanted a log that answers that in one screen.
What it does
A training log that computes rolling load, pace-at-heart-rate trend, and week-over-week consistency from raw activity data.
Engineering decisions
Store activities raw, derive every metric on read
Fitness metrics change definition as you learn what actually correlates with race results. Keeping the raw GPS and heart-rate samples immutable and computing rolling load at query time meant that changing a formula became a query change rather than a migration and a backfill. Recomputing eighteen months of history is now a page refresh.
Pace at a fixed heart rate is the headline number
Weekly mileage is an input, not an outcome — it tells you what you did, not what changed. The dashboard leads with average pace at 145 bpm on flat routes, which is the closest thing to a direct fitness readout an amateur can collect without a lab.
Four-week rolling averages, never single-run deltas
Heat, sleep, and caffeine move pace-at-heart-rate by several seconds per kilometre, which is larger than a month of real adaptation. Showing single-run changes would have made the chart mostly noise, so every trend line is a four-week rolling average with the raw points behind a toggle.
Where it landed
- Answers the fitness question in one screen, with no manual calculation
- Recomputes eighteen months of derived metrics in under a second
- Backfills from Strava exports without re-fetching activity history