Block reference
Blocks are typed units of content: { id, type, order, data }. The data shape is described by a JSON Schema and enforced on save by a server-side validate hook — an unknown type or an invalid payload is rejected, so a node can never reference something the renderer can’t handle. Below is every built-in block and its fields.
Structural & content
hero
A headline, subtitle and primary call to action.
title— string, required.subtitle— string.cta_text— string.cta_url— string.
rich_text
Long-form prose as a ProseMirror document.
doc— object, required. Must be a ProseMirror doc:doc.type == "doc"with acontentarray.
cta
A focused prompt with a button.
title— string, required.cta_text— string, required.cta_url— string, required.subtitle— string.
columns
A multi-column row of plain-text columns (at least two).
columns— array, required (≥2).columns[].body— string, required.
code
A syntax-highlighted snippet.
code— string, required.language— string.filename— string.
Media
image
src— string, required.alt— string.caption— string.
gallery
A grid of images (at least one).
images— array, required.images[].src— string, required.images[].alt,images[].caption— string.
embed
url— string, required.provider,title— string.
divider
style— enumsolid | dashed | dotted. No required fields.
Marketing
These drive bespoke marketing pages from the CMS. They deliberately avoid nested objects and arrays-of-strings so the admin’s generic schema-driven editor can render them — which is why mkt_pricing.features is a newline-delimited string, not an array. Each (except mkt_ui) requires a non-empty key the renderer places by.
mkt_section
key— string, required.eyebrow,title,body— string.
mkt_items
key— string, required.kind— string (layout hint).items[]— objects withlabel,title,body,meta(all strings).
mkt_pricing
key— string, required.note— string.tiers[]— objects:name,sub,price_m,price_a(prices are strings),per,access,cta,tag,features(one line per feature).
mkt_ui
Key/value chrome strings (nav, buttons, footer, modal…); the values are what get translated.
items[]— objects withkeyandvalue. No server-side validation.