Measurement runs
Every measurement pass, read from the NDJSON run log. When a number looks wrong, the first question is whether that run actually finished — this answers it without shell access to the build machine.
Recently measured 7 sites
Newest first, across the whole corpus. The dots are the four Lighthouse categories, then axe and Core Web Vitals, in the colors that run carried.
- nationalrail.co.uk/live-trains/departures/birmingham-new-street
- nationalrail.co.uk/journey-planner?adults=1&destination=MAN&extraTime=0&leavingDate=141126&leavingHour=10&leavingMin=00&leavingType=departing&origin=BTN&type=single
- thetrainline.com
- nationalrail.co.uk
- traintimes.org.uk/live/btn
- traintimes.org.uk/btn/man/1000/2026-11-14
- traintimes.org.uk
The measuring machines Lighthouse benchmark index
Recorded once per measurement, from the run whose numbers were kept. Higher is faster.
- Median
- 2,075
- ±35% Median
- 1,349–2,801
- Mean
- 2,070
- Range
- 1,986–2,110
From 7 measurements. The mean sits above the median because a few unusually fast machines pull it there; most runs land close together. A site is told “the measuring machine was faster than most in this project” when its run lands outside that band. That is a distance rather than a percentile because the notice claims the CPU-bound numbers moved, and how far off the machine was decides that; how rare it was does not. These machines vary by running fast rather than slow, so in practice the notice is a fast-machine one.
| Started | Duration | Measured | Skipped | Failed | Warnings | Form factor | Log file |
|---|---|---|---|---|---|---|---|
| Oct 30, 2026, 10:21 PM UTC | 82.2s | 1 | 0 | 0 | 0 | mobile | logs/2026-10-30T22-21-03-531Z.ndjson |
| Oct 30, 2026, 10:19 PM UTC | 57.3s | 1 | 0 | 0 | 1 | mobile | logs/2026-10-30T22-19-16-038Z.ndjson |
| Oct 30, 2026, 10:17 PM UTC | 83.2s | 1 | 6 | 0 | 0 | mobile | logs/2026-10-30T22-17-19-561Z.ndjson |
| Oct 30, 2026, 10:08 PM UTC | 402.7s | 7 | 0 | 0 | 2 | mobile | logs/2026-10-30T22-08-47-674Z.ndjson |
| Oct 30, 2026, 10:08 PM UTC | 4.3s | 7 | 0 | 0 | 0 | — | logs/backfill-2026-10-30T22-08-54-494Z.ndjson |
Reading the logs
Each run writes a full NDJSON log to logs/<runId>.ndjson,
one JSON object per line, plus a summary line appended to
logs/runs.ndjson. Both are greppable:
# Every warning and error across all runs
grep -h '"level":"warn"\|"level":"error"' logs/*.ndjson | jq .
# What happened to one site in one run
jq 'select(.data.url == "https://example.com/")' logs/2026-01-01*.ndjson
# Run history at a glance
npx speedlify runs