Antofica

Technology

Why I built my own CMS

I spent years working with large, expensive content management systems. In the end I wrote my own, for myself.

The plain editor: Markdown on the left, a live preview of the page on the right
plain's browser editor: you write on the left, the finished page appears on the right.

A CMS — a content management system — is the program you write a website's text in before pressing "Publish". WordPress is the one most people have heard of. For years I worked with bigger ones: Sitecore, Umbraco, Sitefinity. Serious systems, built for banks and corporations, for sites with thousands of pages and dozens of people writing into them.

They are powerful. They are also heavy. Each one comes with servers that have to be kept alive, a database that has to be backed up, licences that come due every year, and a major upgrade every few years after which something always breaks. I spent more time maintaining the tool than writing in it.

What I actually wanted

A personal blog needs none of that. It needs a place to write something and a button that makes it public.

Simpler tools already existed — Jekyll, VuePress — that take a handful of text files and turn them into a website. I looked at them hopefully. But there too I found frameworks stacked on frameworks, hundreds of libraries downloaded from somewhere, and projects that refuse to build a year after you last touched them.

I wanted something that fits in my head. Files I can read with my own eyes. Plain JavaScript, with nothing fashionable in it. Something that still starts up if I come back to it in ten years.

That's how plain came about

I didn't build it for anyone to sell. I built it for myself, because I couldn't find what I was looking for. Several of my sites now run on it, including the one you're reading.

For anyone who doesn't work with code, it looks like this: every article is an ordinary file in a folder. There's a browser editor too, for when I feel like writing from my phone. Publishing is one button, and the history keeps every version of every text — nothing is ever lost. There's nothing to update and nothing that can fall over at three in the morning.

The last piece: now I can simply ask

These past few days I added something I didn't expect to use as often as I do: a set of instructions for Claude, the assistant I work with straight from the terminal.

I tell it in ordinary words — "write an article about how I ended up building my own CMS" — and it knows where the file goes, what information it needs at the top, and how to check that the site really does build afterwards. It shows me what came out, I read it, I change it, and only then do I decide whether it goes out into the world. Publishing stayed with me: that was the one rule I didn't want to bend.

This article, to be honest, is how it started.

If you'd like a look

plain is free and open: the code is out in the open, anyone can use it or change it. If the idea sounds good to you, give it a star on GitHub — it earns me nothing, but it helps other people find it: github.com/plain-cms/plain.

I spent years building websites for other people. This is the first one I built so that I'd stop having work to do on it.

unelteplain