11ai Blog CMS
Build the publications-and-posts system defined in references/implementation.md. For a 11ai-style rebuild, also use references/scaffold.md. Read the relevant reference before changing application code.
Workflow
- Inspect the target repository and preserve its routing, styling, and component conventions where compatible.
- Implement typed, validated, file-backed publications and nested posts. Do not add a database or hosted editor unless requested.
- When adding or migrating actual editorial content, use
$11ai-blog-content-format; when generating new requested content, use$11ai-blog-content-generationbefore writing content records. - Build one library surface that flattens posts across publications and switches
posts | publications. Derive the selected content type from acontentURL param; missing or invalid params default toposts, andcontent=postsis also valid. - If
$11ai-blog-authorsis also in scope, leave the library state open to a thirdauthorscontent type and pass author list items into the same browser. - Add a separate
list | cardslayout control. Initialize it tolistfor every content type. - Apply query, AND-tag filters, and relevance/newest/oldest sorting to the selected content type. Keep valid query/sort/view state when switching types; remove selected tags that do not exist in the new type.
- Build publication detail pages with nested post browsers and individual post reading pages.
- Render safe Markdown from the post's single
contentfield. Use$11ai-blog-markdown-componentswhen the renderer needs polished prose components, GFM, code fences, embeds, images, or TOC-aligned heading IDs. Derive adjacent posts by array position. - Generate metadata/static params, then verify typecheck, lint, build, keyboard behavior, mobile layout, Markdown rendering, and all content/layout combinations.
Non-negotiable behavior
- Default content type:
posts. - The library content selection must be refreshable/shareable through the URL. Use
content=posts,content=publications, and, when enabled,content=authors; nocontentparam still meansposts. - Default result layout:
list. - Keep the content-type control visually and semantically distinct from the layout control.
- When Authors are enabled, the content selector becomes
posts | publications | authors; Authors must be added through$11ai-blog-authors, not duplicated in the CMS contract. - Flatten posts with enough parent context to show and link their publication.
- Use the same filtered result set for list and card renderers.
- Use one semantic navigation target per result; avoid nested interactive elements.
- Keep all copy, domains, authors, and branding project-configured and white-label.
- Default every post to one optional
content?: stringfield. Use the legacy tiered content fields only when the user explicitly requests tiered access; in that variant, select authorized content on the server and never expose restricted tiers to clients.
Delivery
Report the content authoring structure, routes, default selections, switching behavior, validation/access rules, and verification performed.