Case study · June 2026
23 sites. One perf push. Under 500 ms desktop LCP p75.
A personal fleet on Cloudflare Workers and Pages had a split personality:
*.workers.dev URLs were fast; custom domains sat on a 400–1000 ms TTFB floor.
This is what actually moved the needle — measured with
psi-swarm, not a single Lighthouse run.
Baseline
- 23 shipped fleet sites, mix of Next-on-Workers and Astro-on-Pages
- Goal: desktop LCP p75 < 500 ms across the inventory
- Constraint: no Argo Smart Routing, no Vercel migration
What worked
- Astro static overlays for marketing
/routes — same app behind, fast HTML at the edge - Self-hosted fonts instead of render-blocking Google Fonts CSS
- Opacity-0 hero animations removed — they were 40–70% of LCP render delay
- CF Cache Rules +
caches.defaultfor semi-dynamic Worker homepages - Distributional audits — p75 across repeated runs, not one PSI score
Results
Five sites closed under 500 ms in the first push. Remaining gap is app-level TTFB on custom domains — a known Cloudflare Workers floor without paid routing.
Longer write-up
Narrative devlog with lessons and links: How I run 23 products on Cloudflare without Argo
Try it
psi-swarm runs locally, tracks history in SQLite, and now surfaces Ahrefs Domain Rating for custom domains in the projects dashboard.