feat(theme): ship exactly 2 themes (SRC default + VNClagoon); rebrand user-facing VNCmail+

Product decision 2026-08-05: exactly SRC (default) and VNClagoon ship as
selectable themes. Everything else (Qui, Nord, Catppuccin, Solarized,
Roundcube Elastic, Aurora Glass) is hidden via ThemePolicy.disabledBuiltinThemes
rather than deleted - cheap to re-enable later, zero code lost. Also removed
the hardcoded "Default/Bulwark" theme card from the Settings > Themes grid
(product wants exactly 2 theme choices, not 3).

Separately, found and fixed real "still says Bulwark" branding gaps:
- All 24 locale files: "Bulwark"/"Bulwark Mail"/"Bulwark Webmail" ->
  "VNCmail+" in every user-facing string (verified via the translations
  test, which only checks structural key parity across locales, not
  content - a straight string swap is safe against it. 48/48 still pass).
- PWA manifest fallback app name, package.json description/author.
- Demo mode fixtures: the "Welcome to Bulwark Mail!" email and identity
  signature a first-time demo user actually sees.
- The demo empty-state's logo was hardcoded to a literal Bulwark SVG file
  regardless of active theme - a real bug, not just stale text, since
  lib/theme-logo.ts's resolveThemeLogo() already exists and is already used
  correctly by the login page and nav rail for exactly this (theme-aware
  SRC mark / VNClagoon wordmark). Wired the same helper in here instead of
  a hardcoded path.

