# Benchmark pre-registration (written 2026-10-16, before any measurement run)

Hypothesis H1: "The site runs faster on Cloudflare than it did on Vercel."

Test objects (same source code):
- Cloudflare: https://kaikhalid.com (static export on Workers static assets, the live site)
- Vercel: a Vercel deployment of the same code (plain `next build`; hostname withheld)
Caveat fixed in advance: the Vercel copy is today's code on Vercel, not the pre-move code (which used /_next/image). Pre-move Vercel numbers exist from the 2026-10-15 baseline (3 runs per cell) and are reported only as a cross-check.

Vantage point: this Mac, Kenya. One network. Multi-region data comes only from the supplementary public probe, if it works.

Primary metrics
- P1: HTML time to first byte on a fresh connection, DNS excluded (time_starttransfer - time_namelookup), for / and /blog/start-the-answer-early. 100 interleaved pairs per page. Paired difference (Vercel - Cloudflare), bootstrap 95% CI of the median difference.
- P2: Lighthouse 13.5.0 largest contentful paint, default simulated throttling, / and the post, mobile and desktop. 10 runs per cell, hosts interleaved. Bootstrap 95% CI of the difference of medians.

Practical thresholds (below these a difference is "statistically real but imperceptible")
- P1: 20 ms. P2: 100 ms.

Decision rule
- ACCEPT H1 if: P1 CI excludes zero in Cloudflare's favour by more than 20 ms on both pages, AND P2 favours Cloudflare by more than 100 ms in at least 3 of 4 cells with no cell where Vercel is significantly faster, AND Cloudflare's p95 for P1 is not more than 50 ms worse than Vercel's.
- REJECT H1 if: Vercel is faster beyond threshold on P1 on either page, or on P2 in at least 2 of 4 cells, or the differences are all inside the thresholds.
- Anything else: PARTIALLY SUPPORTED, with the conditions named.

Secondary (reported, not decisive): connect and TLS time, warm-connection TTFB, static asset TTFB, p90/p99, Lighthouse score, TBT, CLS, cache status headers, a second timing round after the Lighthouse run to check stability.

Not tested: other regions or networks (except the supplementary probe), cold-edge behaviour after long idle, load, cache-purge behaviour, builds, cost.
