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
Oct 10, 2026, 10:55 AM UTC 115.9s 3 0 0 1 mobile logs/2026-10-10T10-55-07-412Z.ndjson
Oct 10, 2026, 10:55 AM UTC 83.2s 2 0 0 1 mobile logs/2026-10-10T10-55-08-556Z.ndjson
Oct 10, 2026, 10:55 AM UTC 29.8s 1 0 0 1 mobile logs/2026-10-10T10-55-05-506Z.ndjson
Oct 10, 2026, 10:55 AM UTC 26.9s 1 0 0 1 mobile logs/2026-10-10T10-55-07-063Z.ndjson
Oct 9, 2026, 11:37 AM UTC 0s 0 1 0 0 mobile logs/2026-10-09T11-37-20-899Z.ndjson
Oct 9, 2026, 11:37 AM UTC 0s 0 2 0 0 mobile logs/2026-10-09T11-37-20-680Z.ndjson
Oct 9, 2026, 11:37 AM UTC 0s 0 3 0 0 mobile logs/2026-10-09T11-37-21-733Z.ndjson
Oct 9, 2026, 11:37 AM UTC 0s 0 1 0 0 mobile logs/2026-10-09T11-37-20-571Z.ndjson
Oct 8, 2026, 11:44 AM UTC 122.5s 3 0 0 1 mobile logs/2026-10-08T11-44-08-961Z.ndjson
Oct 8, 2026, 11:44 AM UTC 84.2s 2 0 0 1 mobile logs/2026-10-08T11-44-03-601Z.ndjson
Oct 8, 2026, 11:44 AM UTC 35s 1 0 0 1 mobile logs/2026-10-08T11-44-08-218Z.ndjson
Oct 8, 2026, 11:44 AM UTC 24.5s 1 0 0 1 mobile logs/2026-10-08T11-44-07-206Z.ndjson
Oct 7, 2026, 11:28 AM UTC 110.7s 3 0 0 1 mobile logs/2026-10-07T11-28-30-136Z.ndjson
Oct 7, 2026, 11:28 AM UTC 97.6s 2 0 0 1 mobile logs/2026-10-07T11-28-41-051Z.ndjson
Oct 7, 2026, 11:28 AM UTC 26.2s 1 0 0 1 mobile logs/2026-10-07T11-28-34-802Z.ndjson
Oct 7, 2026, 11:28 AM UTC 23.8s 1 0 0 1 mobile logs/2026-10-07T11-28-30-508Z.ndjson
Oct 6, 2026, 11:41 AM UTC 0s 0 1 0 0 mobile logs/2026-10-06T11-41-10-424Z.ndjson
Oct 6, 2026, 11:41 AM UTC 0s 0 1 0 0 mobile logs/2026-10-06T11-41-14-728Z.ndjson
Oct 6, 2026, 11:41 AM UTC 0s 0 2 0 0 mobile logs/2026-10-06T11-41-10-241Z.ndjson
Oct 6, 2026, 11:41 AM UTC 0s 0 3 0 0 mobile logs/2026-10-06T11-41-08-373Z.ndjson
Oct 5, 2026, 11:59 AM UTC 116.9s 3 0 0 1 mobile logs/2026-10-05T11-59-38-099Z.ndjson
Oct 5, 2026, 11:59 AM UTC 84s 2 0 0 1 mobile logs/2026-10-05T11-59-39-794Z.ndjson
Oct 5, 2026, 11:59 AM UTC 32.9s 1 0 0 1 mobile logs/2026-10-05T11-59-38-124Z.ndjson
Oct 5, 2026, 11:59 AM UTC 24.6s 1 0 0 1 mobile logs/2026-10-05T11-59-38-376Z.ndjson
Oct 4, 2026, 10:51 AM UTC 114.8s 3 0 0 1 mobile logs/2026-10-04T10-51-12-496Z.ndjson
Oct 4, 2026, 10:51 AM UTC 88.8s 2 0 0 1 mobile logs/2026-10-04T10-51-18-336Z.ndjson
Oct 4, 2026, 10:51 AM UTC 34.1s 1 0 0 1 mobile logs/2026-10-04T10-51-15-366Z.ndjson
Oct 4, 2026, 10:51 AM UTC 34.7s 1 0 0 1 mobile logs/2026-10-04T10-51-13-124Z.ndjson
Oct 3, 2026, 10:10 AM UTC 117.7s 3 0 0 1 mobile logs/2026-10-03T10-10-40-875Z.ndjson
Oct 3, 2026, 10:10 AM UTC 85.1s 2 0 0 1 mobile logs/2026-10-03T10-10-36-931Z.ndjson
Oct 3, 2026, 10:10 AM UTC 34s 1 0 0 1 mobile logs/2026-10-03T10-10-41-766Z.ndjson
Oct 3, 2026, 10:10 AM UTC 32.2s 1 0 0 1 mobile logs/2026-10-03T10-10-37-554Z.ndjson
Oct 2, 2026, 10:50 AM UTC 0s 0 1 0 0 mobile logs/2026-10-02T10-50-44-408Z.ndjson
Oct 2, 2026, 10:50 AM UTC 0s 0 2 0 0 mobile logs/2026-10-02T10-50-46-931Z.ndjson
Oct 2, 2026, 10:50 AM UTC 0s 0 1 0 0 mobile logs/2026-10-02T10-50-45-645Z.ndjson
Oct 2, 2026, 10:50 AM UTC 0s 0 3 0 0 mobile logs/2026-10-02T10-50-43-905Z.ndjson
Oct 1, 2026, 11:18 AM UTC 117.7s 3 0 0 1 mobile logs/2026-10-01T11-18-23-213Z.ndjson
Oct 1, 2026, 11:18 AM UTC 82.6s 2 0 0 1 mobile logs/2026-10-01T11-18-43-254Z.ndjson
Oct 1, 2026, 11:18 AM UTC 26.8s 1 0 0 1 mobile logs/2026-10-01T11-18-23-514Z.ndjson
Oct 1, 2026, 11:18 AM UTC 24.2s 1 0 0 1 mobile logs/2026-10-01T11-18-24-863Z.ndjson
Sep 30, 2026, 10:52 AM UTC 86.4s 2 0 0 1 mobile logs/2026-09-30T10-52-10-444Z.ndjson
Sep 30, 2026, 10:51 AM UTC 109.4s 3 0 0 1 mobile logs/2026-09-30T10-51-34-237Z.ndjson
Sep 30, 2026, 10:51 AM UTC 31.3s 1 0 0 1 mobile logs/2026-09-30T10-51-36-810Z.ndjson
Sep 30, 2026, 10:51 AM UTC 33.6s 1 0 0 1 mobile logs/2026-09-30T10-51-34-267Z.ndjson
Sep 29, 2026, 11:01 AM UTC 0s 0 3 0 0 mobile logs/2026-09-29T11-01-15-390Z.ndjson
Sep 29, 2026, 11:01 AM UTC 0s 0 1 0 0 mobile logs/2026-09-29T11-01-22-819Z.ndjson
Sep 29, 2026, 11:01 AM UTC 0s 0 2 0 0 mobile logs/2026-09-29T11-01-16-446Z.ndjson
Sep 29, 2026, 11:01 AM UTC 0s 0 1 0 0 mobile logs/2026-09-29T11-01-15-134Z.ndjson
Sep 28, 2026, 11:23 AM UTC 114.7s 3 0 0 1 mobile logs/2026-09-28T11-23-31-009Z.ndjson
Sep 28, 2026, 11:23 AM UTC 83.1s 2 0 0 1 mobile logs/2026-09-28T11-23-30-746Z.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