feat(web): add system announcement banner and maintenance mode

Add two operator-controlled, startup-time settings:

- SYSTEM_ANNOUNCEMENT: non-dismissable Markdown banner rendered above the
  network announcement on every page (navbar -> system -> network).
- SYSTEM_MAINTENANCE: when enabled, forces all feature flags off so the nav
  collapses to Home, hides the profile menu, and the SPA renders a maintenance
  page for every route. The maintenance page makes no API calls, so the API
  and database can be offline while the web component keeps running.

CLI exposes --system-announcement and tri-state --system-maintenance; the bool
falls back to pydantic settings to parse SYSTEM_MAINTENANCE reliably from env.
Adds i18n strings (en/nl), tests, and docs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Louis KingandClaude Opus 4.8 committed 2026-06-14 17:42:42 +01:00
1 parent 5d2f0b90d7
commit 17e6b65f8c
13 files changed
+561 -1

No files matched your search

+13
View File
@@ -496,6 +496,19 @@ NETWORK_WELCOME_TEXT=
# Example: **Maintenance** scheduled for Saturday — see [details](https://example.com)
NETWORK_ANNOUNCEMENT=
# System announcement banner (optional, Markdown supported)
# Non-dismissable banner shown above the network announcement on every page,
# for important system notices (downtime, maintenance windows, alerts).
# Stays visible until unset and the web service is restarted. Empty = no banner.
SYSTEM_ANNOUNCEMENT=
# Maintenance mode (default: false)
# When true, disables almost all site functionality: the nav shows only Home,
# the user/profile menu is hidden, and every page renders a "Site Under
# Maintenance" notice. No backend API calls are made, so the API/database can
# be offline while the web component keeps running. Requires a web restart.
SYSTEM_MAINTENANCE=false
# -------------------
# Feature Flags
# -------------------