Build & customize
This is the developer’s reading path. The earlier chapters explained why CTXR is shaped the way it is — a graph instead of a database, compiled at write time, serving one page to both visitors and editors. This chapter is about what you do with it.
What you build, and where
The platform ships a complete, working space: defaults for everything, a sensible theme, a full editor. You don’t start from an empty directory. You start from something that already runs, and you extend it.
Your entire workbench is one folder: build/. It holds the PHP templates that turn nodes into HTML, the CSS that styles the public site, and the JavaScript that runs in the browser. Everything else — the compiler, the API, the editor chrome, the storage layer — is platform machinery you call into but never edit.
build/ ← your work lives here
pages/ blocks/ menus/ forms/ templates/
assets/css/ assets/js/
(platform internals) ← you call these, never touch them
the compiler · the API · the editor · the registry
The boundary is the whole point. Code-pushes never touch live content; runtime edits never touch code. A lint-gate keeps that promise safe.
The chapters
| Page | What it covers |
|---|---|
| The build folder | Your folder structure, the push/pull workflow, and the lint-gate boundary |
| Template helpers | The helper API — the only bridge between a template and editability |
| Nodes & types | The Bare Four, Schema.org types, custom properties, the Thing fallback |
| Lists & relations | Curated, relational, and queried lists; derived values; projection |
| Theming & assets | Free site CSS, fixed editor chrome, importmaps, the module grammar |
| The editing experience | How your templates become editable — the three-layer contract |
| Automation & connectors | Operations, connectors, the wizard, webhooks |
| The API | One endpoint, two auth modes, JSON-LD output |
| Internationalisation | One language per node, and the four-rung translation ladder |
Read top to bottom for the full picture, or jump to the page that matches the problem in front of you.