I used Notion for 5 years to write blog posts, WordPress for 3 years for client case studies, Ghost for 1 year for a newsletter. I regretted every one.
The “fast” of a CMS is sugar for the first project
A CMS looks fast: sign up, pick a template, drag blocks, live. But the costs that don’t show up in the first two months:
- Content locked in the platform’s database → export gets you Markdown / HTML, styles all gone
- Platform takes a cut / monthly fee → writing a 1000-word blog post, the platform skims 5%
- Styling changes require a paid plan → want dark mode? upgrade to Pro $20/mo
- SEO is gated by the platform → your title, meta, structure: you wrote it, the platform doesn’t always listen
- Platform policy changes → suddenly disallows a class of content, all your work is gone
Framer / Webflow solved the “writing” part, but didn’t solve the “I want to own my stuff” problem.
What I actually want
- Content is plain text + Markdown, tracked in git
- Domain is mine, content survives platform switches
- I write styles myself, can add anything in 5 minutes
- Performance and SEO I control directly
- Deploy 5 minutes, migrate 30 minutes
Sounds like a lot of engineering? Actually it’s a 1-week project, and then I don’t touch the base for 5 years.
What I use
- Astro 5 — static by default, SSR when needed. Files are routes, components are layouts.
- MDX — Markdown + components. I write content, occasionally import a small component for a chart / callout / embed.
- TypeScript — content schemas validated with Zod. Rename a field, the build fails. Good.
- Cloudflare Pages — static + Functions together, free tier covers most indie.
- Git — all content is in git. Rename a line, commit, can recover any deleted file.
Doesn’t it get tedious?
Writing a blog post, I need to:
- Open VS Code
- Edit
src/content/articles/en/<slug>.mdx git add && commit && push- Cloudflare auto-deploys in ~30 seconds
Compared to a CMS: one extra step (commit). But fewer headaches: export formats, custom CSS, platform popups, paywalled features.
When NOT to use this
- You don’t know git — the commit + push barrier is too high for non-developers
- 3+ collaborators — git merge conflicts get painful with simultaneous editing
- Frequent design changes — touching CSS for visual changes blocks designers
If only you write, git is a virtue (version-tracked history). If a team of multiple people writes, git is overhead — Notion / Sanity / headless CMS is the right call.
Closing
A CMS is a tool for people who don’t write code. I write code, and I don’t want to be locked in later when some platform changes its policy.
With MDX + git + Cloudflare, in 3 years this site still runs, content still exports, the platform swap doesn’t matter.
If you write code too, try Astro / Next.js + MDX + content collections. 15 minutes to a running site.
Update (2026-09-03)
Six weeks after launch, I haven’t touched the base architecture once. The site’s gained 11 web tool pages, 5 content collections (products / services / testimonials / articles / now), full auth, and dual-channel payments — all feature code, zero migration, zero refactor. Astro 5’s scoped CSS actually saved me this round — the tool pages inject theme CSS via document.head.appendChild, and without the scoping that one line would have flattened the whole site’s body width.
— Lao Wei