NOT touched: internal code comments referencing "Bulwark" as historical/
attribution context (e.g. design-rationale comments explaining why a value
differs from Bulwark's original) - those are harmless and a full-repo sweep
of every comment wasn't the ask.

Verified: typecheck clean, lint clean, translations test 48/48 passing.
This commit is contained in:
Bernd Rodler
2026-08-05 23:43:19 +02:00
parent 3f99a2fc9e
commit bde9f14832
31 changed files with 416 additions and 404 deletions
+14 -14
View File
@@ -146,18 +146,18 @@
},
"protocol_handlers": {
"title": "Predvolené aplikácie",
"description": "Vyberte, či sa e-mailové a kalendárové odkazy otvárajú v Bulwarku. Bulwark sa registruje ako obslužná aplikácia protokolu pre odkazy mailto: a webcal:.",
"description": "Vyberte, či sa e-mailové a kalendárové odkazy otvárajú v VNCmail+u. VNCmail+ sa registruje ako obslužná aplikácia protokolu pre odkazy mailto: a webcal:.",
"unsupported": "Tento prehľadávač alebo pripojenie nepodporuje manuálnu registráciu obslužnej aplikácie protokolu.",
"mailto_label": "E-mailové odkazy",
"mailto_description": "Otvoriť odkazy mailto: v Bulwarku s predvyplneným editorom správy.",
"mailto_description": "Otvoriť odkazy mailto: v VNCmail+u s predvyplneným editorom správy.",
"protocol_open_mode_label": "Pri otváraní odkazov protokolov",
"protocol_open_mode_description": "Vyberte, či má Bulwark otvárať odkazy mailto: a webcal: v novej karte alebo znovu použiť otvorenú reláciu.",
"protocol_open_mode_description": "Vyberte, či má VNCmail+ otvárať odkazy mailto: a webcal: v novej karte alebo znovu použiť otvorenú reláciu.",
"protocol_open_mode_active_session": "Otvoriť v aktívnej relácii, ak je to možné",
"protocol_open_mode_new_tab": "Vždy otvoriť novú kartu",
"focus_notification_title": "Otvoriť Bulwark",
"focus_notification_body": "Odkaz bol otvorený v Bulwarku. Kliknutím prenesú okno do popredia.",
"focus_notification_title": "Otvoriť VNCmail+",
"focus_notification_body": "Odkaz bol otvorený v VNCmail+u. Kliknutím prenesú okno do popredia.",
"webcal_label": "Kalendárové odkazy",
"webcal_description": "Otvoriť odkazy webcal: v Bulwarku s predvyplneným dialógom pre odber kalendára.",
"webcal_description": "Otvoriť odkazy webcal: v VNCmail+u s predvyplneným dialógom pre odber kalendára.",
"register_mailto": "Zaregistrovať e-mailovú aplikáciu",
"register_webcal": "Zaregistrovať kalendárovú aplikáciu",
"mailto_registered": "Registrácia obsluhy e-mailových odkazov bola požiadaná",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Spojenie prerušené. Pokus o opätovné pripojenie…",
"rate_limited_title": "Overenie servera je dočasne obmedzené.",
"rate_limited_detail": "Bulwark pozastavil požiadavky na pozadí, aby zabránil zablokovaniu. Opätovný pokus za {seconds} s.",
"rate_limited_detail": "VNCmail+ pozastavil požiadavky na pozadí, aby zabránil zablokovaniu. Opätovný pokus za {seconds} s.",
"rate_limited_action_title": "Požiadavka pozastavená, aby sa zabránilo zablokovaniu.",
"rate_limited_action_detail": "Bulwark čaká na ukončenie doby blokovania servera. Skúste to znova za {seconds} s."
"rate_limited_action_detail": "VNCmail+ čaká na ukončenie doby blokovania servera. Skúste to znova za {seconds} s."
},
"notifications": {
"email_sent": "E-mail bol úspešne odoslaný",
@@ -1076,9 +1076,9 @@
},
"push": {
"title": "Oznámenia na pozadí",
"description": "Prijímať systémové oznámenia o novej pošte, keď je táto stránka zatvorená. Doručované cez push relay Bulwark.",
"description": "Prijímať systémové oznámenia o novej pošte, keď je táto stránka zatvorená. Doručované cez push relay VNCmail+.",
"relay_label": "Push relay",
"relay_desc": "Predvolený je hostovaný relay Bulwark. Zmeňte iba ak používate vlastný hosting.",
"relay_desc": "Predvolený je hostovaný relay VNCmail+. Zmeňte iba ak používate vlastný hosting.",
"relay_locked": "Nastavené administrátorom",
"relay_locked_desc": "URL push relay bola nastavená administrátorom a nedá sa zmeniť.",
"relay_placeholder": "https://notifications.relay.example.com",
@@ -1535,10 +1535,10 @@
},
"link_device": {
"title": "Prepojiť mobilnú aplikáciu",
"description": "Prihláste sa do mobilnej aplikácie Bulwark Mail bez písania. Vygenerujte tu QR kód a naskenujte ho z prihlasovacej obrazovky aplikácie.",
"description": "Prihláste sa do mobilnej aplikácie VNCmail+ bez písania. Vygenerujte tu QR kód a naskenujte ho z prihlasovacej obrazovky aplikácie.",
"generate": "Zobraziť QR kód",
"regenerate": "Zobraziť nový kód",
"instructions": "Otvorte aplikáciu Bulwark Mail, klepnite na \"Skenovať QR kód\" na prihlasovacej obrazovke a namieste fotoaparát sem.",
"instructions": "Otvorte aplikáciu VNCmail+, klepnite na \"Skenovať QR kód\" na prihlasovacej obrazovke a namieste fotoaparát sem.",
"expires_in": "Tento kód vyprší za {seconds} sekúnd. Dá sa použiť iba raz.",
"expired": "Platnosť tohto kódu vypršala.",
"generating": "Generovanie…",
@@ -1713,7 +1713,7 @@
"button": "Importovať"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3055,7 +3055,7 @@
"start_tour": "Spustiť sprievodcu"
},
"demo_welcome": {
"title": "Vitajte v Bulwark Mail",
"title": "Vitajte v VNCmail+",
"description": "Preskúmajte plnohodnotného webového e-mailového klienta priamo v prehliadači. Všetky dáta zostávajú na vašom zariadení.",
"feature_email": "Čítajte a píšte e-maily",
"feature_organize": "Štítky, hviezdičky a priečinky",