← Back

Patch notes — editable homepage + status-page polish (2026-06-15, session 2)

Follow-on to the morning’s CMS Phase 1 (patch-notes-2026-06-15.md). This session made the homepage content editable from the admin, added the watermark “ghost” to the blog + status pages, and aligned the status page width. All on main.


1 — The homepage is editable from /admin/theme

The homepage’s content (the 7 suite components, the hero stats, the “Why Ethica” text and its four points) was hardcoded in the Hugo template. It’s now DB-backed and edited in the admin, shown via the same /api/sidebar hydration the hero text and products already use — so edits are instant (no rebuild) with no visual change.

  • New tables home_stats, home_components, home_points, plus settings for the “The suite” / “Why Ethica” headings and the Why-Ethica body — all seeded with the current homepage content, so the page is unchanged until you edit it.
  • /admin/theme gains editors (built from the existing generic list/settings fragments): Hero stats, Suite components (01–07: tag, name, description, repo URL, reorder/enable), the “Why Ethica” text, and its four points. Saves are admin-only; a new /admin/hometext endpoint stores the heading/body settings.
  • /api/sidebar returns a home block; sidebar-hydrate.js replaces the hero stat chips, the component grid, the suite + Why headings, the Why body, and the points from it. index.html gained the hook classes (js-hero-facts / js-components / js-why-* / js-why-points).
  • The “under construction” notice is the existing hero Note — edit it under Notes (no new editor needed).

2 — Watermark “ghost” on the blog + status pages ✅

  • The live blog index and posts now render the faint Σ-E backdrop (a reusable .cms-sigma), which the Hugo blog never had.
  • The /status page gets the same ghost backdrop.

3 — Status page width aligned to the standard page ✅

The status masthead was capped at 920px while every other page uses --layout-page-max (1140px), so it read narrower/misaligned. The header now uses the standard page width (matching all other pages); the status content stays a thinner readable column (920 → 820px).


Deployment status

All on main, deploying via the standard CI build → compose pull. The homepage change is content-identical out of the box (the DB is seeded with the current copy), so the merge carried no visible change until something is edited.

Verification

py_compile clean · Docker smoke 98 / 0 (incl. the /api/sidebar home payload, the homepage hydration hooks, the /admin/theme editors, the public status page + ghost, and the blog/post ghost).