Most blog articles use three features: headings, paragraphs, and a CTA at the bottom. What you're about to read is the other end of the spectrum — the obscure Storyblok capabilities that most content teams never touch. Things like code_block nodes, H4 subheadings, inline hyperlinks in running text, and block components so rarely used they don't even have analytics data yet.
This article exists for one reason: to show you everything. The full surface area. The features you didn't know you had.
Level 1: The Typography Stack
H3: Sub-Section Header
This is a standard H3 sub-section — used for named frameworks, common mistakes, and quick wins within an H2 section. The design system renders H3 at 24px with a tight leading.
H4: The Deepest Heading Level
H4 headings are 20px, bold, and meant for granular breakdowns inside an H3. You'd use this for step-level detail within a multi-step framework — not for major structural breaks. If you find yourself using H4 frequently, you likely need to restructure into a separate H2 section.
When to Use H4 vs H3
H3: Named sub-frameworks, standalone concepts, 'Common Mistake' and 'Quick Win' sections
H4: Parameter breakdowns, individual tool configurations, granular code explanations
Never: Two consecutive H4s without body text between them — always add at least one paragraph
Level 2: Inline Rich Text Marks
Most authors use bold. Some use italic. Almost nobody uses the full inline mark suite. Here's what the complete set looks like in running text:
Bold for critical terms and action phrases. Italic for emphasis, voice, and quote attribution. Inline code for technical terms, field names, and API references. And hyperlinks in running text for citations, tools, and external resources — always opening in a new tab.
The renderRichText() function in @storyblok/astro handles all four mark types natively. The styling is applied by the prose prose-invert Tailwind Typography classes in BlogPost.astro.
Level 3: Code Blocks
Code blocks are rarely used in STR content — but they're essential for technical articles, automation guides, and any article showing readers how to configure a tool. Here's what a code block looks like with syntax highlighting:
# Storyblok story creation via Python
import requests
SB_TOKEN = "your-management-token"
SB_SPACE = "your-space-id"
payload = {
"story": {
"name": "My Article Title",
"slug": "my-article-slug",
"content": {
"component": "blog_post",
"title": "My Article Title",
"body": rich_text_json
}
},
"publish": 1
}
r = requests.post(
f"https://mapi.storyblok.com/v1/spaces/{SB_SPACE}/stories",
json=payload,
headers={"Authorization": SB_TOKEN}
)
print(r.status_code, r.json()["story"]["full_slug"])The code block above demonstrates the exact API call pattern used to create every article in this demo series. Real code. Real credentials (redacted). Real result.
Level 4: The Blockquote
Blockquotes get an orange left border treatment in the CFD design system. They're used for three things: direct quotes, pull quotes that highlight a key insight, and testimonial fragments within a text section. This is different from the testimonial_block component, which is a full-featured block with avatar and attribution.
On the difference between blockquote and testimonial_block:
Use
blockquoterich text syntax for inline emphasis within flowing text — when you want to visually break up a long section with a highlighted insight.Use
testimonial_blockinbody_blockswhen you want a full standalone social proof card with avatar, name, role, and full attribution. Different tools for different contexts.
Level 5: Ordered vs Unordered Lists
The design system renders both with orange markers — bullets for unordered, numbers for ordered. Use ordered lists when sequence matters. Use bullet lists when membership in a category is what matters.
Unordered: Criteria and Characteristics
Items where the order doesn't matter and could be rearranged without loss of meaning
Feature lists, tool requirements, checklist items
Properties of a concept — e.g., 'what makes a good STR market'
Items where each entry has roughly equal weight
Ordered: Sequential Steps
Steps where step 2 depends on step 1 — process flows, installation sequences
Rankings where position is meaningful — 'top 5 tools' in order of value
Instructions where the reader needs to track their position
Decision trees where order determines the path
What's Only Available in Body Blocks (Not Rich Text)
These are the Storyblok features that can't be achieved with rich text alone — they require the body_blocks bloks field and corresponding Astro components. See them demonstrated below.