Foundations
Before the spaces, the accounts, the templates and the API, there is a small set of decisions that everything else rests on. This section is about those decisions — not how to use CTXR, but why it is built the way it is. If you only read one section, read this one. It is where CTXR earns its right to exist.
Most of what follows is a consequence of three ideas:
Data is the starting point. Content is stored as plain JSON nodes typed with Schema.org. The data model isn’t a side effect of the framework — it’s the thing the framework is built around. Everything downstream (rendering, querying, search, AI) is a reading of that data.
Schema gives grip. By speaking a shared, public vocabulary instead of a private one, content becomes meaningful outside its own application. Search engines and AI systems already understand it. We don’t translate our data for the outside world; we store it in the outside world’s language from the start.
Autonomy is the rule. A space is a self-contained tenant. The platform provides defaults; the space adapts them and then lives on its own. Spaces don’t reach into each other, and they don’t depend on the platform at runtime. This keeps the system simple to reason about and impossible to break across boundaries.
Three principles come back on almost every page, so we name them once here:
- The platform provides, the space extends. Sensible defaults out of the box; full freedom in the
build/folder. - Spaces don’t cross — spaces adopt snapshots. A space copies what it needs at adoption time and is autonomous afterwards.
- The actor doesn’t matter — the capability does. A person, a bot and an API token are treated identically; only their permissions differ.
In this section
- Why a graph, not a database — nodes, types, and references instead of tables and joins
- The compiled graph — resolving references at write time, so visitors never pay for it
- Cheap vs expensive: who pays — the editor carries the cost, the visitor reads the result
- File-based and dependency-free — the filesystem is the database, and that’s a feature
- The lifecycle: draft to live — two states, a handful of transitions, no workflow theatre
- AI-friendly by design — one shape of data, an open number of consumers