# ADR-0022: Editorial content is Markdown, not a page builder - **Status:** Accepted - **Date:** 2026-08-13 ## Context The store needs a journal and a handful of static pages — returns policy, shipping, about. That is a small requirement with a large gravitational pull: every CMS starts as "just some pages" and ends as a block tree, because the first time an editor wants two columns, someone adds a two-column block. Once that happens the storefront's design stops being code. Layout decisions move into the database, the React components become a rendering engine for whatever an editor assembled, and the careful type scale and spacing this project has spent seven milestones establishing become suggestions. That is the outcome this entire project exists to avoid — it is why it is not WooCommerce. ## Decision **One `ContentEntry` with a `type` of `PAGE` or `POST`,** rather than two tables. The shared surface — per-locale slug, title, body, SEO, publish state, soft delete — is nearly all of it. What differs is placement: a POST is listed in a feed newest-first and carries an excerpt and a cover; a PAGE is addressed directly and never listed. Same reasoning as ADR-0020. **The body is one Markdown column.** No blocks, no tree, no layout. An editor chooses _what it says_; the storefront decides _what it looks like_. **Markdown is rendered to React elements, never to an HTML string.** `react-markdown` parses to a component tree, so `dangerouslySetInnerHTML` appears nowhere in this path. A `