Skip to content

For developers

You can open all of it.

The rest of this site is written for the person who owns the business. This page is the technical detail: what is served, what is not, what you can edit by hand, and the constraints worth knowing before you commit a client to it.

No platform stylesheet

Every rule a page obeys is in the site CSS or the page CSS. Nothing is injected underneath.

Static output

Publishing writes HTML to object storage. The edge serves it; nothing renders per request.

No build step

What you write is what is served. No bundler, no npm, nothing between source and browser.

What you can edit by hand

Everything except the body of a page.

Page content is written through the AI — that is the product’s one real constraint, and it is stated plainly rather than buried. Everything around it is a normal editor with syntax highlighting.

Site

CSS and JavaScript

The site stylesheet and the site script, applied to every page. Your JavaScript runs unsandboxed on your own site, because it is your site. There is no minifier between what you write and what is served.

Site

The head, and JSON-LD

Write into <head> directly. Structured data is stored as bare JSON at both site and page level — we own the <script type="application/ld+json"> wrapper, which is what lets the content be validated on write and escaped on output.

Page

Per-page CSS, JS and head

Each page carries its own, appended after the site’s. Order on a served page is: generated meta, site head, page head, site JSON-LD, page JSON-LD, analytics last — so analytics can never displace a meta tag.

Page

Addresses and metadata

Slug, parent, title, meta title, meta description, excerpt, per-page robots directives, canonical behaviour and the 404 target are all ordinary fields, not AI-only.

The cascade

Four layers, in this order, and nothing else.

1

Custom properties

Your colours and fonts, emitted as --mb-<name> exactly as you typed it. No hidden second namespace — a colour called brand is var(--mb-brand).

2

Site CSS

Yours. Seeded with a small reset and two rules wiring the seeded font variables to body and headings. Delete any of it.

3

Block CSS

The CSS of any reusable block the page embeds, in embed order.

4

Page CSS

The page’s own, last, so a page can always override the site.

There is no fifth layer. This started life with a base stylesheet — a reset, a type scale, spacing tokens — and it was removed because it was invisible to the AI: “why is there no gap under my headings” had its answer in a file nothing could read, so the model would write a competing rule and lose on specificity. Five invisible rules cause the same problem as fifty.

Serving

What a request actually touches.

Cache hit

Edge → object storage

The overwhelming majority of requests. The finished HTML is read straight from storage by the edge proxy and returned compressed. No function is invoked and no database is read. Measured at ~180ms and zero renderer invocations.

Cache miss

One render, then cached

The page is assembled from the published snapshot — a single document holding the site’s settings and a flat page index — and written back to the cache. Roughly two seconds, once, for one visitor.

Invalidation

Derived, not declared

Publishing compares the new snapshot with the old. If anything site-wide changed, the whole host is purged; if not, only the pages whose content actually moved. It defaults to purging too much rather than too little, because stale HTML has nothing to alert on.

Images

Derivatives are generated on demand and cached. Markup is a <picture> with AVIF and WebP sources plus a WebP <img> fallback, both branches carrying a srcset. The candidate list is computed server-side and contains only widths at or below the file’s natural width — the resizer never enlarges, so an oversized candidate would make the browser pick the largest and receive the smallest.

Addresses

Pages nest to any depth and the nesting is the path — there is no stored URL to drift out of step with the tree. The homepage lends no segment, so its children sit one level up. Every address change (rename, reparent, delete-with-promotion, homepage handover) emits a 301, and those redirects ship in the same release as the change that caused them.

Worth knowing before you commit

The constraints, stated up front.

These are the things that would otherwise be discovered three weeks into a client project. None of them is a secret and all of them are deliberate.

AI writes page bodies

There is no code editor for the body of a page and no drag-and-drop builder. You direct it, review the draft and publish. Everything else — site CSS and JS, head, metadata, addresses — is hand-editable.

No build step

No npm, no bundler, no preprocessor, no framework. If your workflow starts with a package.json, this will feel wrong. If it ends with “and then it is just HTML and CSS”, it will feel right.

No forms yet

There is no form handling — no contact form, no submissions inbox. It is designed and not built. If your client needs a contact form next month, that is a real gap and you should plan around it.

One plan, one site

Credits, plans and balances are per site and cannot move between them. An agency running ten client sites is running ten balances. Whether that is a feature or a nuisance depends on how you bill.

Technical questions

What is actually served?

Static HTML. Publishing assembles each page once and writes it to object storage; an edge server hands that file to visitors, compressed, with no origin request. A cached page costs zero function invocations and measures around 180ms. A cache miss builds the page once — about two seconds — then everybody after that is back on the fast path.

What runs on the page?

Only what you or the AI put there. No framework, no runtime, no jQuery, no analytics unless you add it, no badge. If your page has no JavaScript, no JavaScript is served.

Is there a base stylesheet?

No. The cascade is: the site’s CSS custom properties, then the site stylesheet, then any reusable blocks, then the page’s own CSS. Nothing else. A new site is seeded with a small reset at the top of its own site stylesheet, which you are free to delete — and if you do, you get raw UA defaults.

Can I use a build step, npm, or a framework?

No. There is no bundler and no package installation — what you write is what is served. That is a genuine constraint and it is the reason there is nothing between your source and the browser. If you need a build pipeline, this is the wrong tool and it is better to know that now.

How does concurrent editing behave?

Every record has a mutable draft and an immutable published head. Writes are per-setting: two writers touching different settings both land, and a write that would clobber a setting changed since you read it is refused with a conflict rather than silently winning. The AI writes through the same path you do.

Is there an API?

Not a public one yet. The pricing catalogue is served unauthenticated at /api/pricing; everything else is behind session auth and is not documented as a contract. If you need programmatic access, say what for — it is the kind of thing that gets built when somebody has a real use for it.