This article is stored as blocks, not as pre-rendered HTML. It exists to prove the editor→site render path end-to-end.
Every paragraph, heading and list you see below was serialised on the build by the same React renderer the editor uses. Nothing here is hand-written HTML.
Rendered from a block union
The body is produced by renderToStaticMarkup over each block, so the markup and classes match the S5 story contract exactly.
The single render path is the whole point: one renderer, two surfaces.The build
What to look for
- Headings carry the bh2 / bh3 classes.
- Quotes render as the pquote structure.
- Lists render inside .nlist.
A split block
The split block floats a figure alongside its text — image right (.fr) or left (.fl), inside .p-wrap.
Its optional list reuses the shared List renderer, so the two can never drift.
- Figure floats via .fr / .fl.
- Text wraps around it.
A note block renders as .base-note — a bordered inline callout with a bold lead-in and a body paragraph.
- Undyed, graded on site.
- No bleach, no optical brightener.
Fibre kept in its natural colour, before any dye or optical brightener touches it.
Usually, yes. Grading fibre by animal and finishing by hand is slower work.
Corriedale and alpaca, undyed and graded on site.
Hand-wash cool, reshape, dry flat. Store folded, never hung.
Spun and knitted in a four-hand atelier in Chernihiv.
If this page builds and its body contains bh2, pquote, nlist, base-note, credits, figs, a shoppable .pov tag and a <video>, the blocks + media/product path works.
| Render | @posiv/block-ui |
| Path | renderToStaticMarkup |
| Schema | @posiv/blocks · PlinthBlock |