Vercel vs Cloudflare Pages — My Real Migration Experience (Dynamic to Static Edge)

🚀 Why I Switched from Vercel to Cloudflare Pages##
I’ve been using Vercel for a long time to host my Next.js dynamic projects. It’s a powerful platform with excellent developer tools, easy integration, and fast deployment.
But here’s the catch — serverless costs can grow unexpectedly, and the free plan limits are tighter when your traffic scales.
Recently, I migrated my projects from Vercel to Cloudflare Pages, mainly for cost-effectiveness, performance, and simplicity. If you mostly serve static or semi-dynamic content, Cloudflare’s ecosystem just makes sense.
💡 The Core Reason: Serverless Without Credit Card Anxiety##
In the serverless world, you never know how your bill might grow — edge functions, bandwidth, cold starts… all add up.
But Cloudflare Pages changes that.
- ✅ Unlimited bandwidth
- ✅ Unlimited visits
- ✅ Built-in CDN edge caching (worldwide)
- ✅ Free D1 database (SQLite-based)
- ✅ Automatic SSL + Cache + Firewall
Basically, it gives you the global power of a CDN + serverless edge — with no surprise billing.
That’s what I needed — edge hosting without worrying about unexpected credit card charges.
🧠 My Tech Stack Comparison##
Feature
Vercel
Cloudflare Pages
**Framework Used**
Next.js
Hugo
**Database**
SQLite (Vercel + D1 test)
D1 (Cloudflare SQLite)
**Server Type**
Serverless Functions
Edge Functions
**Language/Runtime**
Node.js
Workers Runtime
**Deployment Tool**
Vercel CLI / Git
Wrangler CLI
**Cost**
Free tier limited, scales fast
Practically free for static + D1
**Performance**
Fast, but depends on function cold starts
Global CDN edge cache, super fast
**Build Speed**
Moderate (Next.js heavy builds)
Extremely fast (Hugo static builds)
**Bandwidth Limit**
Limited
Unlimited
🧩 My Workflow Migration##
When I decided to move from Vercel → Cloudflare Pages, here’s what I did technically:
- Extracted SQL DataFrom my D1 SQLite database on Cloudflare (previously Next.js API).
- Converted SQL → MarkdownUsing a custom Node.js script, I converted my data into
.mdfiles compatible with Hugo. - Rebuilt Site with HugoHugo is insanely fast — it builds static files in seconds. This means no runtime cost, no cold starts, no API load.
- Deployed with Wrangler CLI
wrangler pages deploy ./public— done. My Hugo-generated static site was live instantly on Cloudflare’s global edge network.
🌍 The Result##
olimiah.pages.dev → lightning fast, fully static, globally cached olimiah.vercel.app → still dynamic, but slower under load and limited in free usage
Performance-wise, Cloudflare Pages wins for my kind of projects.
And financially, it’s unbeatable — no hidden costs, no billing surprises, no bandwidth limits.
⚖️ Final Verdict##
If your site:
- doesn’t require heavy real-time dynamic content
- can be statically pre-rendered or cached at the edge
- and you want freedom from surprise bills
👉 Then Cloudflare Pages is the smarter choice in 2025.
But if you’re running complex React SSR apps or APIs that need dynamic rendering — Vercel still holds the edge (pun intended).
🔗 Useful Links##
🌐 My Sites:
- olimiah.pages.dev
- olimiah.vercel.app
🧰 Tools I Used:
- Cloudflare Wrangler CLI
- Hugo Static Site Generator
- Next.js
- Cloudflare D1
💬 My Takeaway##
Cloudflare Pages is not just a “free alternative” — it’s a powerful edge-first platform that makes static and hybrid sites incredibly efficient.
And for solo devs, students, or freelancers like me who care about speed, simplicity, and zero-cost scaling — it’s absolutely worth it.