From DigitalOcean to Cloudflare Pages: My Website Migration Story
It Started with WordPress
My personal website originally ran on a DigitalOcean VM, powered by WordPress.
Don’t get me wrong — WordPress is great. Rich ecosystem, endless plugins, one-third of the web runs on it. But for someone who just wants to write blog posts, it was serious overkill.
A personal blog that’s essentially static content required:
- A VM running 24/7 ($5-6/month minimum)
- A full PHP + MySQL stack
- Regular WordPress core and plugin updates (skip them and you’re a security risk)
- DIY SSL certificates, Nginx config, database backups…
The bigger problem? WordPress workflows and AI tools don’t mix well. I use Claude Code heavily for writing code and generating content, but WordPress’s “log into admin → visual editor → click publish” flow leaves AI completely out of the loop.
So I decided to migrate.
First Stop: GitHub Pages
As I mentioned in my previous post, I used Claude Code to build an Astro blog from scratch and deployed it on GitHub Pages.
This solved a lot of problems:
- Switched to Astro — a static site generator, Markdown-based, naturally AI-friendly
- Free hosting — GitHub Pages is free for public repos
- Version controlled — all content is Git-managed Markdown files that Claude Code can read and write directly
Everything looked perfect — until I started taking SEO seriously.
The Limits of GitHub Pages
GitHub Pages is fine for personal project showcases, but for a blog you want to grow seriously, there are some rough edges:
Your repo must be public. GitHub Pages is only free if your repository is public — meaning all your source code, draft posts, and config files are visible to everyone. For an open-source blog, that’s not a big deal. But if you have content you’d rather keep private (unpublished drafts, certain configs), it gets awkward. Want to use a private repo? You’ll need to upgrade to GitHub Pro — yet another expense.
Bandwidth limits. GitHub’s docs are clear: 100GB/month soft cap. They won’t kill your site immediately, but they might reach out and ask you to optimize. Fine for a new blog, but if a post goes viral, you’re going to be nervous.
Deployment flexibility. GitHub Pages is tied to GitHub Actions. It works, but the config isn’t the most intuitive. And running a full CI pipeline for a static site feels heavy.
DNS and CDN. GitHub Pages has limited CDN nodes, and custom domain HTTPS can be flaky.
None of these are dealbreakers, but when I realized there was a better option, the urge to move became irresistible.
The Optimal Solution: Cloudflare Pages
My domain was already on Cloudflare (as is the case for many of us), so when I discovered Cloudflare Pages, everything clicked.
Having your domain and hosting on the same platform — that’s the path of least resistance.
Why It’s the Best Option
Completely free with virtually no limits. Cloudflare Pages’ free plan for static sites is essentially unlimited — no bandwidth caps, no request limits. Compare that to DigitalOcean’s $5-6/month VM or GitHub Pages’ 100GB bandwidth limit, and Cloudflare’s generosity stands out.
Dead simple deployment. My entire deploy process is two commands:
npm run build
npx wrangler pages deploy dist/ --project-name=gaojiajun
Build locally, push with one command, live in seconds. No CI/CD pipeline to wait for, no server to maintain.
Global CDN. Cloudflare’s edge network spans 300+ cities worldwide. My blog loads fast no matter where you are. A single DigitalOcean VM in New York can’t do that.
Google Search Console setup is a breeze. This one catches people off guard — verifying site ownership in Google Search Console on a DigitalOcean VM means uploading verification files to your server or fiddling with DNS records. With domain and hosting both on Cloudflare, DNS verification is a few clicks. Plus, Cloudflare’s DNS resolution speed is industry-leading, which doesn’t hurt your SEO either.
Zero-config SSL. No more Let’s Encrypt, no more Certbot. Cloudflare handles HTTPS automatically, custom domains included.
Incredibly AI-Friendly
This might be the most important point for me.
My entire content workflow now looks like this:
- Write articles in Markdown (or have Claude Code write them)
- Claude Code translates them to English
npm run build+wrangler pages deploy— one-command deployment
From writing to publishing, everything happens in the terminal. Claude Code can directly manipulate files, run commands, and check build output. This workflow is simply impossible with WordPress.
After the Move
I now host multiple sites on Cloudflare Pages:
- gaojiajun.me — the blog you’re reading right now
- playdoz.com — another project of mine
- visafree144.com — a 144-hour visa-free travel info site
Three websites, total hosting cost: $0.
Think about it — I used to pay $5-6/month on DigitalOcean for just one WordPress blog. Now three sites are hosted for free, with better performance, more stability, and less maintenance.
Cost Comparison
| Solution | Monthly Cost | Bandwidth Limit | CDN | AI Friendliness |
|---|---|---|---|---|
| DigitalOcean + WordPress | $5-6 | Depends on plan | ❌ DIY | ⭐ |
| GitHub Pages | Free | 100GB/month | ⚠️ Limited | ⭐⭐⭐ |
| Cloudflare Pages | Free | Unlimited | ✅ 300+ global nodes | ⭐⭐⭐ |
Takeaway
If you’re like me — you just want a simple, fast, free personal blog and want to fully leverage AI tools — here’s my recommendation:
- Use Astro (or another static site generator) as your framework
- Host on Cloudflare Pages
- Keep your domain on Cloudflare too (one less thing to worry about)
- Let Claude Code handle all the technical work
Stop paying $5-6/month for a static blog. It’s 2026 — the free option is better than the paid one.
🚀 Don’t be afraid to migrate. Be afraid of paying for something that isn’t worth it.