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.