speedlify2

Personal instance of speedlify2 for Paul Kinchla's personal projects. Created by @zachleat.

Lighthouse lab metrics and Chrome UX Report field data for a list of sites, recorded on every run and compared over time — measured continuously.

Measurement runs · Embed a score ·

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.

Started Duration Measured Skipped Failed Warnings Form factor Log file
Aug 26, 2026, 1:18 AM UTC 0s 0 3 0 0 mobile logs/2026-08-26T01-18-33-873Z.ndjson
Aug 26, 2026, 1:18 AM UTC 0s 0 2 0 0 mobile logs/2026-08-26T01-18-37-791Z.ndjson
Aug 26, 2026, 1:18 AM UTC 0s 0 1 0 0 mobile logs/2026-08-26T01-18-33-327Z.ndjson
Aug 26, 2026, 1:18 AM UTC 0s 0 1 0 0 mobile logs/2026-08-26T01-18-32-146Z.ndjson
Aug 25, 2026, 7:31 PM UTC 0s 0 2 0 0 mobile logs/2026-08-25T19-31-24-150Z.ndjson
Aug 25, 2026, 7:31 PM UTC 0s 0 3 0 0 mobile logs/2026-08-25T19-31-28-863Z.ndjson
Aug 25, 2026, 7:31 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T19-31-27-132Z.ndjson
Aug 25, 2026, 7:31 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T19-31-23-854Z.ndjson
Aug 25, 2026, 6:38 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T18-38-20-221Z.ndjson
Aug 25, 2026, 6:38 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T18-38-29-688Z.ndjson
Aug 25, 2026, 6:38 PM UTC 0s 0 2 0 0 mobile logs/2026-08-25T18-38-16-919Z.ndjson
Aug 25, 2026, 6:38 PM UTC 0s 0 3 0 0 mobile logs/2026-08-25T18-38-15-434Z.ndjson
Aug 25, 2026, 5:48 PM UTC 119.1s 3 0 0 1 mobile logs/2026-08-25T17-48-40-083Z.ndjson
Aug 25, 2026, 5:48 PM UTC 89.5s 2 0 0 1 mobile logs/2026-08-25T17-48-38-143Z.ndjson
Aug 25, 2026, 5:48 PM UTC 55.9s 1 0 0 1 mobile logs/2026-08-25T17-48-44-173Z.ndjson
Aug 25, 2026, 5:48 PM UTC 33.3s 1 0 0 1 mobile logs/2026-08-25T17-48-36-500Z.ndjson
Aug 25, 2026, 5:31 PM UTC 0s 0 3 0 0 mobile logs/2026-08-25T17-31-08-818Z.ndjson
Aug 25, 2026, 5:31 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T17-31-12-818Z.ndjson
Aug 25, 2026, 5:31 PM UTC 0s 0 2 0 0 mobile logs/2026-08-25T17-31-10-609Z.ndjson
Aug 25, 2026, 5:31 PM UTC 0s 0 1 0 0 mobile logs/2026-08-25T17-31-08-113Z.ndjson
Aug 25, 2026, 5:18 PM UTC 256.5s 5 0 0 1 mobile logs/2026-08-25T17-18-44-941Z.ndjson
Aug 25, 2026, 5:07 PM UTC 9.3s 1 0 0 1 mobile logs/2026-08-25T17-07-46-836Z.ndjson
Aug 25, 2026, 5:07 PM UTC 10.4s 1 0 0 1 mobile logs/2026-08-25T17-07-23-559Z.ndjson
Aug 25, 2026, 4:56 PM UTC 17.1s 1 0 0 1 mobile logs/2026-08-25T16-56-28-877Z.ndjson
Aug 25, 2026, 4:49 PM UTC 250.1s 5 0 0 1 mobile logs/2026-08-25T16-49-27-548Z.ndjson
Aug 25, 2026, 4:49 PM UTC 11.3s 1 0 0 1 mobile logs/2026-08-25T16-49-00-103Z.ndjson
Aug 25, 2026, 4:31 PM UTC 355.6s 7 0 0 1 mobile logs/2026-08-25T16-31-15-105Z.ndjson
Aug 25, 2026, 2:43 PM UTC 378s 2 366 0 1 mobile logs/2026-08-25T14-43-49-029Z.ndjson
Aug 25, 2026, 2:43 PM UTC 216.3s 0 351 4 12 mobile logs/2026-08-25T14-43-46-996Z.ndjson
Aug 25, 2026, 2:43 PM UTC 33.1s 1 366 0 0 mobile logs/2026-08-25T14-43-44-111Z.ndjson
Aug 25, 2026, 2:43 PM UTC 0s 0 0 0 0 logs/backfill-2026-08-25T14-43-53-378Z.ndjson
Aug 25, 2026, 2:43 PM UTC 0s 0 371 0 0 mobile logs/2026-08-25T14-43-48-650Z.ndjson
Aug 25, 2026, 1:49 PM UTC 827s 8 363 0 2 mobile logs/2026-08-25T13-49-48-784Z.ndjson
Aug 25, 2026, 1:49 PM UTC 337.6s 2 366 0 1 mobile logs/2026-08-25T13-49-49-956Z.ndjson
Aug 25, 2026, 1:49 PM UTC 131.2s 2 365 0 0 mobile logs/2026-08-25T13-49-59-713Z.ndjson
Aug 25, 2026, 1:49 PM UTC 99.4s 1 350 1 3 mobile logs/2026-08-25T13-49-53-804Z.ndjson
Aug 25, 2026, 1:49 PM UTC 3.9s 9 0 0 0 logs/backfill-2026-08-25T13-49-59-859Z.ndjson
Aug 25, 2026, 12:44 PM UTC 398.5s 0 350 14 45 mobile logs/2026-08-25T12-44-10-876Z.ndjson
Aug 25, 2026, 12:44 PM UTC 56.6s 0 365 3 9 mobile logs/2026-08-25T12-44-08-070Z.ndjson
Aug 25, 2026, 12:44 PM UTC 47s 0 365 2 6 mobile logs/2026-08-25T12-44-12-018Z.ndjson
Aug 25, 2026, 12:44 PM UTC 0.1s 0 368 0 0 mobile logs/2026-08-25T12-44-11-262Z.ndjson
Aug 25, 2026, 12:44 PM UTC 0s 0 0 0 0 logs/backfill-2026-08-25T12-44-11-667Z.ndjson
Aug 25, 2026, 11:26 AM UTC 72.9s 1 367 0 0 mobile logs/2026-08-25T11-26-06-104Z.ndjson
Aug 25, 2026, 11:26 AM UTC 29.6s 1 364 0 0 mobile logs/2026-08-25T11-26-06-371Z.ndjson
Aug 25, 2026, 11:26 AM UTC 0s 0 365 0 0 mobile logs/2026-08-25T11-26-09-911Z.ndjson
Aug 25, 2026, 11:26 AM UTC 0s 0 0 0 0 logs/backfill-2026-08-25T11-26-11-687Z.ndjson
Aug 25, 2026, 11:26 AM UTC 0s 0 350 0 0 mobile logs/2026-08-25T11-26-09-873Z.ndjson
Aug 25, 2026, 10:31 AM UTC 567.8s 5 360 1 4 mobile logs/2026-08-25T10-31-42-267Z.ndjson
Aug 25, 2026, 10:31 AM UTC 303.5s 1 367 0 1 mobile logs/2026-08-25T10-31-44-268Z.ndjson
Aug 25, 2026, 10:31 AM UTC 165.3s 1 364 0 1 mobile logs/2026-08-25T10-31-45-015Z.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