The "CMS fatigue" every developer knows
Say you're a web developer and tomorrow's brief is a website or blog: content that changes often, pages that load fast, and an admin where you or your team can manage the site and write in peace. The first question is always the same: which CMS?
Look at what's out there and you hit the same awkward fork every time.
WordPress can do almost anything; it's the jack of all trades. But you take on a huge legacy codebase, security issues you have to keep watching, and a stack that feels too heavy for modern web work.
Heavyweight headless CMSs like Strapi or Payload are flexible and modern. But for a small or medium project you end up running a big Docker container, tying it to a complex database and burning memory, all to manage a few dozen posts and pages. It feels like using a sledgehammer to crack a nut.
SaaS headless CMSs like Sanity or Contentful are easy to use, but you're locked in to the vendor. As the project or the traffic grows, so does the monthly bill, and it can give your wallet a real fright.
Then there's the biggest problem for me: bilingual sites, in Thai and English.
Anyone who's built websites in Thailand knows that on most headless CMSs, a second language is an add-on bolted on later. You end up with schemas nested inside schemas, Thai routing and slugs that fight you, or a plugin that adds load you didn't need.
So I started asking myself: could there be a CMS that's easy to install, light and fast, with a clean API, that actually understands Thai-English websites?
That's where TomeCMS began.
Where the name comes from
You might be wondering: why Tome?
A tome is a large, heavy book: an old text, or a carefully compiled record of knowledge. It's the classic picture of how people have kept what they know. (It's also a deliberate nod to my nickname, Tom.)
The irony is that a thick tome is heavy, bulky and hard to open, and plenty of software is the same.
So I gave the word a new meaning for software:
TomeCMS is a place to keep stories worth keeping, like a tome, but light, clean and easy to open, for the people who write and the people who read.
It leaves the bulk of older systems behind, but the data underneath is still built with care.
TomeCMS, built on Astro
TomeCMS is an open-source CMS I built around three words: bespoke, clean and content-first. It sits in the gap between traditional CMSs that are too heavy and static site generators that have no admin at all.
It rests on three things:
Built with Astro
Astro doesn't push JavaScript into every corner of the page, and it renders fast. So both the public site and the admin stay lean, without carrying runtime they don't need.Thai and English from the start
Thai isn't treated as a translation problem. Bilingual content is part of the core: the admin works in either language, and the data structure and URLs are designed to be SEO-friendly in Thai as well as in English.
A headless API, ready to use
TomeCMS has its own admin and themes, but it's also a full headless CMS with a REST API. You can use your content from any front end you like, whether that's Next.js, TanStack Start, SvelteKit or a mobile app.
Let AI help you write, while you keep the publish button (MCP)
I use Claude and ChatGPT for writing almost every day. The annoying part was copying text back and forth between the chat and the admin, so TomeCMS ships with an MCP plugin.
MCP (Model Context Protocol) is the standard AI apps use to talk to other programs. Turn the plugin on and Claude, ChatGPT or Codex can read the posts on your site and write drafts for you directly. Gemini works through the Antigravity CLI for now, because the Gemini web app only lets US accounts add custom apps.
You ask it for the same admin chores you already do, for example:
"What have I written on my blog about passkeys? List the posts with their dates."
"Make an English draft of this post. Keep the headings and pictures where they are."
"Write a search description for this draft, under 160 characters."
A translation the AI creates is linked to the original post automatically, the same as adding the other language yourself in the admin.
The English version you're reading was made this way. Claude translated the Thai post over MCP into a draft, and then I read it through myself.
What I spent longest on was how much the AI should be allowed to do. This is where I landed:
The AI can only write drafts. It can't publish, schedule or delete anything, and it can't upload pictures; it can only use pictures already in the File Manager.
An app can connect only after the site owner allows it with a passkey, and you choose whether it may only read or may also write drafts.
If you don't like what the AI changed, press Undo the AI's changes in the editor and confirm, and the draft goes back to how it was.
While you have a draft open, the AI can't change it, so it never writes over what you're typing.
One more thing: whatever the AI reads, including unpublished drafts, goes to the company behind that AI app. Only connect apps you trust, and Revoke the ones you've stopped using from the MCP card on the Plugins page.
Who TomeCMS is for (and who it isn't for)
TomeCMS suits developers and freelancers who build business sites, portfolios, blogs or landing pages that clients update themselves, and who don't want a messy back-end setup. It fits even better if the site needs Thai and English from day one, and if you want to keep all of your data on your own server (self-hosted) instead of paying a SaaS every month.
It isn't for large enterprises that need multi-step editorial workflows or fine-grained permission roles.
Coming up next
In EP 2 I'll go through the architecture behind TomeCMS in detail.
If you don't want to wait, the code and the full documentation are here:
GitHub Repository: github.com/Dhanabhon/tome-cms
Documentation: dhanabhon.github.io/tome-cms
If you like the idea, a Star ⭐️ on GitHub would mean a lot.