Skip to content

Why we’re building Nohead

Every content system we tried asked us to give something up: off-the-shelf CMSs, content in git, even building our own with an agent. So we’re building the one we kept wishing for.

The Nohead editor with this post open: its title, slug, summary and body, in the Blog posts collection

“The CMS landscape is pretty bleak.”

— A teammate, discussing what to power our next project

It wasn’t for lack of choice: there are more content management systems than ever. It was that each came with a catch, usually one of the same few.

Off the shelf

Some had an editor people dreaded writing in. Others were pleasant enough but only understood pages and posts, so anything else had to be dressed up as a page: a product catalog, a list of job openings, the settings behind an app. Images could be uploaded, but resizing and delivering them was somebody else’s problem.

The capable ones were heavy. Weeks to learn, a platform to run, and usually an opinion about the whole site: its themes, its routing, its page builder. Many of them were built for a single website. The moment an app, a script or an agent needed the same content, the API was an afterthought, or ours to build. Where there was AI at all, it was a chat box in the sidebar.

And then the price: seats, locales, environments and API calls, each metered on its own, until the system holding the content cost more than the product it served.

But git?

So we did what plenty of teams do. We kept the content in the repository as Markdown files, with an open-source editing interface on top.

It worked well enough to ship. Living with it was another matter. Every edit went through the same process as code: fixing a typo meant a pull request, a wait for CI, a review and then a build. Anyone with a post to publish needed write access to the codebase, and a paid seat with our host, since their commits triggered deploys.

The content itself fared no better. Editors still wrote raw Markdown and front matter, where one stray colon breaks a page. A post pointed at its author by filename and trusted that the file was there; nothing checked. Images sat next to the code at whatever size they came in, and every version of every image stayed in the repository’s history for good.

Git is excellent at what it was built for: code changes, made by developers. Content is changed by different people, at a different pace, for different reasons.

But vibe coding?

There’s a third option now: describe what you need to an agent and let it build you a content system. We build with agents every day, and an afternoon really does get you something that works.

Something that works is the easy part. A content system lives in its details: validation, permissions, history, uploads, two people editing the same record. Around it sits the infrastructure: hosting, a database, file storage, image processing, a CDN. Then come the ways the content gets out: an API for your site and apps, a search index, access for agents. All of it has to be kept running, patched and backed up, long after that afternoon.

What we’re building instead

Nohead is the content system we kept wishing for, and more: a data layer for your apps, agents and website, structured like a database and comfortable to write in like a CMS. You define your data as collections of typed fields, and everything around it comes in one place:

  • a web editor for the people who write, with roles instead of repository access

  • a REST API with a public OpenAPI contract, and SDKs for TypeScript, Python and Ruby

  • a CLI and an MCP server, so scripts and coding agents work with your data too

  • webhooks, so your site rebuilds or your app reacts when content changes

  • file storage behind a CDN, with images resized and converted by URL

  • search with typo tolerance and filters, through the API or straight from your site

  • version history for every record and every schema change, including which client made it

The rule that holds it together:

Everything the editor does with content and schema can also be done through the API, the CLI, the SDKs or MCP.

The editor is just another client, and so is an agent: it uses an API key with the scopes you give it, goes through the same validation as a person, and every change it makes is attributed to it in the history.

It’s also deliberately not your whole backend: no page builder, no end-user accounts or arbitrary SQL, and no built-in AI you didn’t ask for.

Off-the-shelf CMS

Git

Build your own

Nohead

Editing for non-developers

Varies

Repository access

Build it

Yes, with roles

Data beyond pages

Squeezed into pages

Files, by convention

Yes

Any collection

Relationships

Varies

Filenames, unchecked

Build it

Checked on save

Images and files

Often add-ons

In the repository

Build and host

Included

Search

Often basic

A separate service

Build and host

Included

History of every change

Varies

Commits

Build it

Content and schema

An API for apps and agents

Second to the editor

Build it

Build it

API, SDKs, CLI, MCP

Who keeps it running

Them, or you

You and your host

You

We do

From zero to an API

A backend for your data is a few commands away:

nohead login
nohead collections create posts
nohead fields add posts title --type text --required
nohead fields add posts body --type rich-text

And your site reads it like any other API:

import { Nohead } from "@nohead/sdk"

const nohead = new Nohead({ richText: "html" }) // reads NOHEAD_API_KEY

for await (const post of nohead.records.list("posts")) {
  console.log(post.data.title)
}

This blog runs on exactly that. Its posts live in a Nohead project, and the site reads them at build time with a published-only key, so a draft never reaches the page.

Your data stays yours

Everything you put in can come back out. nohead export writes plain files: your schema as YAML, one JSON Lines file per collection, and, if you ask, every original file and every record’s history. The SDKs and the CLI are MIT-licensed. The engines underneath are named rather than hidden: search runs on Meilisearch and images on imgproxy, so your site uses their own documented options, not a wrapper we made up.

Where to start

  • Quickstart: create a project, publish a record and fetch it from your code

  • The editor: what writing in Nohead looks like

  • Agents: coding agents and your own, working with your data

  • Docs: guides, the SDKs and the API reference

  • Pricing: the plans, including Free


Sign-up is open. If you’ve ever called the CMS landscape bleak yourself, we’d love to hear what you were looking for: write to hello@nohead.io.