Static CMS for client sites
A static CMS for client sites, where every save is a commit
jtakeit is a git-based static CMS for client sites: the owner edits by tapping the text on the page, the words are JSON in your repository, every save is a commit, and the site stays static output.
$ git pull
$ git log --oneline -3 -- jtk/content/
b3dc408 save: client-site at rev 14
5e0a9c1 save: client-site at rev 13
a41f7d2 save: client-site at rev 12
$ git show --stat --format= HEAD
jtk/content/index.json | 2 +-01/ what it is
What is a static CMS?
A static CMS edits the content of a site that is built into plain HTML ahead of time, instead of being assembled from a database on every visit. Visitors load files; the CMS is how the words in those files change.
For a client site that is two jobs at once. The owner has to be able to change their own text without calling you, and the result has to stay the fast static site you built — no PHP, no database and no plugins on the site itself.
On jtakeit the site is a static project — Astro by default, or any other static generator — in a git repository you keep. The owner’s words are JSON documents in that repository, the owner edits them by tapping the text on the page, and every save is a commit.
02/ git or api
Git-based CMS or API-based headless CMS?
An API-based headless CMS keeps content in its own database and serves it over an API — a good fit when one content team publishes to a website, an app and more. A git-based CMS keeps content as files next to the code. A client site has one owner and one site, which is why jtakeit is git-based.
| API-based headless CMS | Most git-based CMSs | jtakeit | |
|---|---|---|---|
| Published content | In the CMS’s database, fetched over its API | Markdown or JSON files in the repository | JSON in the repository you keep |
| A save | A record update | A commit | A commit; drafts stay in the platform’s database |
| Where the editor works | A separate admin app | Usually a separate admin form | On the page itself, by tapping its text |
| What the editor can change | Whatever the content model allows | Whatever the CMS’s configuration exposes | Only the fields the catalogue declares; no add-page or add-block button |
| Forms, bookings, hosting | Outside the CMS, added separately | Outside the CMS, added separately | Run by the platform, with billing, backups and the domain |
| The site as it was in March | Depends on the CMS’s history | One command in git | One command in git |
03/ beyond editing
What a static site CMS needs for client sites
A CMS answers one question: how does the owner change the words? A client site asks three more — what happens when a visitor writes in, when they want to book, and when the client wants to leave.
Edits that can’t break the design
The owner fills only what the catalogue declares. Structure is a commit, made by you or your agent.
Enquiry forms
Forms are protected against spam, and enquiries arrive in Telegram, email or the admin inbox.
Paid bookings
The bookings module sends paid bookings straight to the business’s own Stripe.
Data they can take
Enquiries and bookings export as CSV and JSON. Export never needs a live subscription, and nothing is deleted when one lapses.
A preview before payment
The client signs off on the real site, on a preview, before they pay.
SEO that stays switched on
A build with noindex, a robots.txt that blocks crawlers, an empty sitemap or a canonical on another host is refused.
04/ written by your agent
A static site generator CMS your AI agent writes
Astro is the default scaffold and any static generator works; either way, every part of the CMS is a file in the same repository: the pages, the declaration of what the owner may edit, and the content documents. Your agent — Claude Code, for example, through jtakeit’s MCP server — writes all three, builds the site and hands you a preview.
- Declare. A field you declare is a field the owner can edit; everything else is design.
- Check. The catalogue check refuses a field that is declared but not rendered, or rendered but not declared.
- Review. You read the agent’s work as a diff, like any other code.
How editing is declared in the Astro CMS →
The flow with Claude Code, step by step →
{
"path": "/",
"seo": { "title": "…", "description": "…" },
"blocks": [
{ "type": "hero", "v": 1,
"title": "Fresh bread from six",
"lead": "Order by noon, collect tomorrow." },
{ "type": "questions", "v": 1,
"items": [ … ] }
]
}05/ choosing
Choosing the best git-based CMS for client sites
There are many good git-based CMSs, and the right one depends on who edits. If your editors write long articles and are happy in an admin form, or you want to host and run the CMS yourself, a general-purpose git-based CMS may serve you better.
jtakeit is narrower on purpose. It is for developers whose AI agent writes client sites, and whose clients should be able to change their own words — and nothing else — without a call to you. It also runs what a client site needs around the CMS: forms, bookings, billing, backups, hosting and the domain.
Moving a client off a database-driven site? Read about jtakeit as a WordPress alternative for developers. To see how the owner’s fields are declared in code, read the Astro CMS for client sites.
06/ questions
Static CMS questions
- What is a static CMS?
- A static CMS edits the content of a site that is built into plain HTML ahead of time, rather than assembled from a database on every visit. On jtakeit the content is JSON in the site’s git repository, the owner edits it on the page itself, and every save is a commit to that repository.
- Is jtakeit a git-based headless CMS?
- It is git-based, but it is built for one client site rather than for serving content to many channels. The content lives as JSON files next to the code, and the owner edits it on the page itself instead of in a separate admin.
- Which static site generator does it use?
- Astro by default: jtakeit’s scaffold sets up an Astro project with the catalogue check, forms and specimens built in, and builds it in under a minute. Any other static generator works the same way — Next.js as a static export, Nuxt, SvelteKit, Eleventy or Vite — laid out to the same contract, in about 90 seconds a build. Either way every page is prerendered to HTML at build — React, Vue or Svelte components included — and there are no plugins, no PHP and no database on the site.
- Can the client break the design?
- No. The owner can fill only the fields the catalogue declares, and there is no add-page or add-block button. Changing the structure is a commit, made by you or your AI agent.
- What happens to the content if the client leaves?
- The site is a git repository you keep, with the content in it. Handover is one link, and the client’s enquiries and bookings export as CSV and JSON. Export never needs a live subscription, and nothing is deleted when one lapses.
07/ try it free
Try it on a real client site
Sign up in the panel and build your first client site. Building and previewing cost nothing — you pay a wholesale price only when a site goes live.
Try for freeadmin.jtakeit.com
- Free until a site goes live
- Then a wholesale price per live site, from €5 a month
- The code stays in your git repository