Victor A

4 min read

The boring little CMS I always wanted

plain-cmsaijekyllopen-source

For most of my career I've built on big content management systems. DotNetNuke, Umbraco, Sitecore — serious, capable platforms. And every one of them came with the same tax: a database to keep alive, a server to patch, a licence or a hosting bill, and a stack of concepts I had to hold in my head just to publish a paragraph.

For my own little corner of the web, I never wanted any of that. I wanted the thing I'd have built in 2005 if I'd known better — a folder of files, some HTML, and a way to put it online. That's more or less why I'd lived on Jekyll for years.

Then this past weekend, something slightly unbelievable happened. I asked Fable 5 to build me a CMS — the boring, simple one I'd always pictured — and it did. In a weekend. And I actually moved this blog onto it.

It's called Plain, and the name is the whole philosophy.

What it is

Plain is a CMS with almost nothing in it:

  • Your content is Markdown files in a Git repository. That's the database — there isn't another one.
  • Your settings are one JSON file you can read in a minute.
  • A build turns it all into a static website — plain HTML and CSS that work even with JavaScript switched off.
  • It hosts on GitHub Pages, for free. No server, no monthly bill, nothing that can quietly fall over at 2am.
  • There's a browser admin for when I don't feel like touching Git — but every "Save" is just a commit underneath, with full history and one-click restore.

And the part I still can't quite believe: it's written in vanilla JavaScript, HTML and CSS. No React, no framework, no build pipeline, no npm install that drags down four hundred packages. One small dependency — a Markdown parser — and that's it. The whole core is small enough to read in an afternoon.

It's boring on purpose. Boring is what still works in ten years.

Migrating was the easy part

I'd braced for the move off Jekyll to be the painful bit. It wasn't. Plain shipped with an importer that turned my old posts into Markdown, kept my URLs, and generated redirects so nothing broke. A few minutes later my blog was running on a CMS I owned completely and could read every line of.

Right now I have two live sites on Plain: this one, victorantos.com, and plain-cms.com — the project's own site, which is (naturally) itself a Plain site. The homepage is the proof.

The part I keep thinking about: what AI does to the CMS marketplace

Here's the thought I can't shake. There's an enormous economy built around CMSs — themes, plugins, extensions, whole marketplaces. Entire businesses exist to sell you a $79 theme or a $199/year plugin, because building those things yourself used to be expensive.

It isn't anymore. If an AI can build a whole CMS for me in a weekend, it can certainly build a plugin, a theme, or a one-off feature in minutes — shaped to exactly what I need, not the average of what a thousand other buyers needed.

Plain leans into this on purpose. A plugin is just a folder you drop in. A theme is a folder of templates and one CSS file. Because the content is plain files, an AI agent can work with the whole thing with zero integration. "Write me a plugin that does X" stops being a shopping trip and becomes a one-line prompt.

I think the marketplace of pre-built, one-size-fits-most products slowly gives way to something stranger and better: software generated on demand, per person, and thrown away when you're done with it. The catalogue becomes a prompt. It's a little wild to sit inside that shift and watch it happen to my own tiny website.

Try it — and maybe star it

Plain is open source. If any of this sounds like the website you've quietly wanted — one you fully own, that costs nothing to run, and will still open in ten years — take it for a spin:

github.com/plain-cms/plain

Hit Use this template and you've got your own site. And if you like it, a ⭐ on GitHub genuinely makes my day — and helps the next person find their own boring little CMS.