Speed · measured on production · 2026-09-24

69 ns to decide.
Every number names its clock.

The decision runs in memory. The page comes from the edge. The paint, the test gate and the ship are each timed on their own clock, with a date and a source. A number measured on one clock is never quoted as another.

69 ns
Routing decision — follow_route over the real production graph (357 edges)
decision in RAM · 2026-09-17
68 ms
A prerendered page — /speed, served from the edge
time to first byte, production · 2026-09-25
874 ms
The chat page on desktop — one.ie/chat
largest paint, Lighthouse, production · 2026-08-20
17.2 s
The ship gate — tests only what changed since the last green gate
test gate, vitest Duration · 2026-09-23

The best we have measured, clock by clock

Best and latest sit in separate columns. Where a number has slipped since its best, the slip is printed beside it. The same rows as JSON: /speed.json.

What Best Before Latest Sample · source
Routing decision — follow_route over the real production graph (357 edges)
decision in RAM
69 ns
2026-09-17
1.2–1.6 s as a live TypeDB query same as best 100,000 iterations
text/ram.md
A prerendered page — /speed, served from the edge
time to first byte, production
71 ms median
2026-09-25
— same as best n=7, sequential, unique nonce, Bangkok edge
text/speed.md § story_shape
The home page — one.ie/
time to first byte, production
78 ms median
2026-09-25
366 ms median (2026-08-20) · 832 ms while the worker ran in Virginia (2026-09-25) same as best n=7, all 200, Bangkok edge, worker at the local edge; /signin control 74 ms
text/speed-results.md § 12 B
A tenant page — one.ie/u/one
time to first byte, production
248 ms median
2026-09-25
2,246 ms (n=1, 2026-08-19) → 1,292 ms (2026-08-20) → 2,692 ms in Virginia (2026-09-25) same as best n=7, all 200; range 233–362 ms
text/speed-results.md § 12 C
The chat page on desktop — one.ie/chat
largest paint, Lighthouse, production
874 ms · Performance 99
2026-08-20 · directional
3,143 ms · 76 1,075 ms · 98
2026-09-25
3 samples, deploy advisory step; latest from a /speed run on a quiet box
text/speed-results.md § 12 E
The home page on desktop — one.ie/
largest paint, Lighthouse, production
649 ms · Performance 100
2026-09-25
3,035 ms · 67 (2026-08-19) → 933 ms · 99 (2026-09-24) same as best best of 3, /speed run on a quiet box (load 2.9 on 10 cores)
one.ie/web/src/data/speed-latest.json
The home page on a phone — the weakest surface
largest paint, Lighthouse, production
2,494 ms · Performance 94
2026-09-25
3,412 ms · 85 (2026-08-20) → 4,390 ms · 75 (2026-09-24) same as best best of 3, /speed run on a quiet box (load 2.9); the h1 now plain HTML, the island client:only
text/perf-baseline.prod.json
The (slug, ts) index on the messages read
database read, production
~16× faster, 51× fewer rows read
2026-08-20
— same as best identical query as control
text/speed-results.md § 1
The full web test suite (~1,135 files)
test gate, vitest Duration
87.3 s
2026-09-01
518 s same as best same tree, all green
CLAUDE.md § Tests
The ship gate — tests only what changed since the last green gate
test gate, vitest Duration
17.2 s
2026-09-23
161 s (full vitest gate on the same release) same as best 139 files, 7f3d258a5..c8c439bc6
CLAUDE.md § The dev → prod loop
A ship, operator time
commit to production
~61 s
2026-09-05
227 s same as best Lighthouse check detached from the ship
CLAUDE.md § The dev → prod loop

Directional: the source measured it on a busy machine and has not yet re-run it on a quiet one. The one journey behind these numbers, phase by phase: /speed-metrics.

The latest run

One run of /speed at 2026-09-28 05:06 UTC. It frees the box, warms production, then reads first byte on every route from the BKK edge. Lighthouse runs after that, in the background.

First byte · median of 7 · production

/signin 159 ms 7/7 ok · 133–196 ms
/ 159 ms 7/7 ok · 135–267 ms
/chat 152 ms 7/7 ok · 139–362 ms
/speed 142 ms 7/7 ok · 131–150 ms
/speed.json 140 ms 7/7 ok · 125–172 ms
/u/one 443 ms 7/7 ok · 332–1350 ms

Lighthouse · best of 3 · production

/ desktop perf 100 · LCP 397 ms · TBT 0 ms · CLS 0.001 · 528 KB
/chat desktop perf 80 · LCP 3622 ms · TBT 0 ms · CLS 0.003 · 870 KB
/ mobile perf 72 · LCP 1791 ms · TBT 1313 ms · CLS 0.007 · 529 KB

Run at 2026-09-28 05:10 UTC, on a quiet box (load 4.89 on 10 cores). regression beyond the noise band (advisory).

