Constitution
Problem, recipe model, principles, and platform stack.
A website builder with aligned incentives. The core product is free. Sites are portable data, not platform lock-in.
The problem
Most site builders optimize for retention, not ownership. Structure lives inside a proprietary editor. Export is an afterthought. Pricing drifts toward extraction once the product matures.
The result is slow publishing, bloated pages, and sites that do not survive a platform change.
The solution
Separate structure, appearance, and content. Store them as a single portable spec — a recipe. Any interface that can read and write that spec can build the site.
content( pattern + skin ) = recipe → site
| Layer | Role |
|---|---|
| Pattern | DOM structure — how sections are arranged. Fractal at section, page, and site level. |
| Skin | Tokenized design system — CSS variable overrides on a shared shadcn/ui base. Any pattern, any skin. |
| Content | Copy, links, media. Sources: builder UI, nertia.md (Google Drive), Google Sheet. |
| Recipe | Pattern + skin + content. The complete, portable site specification. |
| Section | One functional block — hero, pricing, contact, etc. |
The recipe JSON is the universal adapter. Input can vary. Output is always a recipe. The rendered site follows.
AI assists refinement. It does not define structure. Pattern, skin, and content carry the site.
Principles
- Portable data — the recipe is the site; export is first-class.
- Design-system-first — if a primitive is not in
/ds, it does not ship in the builder. - AI is frosting, not the cake — the recipe carries the site; AI carries only the polish.
Platform architecture
Three interfaces write to one engine. One persistence layer. One renderer.
Builder UI ──┐
ner CLI ├──► applyCommands() ──► Firebase ──► hosted site
MCP ──┘
No interface is privileged. A section added via CLI appears in the builder. A skin switched via MCP updates the hosted site.
Headless engine
The engine is a stateless TypeScript layer. It does not import React. It accepts a site document and a command batch; it returns an updated document.
CLI / MCP / API
│
▼
cliInterpreter → commandRouter → applyCommands()
│
▼
siteShapes (Zod) → Firebase RTDB → hosted render
Engine zone contract: core-engine on GitHub.
Pricing
| What | Price | |
|---|---|---|
| Build | Builder, {slug}.nertia.ai, community recipes | Free |
| Hosting | Custom domain, per site | $20/mo |
| AI enhanced | AI generations in the builder, per account | $20/mo |
One free AI credit. Thirty per month on subscription. No card required to start.
No ads. No data selling. No gating of core builder features.
How-to guides: Using nertia — getting started, export, custom domains, publish, billing.
Quick reference
Recipe: pattern + skin + content
Engine: src/lib/engine/applyCommands()
Schemas: src/lib/siteShapes.ts
CLI: src/bin/nertia.ts, src/bin/ner.ts
MCP: POST /api/mcp
Hosted: {slug}.nertia.ai via middleware