Skip to content

Content Model

A content type (for example blog-post, addressed by its slug) defines fields. An entry is one record of that type, addressed by its own slug. Entries are draft or published.

Field types: text, textarea, rich_text, number, boolean, date, datetime, slug, email, url, select, multi_select, media and reference. A media field stores a media item’s id; a reference field points at another entry. A url field stores a plain link. It can also let editors pick a Media Library file instead: tick Allow choosing a file from the Media Library on the field (config: { "allowMedia": true }). It is off by default, so a link field for a store listing or a repository doesn’t invite picking a file by mistake. A plain url field that holds a Media file link shows a warning in the entry editor.

rich_text values are stored as HTML and sanitized on every write and every read. The editor’s own markup, checklists included, is kept: see Rich text. Entries can be exported to and imported from JSON per content type, matched by slug.

A content type can carry an optional routePattern (/blog/{slug}) so a frontend can resolve a URL to an entry. A field can carry optional presentation metadata (renderer, format, label, display mode, variant, alignment). It affects display only, never validation or storage.

The public API deliberately has no endpoint that returns a content type’s field definitions. A frontend must know the field names it reads.

There are three homes. Choose by shape:

Home Use for Public
Content types and entries Repeatable content: posts, services, team members Published entries only
Structured settings (Settings → General, Contact, Social, Navigation, Footer, SEO) A stable, typed site-wide shape a frontend renders: site name, contact details, menus Yes, per module
Global variables Arbitrary key/value strings with no fixed schema: a banner text, a one-off value Yes, one map

The deployment’s own settings (name, CORS origins, feature flags, preview URLs) are never public and are not site content.

Pages compose blocks into a route-addressed document instead of a fixed schema. See Pages and Blocks.