Public help site + seed the demo from the help docs

Public help site + seed the demo from the help docs

#41 in Riparion/riparion-cms — merged 2026-06-02

What & why

Turns the in-product help into a standalone, directly-linkable docs site, and makes a freshly seeded instance double as a guided product tour by deriving its content from those same help docs (so the demo both shows the capabilities and tours the product).

Public help

  • Moved the help module src/pages/admin/helpsrc/pages/reader/help; exposed it at public routes /help and /help/:slug (components Help / HelpDoc). Dropped the admin-gated /admin/help routes.
  • New HelpDocsLayout: distraction-free header (site branding + "← Back to site", no search box or sign-in menu), breadcrumb, centered reading column, shared footer.
  • Per-page OG/<head> tags (title + og:url) so article URLs are shareable.
  • Repointed the admin ? button and sidebar Help entry to the public routes; moved the help breadcrumb arms to the public section.
  • Fixed a latent keyed/non-keyed sibling panic in the index when a search hides a whole section.

Branding

  • Wove "Riparion CMS" into each doc's intro; help root titled "Riparion CMS Help".

Seeding (src/seed.rs)

  • Replaced the hardcoded 4 categories / 10 tags / 20 generic posts with content derived from the help-doc registry: one published post per doc (authored by linus, front matter → category/tags, body with front matter + leading H1 stripped), plus categories/tags from the front matter. Adding a help doc is picked up on the next fresh seed.
  • Kept the 5 MDX demo posts (now filed under the embeds doc's category), 30 comments, 5 subscribers.
  • Every seeded post gets a "See also: Riparion CMS Help" footer.

Verification

  • cargo fmt --check; CI clippy gates pass: server,sqlite --all-targets and web --target wasm32-unknown-unknown, both -D warnings.
  • Fresh sqlite seed (DX_SEED=1): 3 categories (Getting started / Content / Library), 22 tags, 6 help-doc posts + 5 MDX demos, correct post_tags/categories/authors, bodies cleanly stripped, footer present in all 11 posts (body_md + rendered body_html).
  • Manual browser steps (public /help no-auth, OG tags, the ? deep-link) are in the local TODO_VERIFICATION.md (gitignored).

🤖 Generated with Claude Code

Last updated 2026-06-03