# Architect — F-026 CMS module ## Feature F-026 adds simple CMS pages with slug routing and draft/publish states. ## Design ### Module boundaries Create `project/src/modules/cms/` with domain/application/infrastructure/api/tests. CMS owns page content. Public storefront consumes published pages. ### Data model Add migration `020_cms.js`: - `cms_pages`: id, slug unique, title, body, status text default 'draft', created_at, updated_at. - CHECK `status IN ('draft','published')`. ### API - Admin `POST /cms/pages`, `PATCH /cms/pages/:id`, `POST /cms/pages/:id/publish`, `POST /cms/pages/:id/unpublish`. - Public `GET /cms/pages/:slug` returns 404 for draft, 200 for published. ## Acceptance trace - Published page returns 200 with body. - Draft page returns 404. - Duplicate slug returns 409.