Core concepts

A handful of nouns show up everywhere:

Project (tenant)

An isolated product you operate. Content, members, billing, AI providers and settings are all scoped to a project. Every API path is addressed by a project ref — a ULID.

Node

A piece of content. A node has a slug, title, status (draft / published / archived), a kind, an optional parent_id (for trees), meta (SEO), and an ordered list of blocks.

Block

A typed unit of content inside a node: { id, type, order, data }. Block types are a global registry validated on save — unknown types are rejected. Built-ins:

  • Structural: hero, rich_text, cta, columns, image, gallery, code, embed, divider.

  • Marketing: mkt_section, mkt_items, mkt_pricing, mkt_ui — for bespoke marketing pages driven from the CMS.

Kind

page — navigational, can have children (a tree). entry — a collection item (e.g. a blog post) listed via the entries API.

Locale

Svitrio supports 46 locales including RTL (ar, he, fa, ur). A project enables a subset; translations are per-locale overrides layered on the canonical node.

Member, role, ACL

Access is a membership on a project. A role bundles permissions; per-member ACLs refine them. Surfaces appear only when your role allows.