Content
One folder, any name
Nothing about the site lives outside it, so it travels.

Nineteen sections, fourteen themes
Zellij is a Next.js engine that reads a folder of YAML and Markdown and builds the whole site — marketing pages and documentation, one deployment.

Four files and a folder of prose. Everything else is the engine's problem.
site.yaml for identity, menu.yaml for the bar, pages.yaml for pages composed from named sections. Point a build at the folder and that is all it needs.

One file per band of content, reusable across pages.
Drop a _sidebar.yaml in any folder.
Every colour, radius, font and easing is a token. Switching theme restyles the site — try the picker in the bar above.

A build-time index and a ⌘K modal.
Upgrade by bumping a version.
Everything below is documented, typed, and validated at build time.
Content
One folder, any name
Nothing about the site lives outside it, so it travels.

Sections
Nineteen ways to say something
Heroes, carousels, timelines, galleries, pricing, proof.

Themes
Fourteen glazes
A token system deep enough that themes never touch a component.

Docs
Any folder can be a manual
A sidebar file turns a directory into a documentation tree.

Tooling
Validate before you build
zellij check reads the folder and reports everything wrong with it.


Fourteen themes, and not one component knows about any of them
Colour, type, geometry, shadow and motion are all tokens. Try the theme picker in the bar — this page restyles as you go.
No — it is a package your Next.js app imports. There is no scaffolding step and nothing is generated into your repo, so upgrading is a version bump rather than a merge.
No. A wrapper app is three files and under thirty lines, and none of it changes as your site grows. Everything after that is YAML and Markdown.
Markdown is Markdown. Point a guide folder at it, add a _sidebar.yaml, and it renders. The PayOS site in this repo was converted from MkDocs sources with a script that only translates admonition syntax.
Yes — registerSection takes a schema and a component. Built-ins use the same registry, so a custom section is not a second-class one.
The build fails, loudly, naming the file, the path inside it, and what was expected. A broken nav link or a missing section file is a build error, not something a visitor discovers.