content-block section is the primary rich-text component in OlonJS. It renders a section title followed by an ordered array of paragraphs, with an optional image displayed alongside the copy.
Use content-block for long-form prose sections: the About page story, a product explainer, an editorial note, or any section that requires more than one paragraph of connected copy. Because paragraphs are stored as a typed array — not a monolithic markdown blob — each one is individually editable in OlonJS Studio.
Data fields
string
An eyebrow label rendered above the section title — for example
"How it works". Optional.string
required
The section heading — for example
"One source of truth per relation".ParagraphSchema[]
required
An ordered array of paragraph objects. Each item in the array is rendered as a separate paragraph in the section body. The array must contain at least one item.Each paragraph object has the following fields:
string
required
A unique identifier for this paragraph — for example
"about-p1". Used as the React key. Choose a stable, human-readable slug; changing this ID after publication has no visible effect but may affect CMS history.string
required
The full text of the paragraph. Plain text only — no markdown or HTML. For emphasis or links within body copy, use the theme’s typography styles rather than inline markup.
ImageSelectionSchema
Settings fields
"none" | "sm" | "md" | "lg" | "xl"
Vertical padding applied above the section.
"none" | "sm" | "md" | "lg" | "xl"
Vertical padding applied below the section.
JSON example
The following example is taken fromabout.json:
Paragraph
id values should be stable across edits. OlonJS Studio uses them as keys for collaborative editing and revision history. If you reorder paragraphs, keep their IDs the same rather than re-numbering them.Used on pages
content-block is used on any page that requires multi-paragraph prose:
For single-sentence supporting copy inside a header band, use
page-hero instead. For a minimal conversion-focused block, use cta-banner..png?fit=max&auto=format&n=AyzhRn9-CO-nDNc4&q=85&s=63c78e2325701880237e6cbce1399c2a)
.png?fit=max&auto=format&n=AyzhRn9-CO-nDNc4&q=85&s=0db283df6e4d31745079d6d03fd029ed)