In January 2026 we started moving our own agency site and 14 client sites off Vercel and onto Cloudflare Pages + Workers. Here's the honest breakdown — why we did it, what broke, what got better, and whether you should consider the same move.
Why we were on Vercel in the first place
Vercel was our default from 2021 onwards. The developer experience is genuinely great — git push and you're deployed, preview URLs on every PR, image optimisation baked in, analytics that just work. For Next.js projects, nothing came close.
We built dozens of client sites on it. It worked. Until it didn't.
What pushed us to move
Three things stacked up over 2025:
1. Cold starts on Sydney/Melbourne traffic
Vercel's serverless functions were consistently returning first-request latencies of 800–1400ms for Australian visitors. Warm requests were fast, but any traffic below a few thousand requests per day hit cold starts constantly. For a marketing site with irregular traffic, that's brutal.
2. The billing surprises
One client site had a slow month, then went viral for two days. Their Vercel bill jumped from USD $20 to USD $840. The pricing model — bandwidth-based on the Pro tier, then execution-based for functions — meant we couldn't predict costs reliably. Clients asking "what will my hosting cost this month?" got shrugs.
3. The lock-in was creeping
We were using next/image, Vercel Analytics, Vercel Blob storage, edge middleware — all lovely APIs, all Vercel-specific. Moving off would mean rewriting integrations. That's exactly the vendor lock-in we tell clients to avoid.
What we moved to: Cloudflare Pages + Workers
Cloudflare Pages hosts the static bits (HTML, CSS, JS, images). Cloudflare Workers runs the dynamic bits (API routes, form handlers, edge logic). Everything runs from Cloudflare's edge network — 350+ cities globally, including Sydney, Melbourne, Auckland, Brisbane.
What that means in practice
- First-byte time from Australia: 40–80ms (was 200–1400ms on Vercel)
- Cost: Free tier covers most client sites (100k requests/day free). Paid tier: USD $5/month + $0.30 per million requests
- Egress bandwidth: Free. Unlimited. This is the real win — we no longer worry about traffic spikes
- Storage (R2): USD $0.015/GB/month with zero egress fees. Vercel Blob was 6× more expensive at scale
What broke during migration
Not everything was smooth. Real issues we hit:
1. next/image optimisation
Vercel's image optimisation is genuinely the best in class. Cloudflare Images ($5/month for 100k images) is fine but requires reconfiguration and cache warming. For sites with heavy imagery, this took a week to tune.
2. Server actions and streaming
Next.js server actions run on Vercel's serverless. Cloudflare Workers doesn't support all of Next.js's edge features yet — specifically streaming responses and some middleware patterns. Two of our 14 sites required refactoring form submissions to use Workers directly.
3. Deployment tooling
Cloudflare's Wrangler CLI is fine but less polished than Vercel's. Preview environments work but need explicit config. Rollbacks are a manual multi-step process compared to Vercel's one-click.
What got better
- Consistent latency for Aussie/NZ visitors — no cold starts
- Predictable pricing — we can quote hosting for the year without a caveat
- Less lock-in — Workers are just JavaScript running on V8, portable enough to move again if needed
- Bundled everything — DNS, CDN, hosting, KV storage, R2 object storage, all one dashboard, one bill
What we'd tell you to do
Not every site should move. Consider Cloudflare Pages + Workers if:
- You're primarily serving traffic to Australia, NZ, or Asia-Pacific
- Cost predictability matters more to your client than bleeding-edge DX
- You're building relatively static sites (marketing sites, blogs, content) — not stateful multi-region apps
Stay on Vercel (or move to it) if:
- You're heavily invested in Next.js server actions, ISR, and edge middleware
- You need image optimisation at scale without additional configuration
- Your team is small and DX matters more than infrastructure cost
Cost comparison over 12 months
Real numbers from one of our mid-sized client sites (marketing site + booking flow, ~50k monthly visits):
- Vercel Pro: USD $240 base + USD $180 average function/bandwidth overage = USD $420/month
- Cloudflare Pages + Workers Paid: USD $5 base + USD $30 average overage = USD $35/month
That's a 12× reduction, on identical traffic, with better latency. For our own agency site, we went from USD $85/month to USD $0 — the free tier covers it.
Found this useful? Two new posts a month — back to all insights.