Box at the start: load 6.29 on 10 cores, 62% memory free, room for 1 test gate. The same file as JSON: /speed.json.

Cost is a clock — D1 rows per day

On 2026-09-25 production read 282M rows in a day on a plan that allowed 5M, and every tenant page went down. Nothing measured rows; this does. Read at 2026-09-25 08:21 UTC, paid plan (25B rows read/month, 50M written/month — billed past it). Red at 50.0% of the daily share, warn at 25.0%.

Rows read · 24h, all databases 6.0%
50,367,091 of 833,333,333 a day
Rows written · 24h, all databases 21.7%
360,923 of 1,666,667 a day
one-owners 50,329,753 read 357,891 written
claw 26,960 read 3,032 written
one 10,378 read 0 written

The five statements that read the most

43,062 rows/run × 415 SELECT COUNT(*) AS n FROM agent_events_warm WHERE slug = ? AND visitor_hash = ?
17,173 rows/run × 294 SELECT (SELECT region FROM agent_events_warm WHERE slug = ? AND visitor_hash = ? AND region != '' ORDER BY ts DESC LIMIT ?) AS region, MAX(t
24,919 rows/run × 194 SELECT thread_id, id, role, substr(content_json, 1, 8000) AS content_json, ts, total FROM ( SELECT thread_id, id, role, content_json, ts, RO
144,540 rows/run × 8 SELECT event, COUNT(*) AS n FROM agent_events_warm WHERE ts > ? GROUP BY event ORDER BY n DESC LIMIT ?
306 rows/run × 1396 SELECT t.id AS id, t.last_msg_at AS ts, t.agent_id AS agentId, (SELECT content_json FROM messages m WHERE m.thread_id = t.id ORDER BY m.ts D

Re-run: bash .claude/scripts/d1-budget.sh --write. The 24-hour window rolls, so a fix shows in full a day after it ships.

Speed

Speed is a measurement. Not a claim.

The page times itself while you read: page load, first token, latest audit — dated, reproducible, measured on the surface making the claim. The bars carry the proportions; ask the chat for the figures, dates attached.

Live — your browser measured this

This page loaded in—
First token of this chat—

Lighthouse measured

Against the competition, 2026-07-19 — fast network (rttMs=40, 10Mbps, 4× CPU)

Matches the config quoted in our own speed claims — so competitors aren't run under a harsher preset than we are.

Site Perf A11y Best Practices SEO TBT
one.ie/chat 94 90 96 100 0ms
platform.openai.com/playground 62 96 81 91 400ms
claude.ai (→ /login) 26 97 54 92 1,280ms
chatgpt.com 44 91 73 92 450ms

Run-to-run variance is ±5 points on this test rig; differences under 5 are noise, not signal.

Against the competition, 2026-07-19 — Slow 4G (Lighthouse's stock mobile preset)

The harsher, default test. Our Performance score drops under a throttled connection too — everyone's does — but the gap to competitors holds.

Site Perf JS + assets transferred
one.ie/chat 79 545 KB
chatgpt.com 93 364 KB
platform.openai.com/playground 37 969 KB
claude.ai 26 6,132 KB

How to re-run this yourself

Every Lighthouse number on this page comes from a CLI run against a live URL. The first-byte numbers are plain curl -w %{time_starttransfer} reads, run one at a time with a unique query string so no cache answers for the page.

# Fast-network config (matches the numbers above)
npx lighthouse https://one.ie/chat --preset=desktop --throttling.rttMs=40 --throttling.throughputKbps=10240 --output=json
# Stock mobile preset (Slow 4G, harsher)
npx lighthouse https://one.ie/chat --output=json

Raw reports: text/build/lighthouse/*.report.json. Full write-up: text/build/lighthouse/comparison.md.

What I'll be honest about

Three gaps in this proof, named upfront — a caveat you find yourself costs more trust than one we hand you.

  • ·ChatGPT now beats us on Slow 4G — 93 vs our 79, and a lighter payload (364 KB vs our 545 KB). Their page got dramatically lighter since our last check in May (it was 4.4 MB then). That's a real change on their end, not a mistake on ours, and we're naming it instead of quietly re-quoting the old comparison.
  • ·Our own scores softened too — Accessibility 95→90, Best Practices 100→96 since May. On the follow-up list, not swept under the rug.
  • ·claude.ai's score is for its logged-out /login redirect, not the authenticated chat app — an unauthenticated visitor never sees the heavier real interface, so the comparison likely undersells how much heavier Claude's actual app is.
  • ·asi1.ai's numbers in the panel above are estimated, not measured — hover the bar and it says so. We haven't run Lighthouse against it yet; treat that row as a placeholder until it is.
"The faster you go, the more it feels like a different product."
— Patrick Collison, Stripe