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
+15 -15
View File
@@ -146,18 +146,18 @@
},
"protocol_handlers": {
"title": "Standaardapps",
"description": "Kies of e-mail- en kalenderlinks in Bulwark worden geopend. Technisch registreert Bulwark zich als protocolhandler voor mailto:- en webcal:-links.",
"description": "Kies of e-mail- en kalenderlinks in VNCmail+ worden geopend. Technisch registreert VNCmail+ zich als protocolhandler voor mailto:- en webcal:-links.",
"unsupported": "Deze browser of verbinding ondersteunt geen handmatige registratie van protocolhandlers. Mogelijk kun je de geïnstalleerde PWA nog gebruiken via de browser- of systeeminstellingen.",
"mailto_label": "E-maillinks",
"mailto_description": "Opent mailto:-links in Bulwark met een vooraf ingevulde opsteller.",
"mailto_description": "Opent mailto:-links in VNCmail+ met een vooraf ingevulde opsteller.",
"protocol_open_mode_label": "Bij het openen van protocollinks",
"protocol_open_mode_description": "Kies of Bulwark mailto:- en webcal:-links in een nieuw tabblad opent of een geopende sessie hergebruikt. Voor de optie actieve sessie is toestemming voor meldingen nodig, zodat je op een fallbackmelding kunt klikken om Bulwark naar voren te halen als de browser focus blokkeert.",
"protocol_open_mode_description": "Kies of VNCmail+ mailto:- en webcal:-links in een nieuw tabblad opent of een geopende sessie hergebruikt. Voor de optie actieve sessie is toestemming voor meldingen nodig, zodat je op een fallbackmelding kunt klikken om VNCmail+ naar voren te halen als de browser focus blokkeert.",
"protocol_open_mode_active_session": "Indien mogelijk openen in actieve sessie",
"protocol_open_mode_new_tab": "Altijd een nieuw tabblad openen",
"focus_notification_title": "Bulwark openen",
"focus_notification_body": "De link is geopend in Bulwark. Klik om het venster naar voren te halen.",
"focus_notification_title": "VNCmail+ openen",
"focus_notification_body": "De link is geopend in VNCmail+. Klik om het venster naar voren te halen.",
"webcal_label": "Kalenderlinks",
"webcal_description": "Opent webcal:-links in Bulwark met een vooraf ingevuld dialoogvenster voor kalenderabonnementen.",
"webcal_description": "Opent webcal:-links in VNCmail+ met een vooraf ingevuld dialoogvenster voor kalenderabonnementen.",
"register_mailto": "E-mailapp registreren",
"register_webcal": "Kalenderapp registreren",
"mailto_registered": "Registratie van e-mailhandler aangevraagd",
@@ -165,7 +165,7 @@
"registration_failed": "Registratie van protocolhandler mislukt",
"opening_mailto": "Opsteller wordt geopend...",
"opening_webcal": "Kalender wordt geopend...",
"browser_note": "Je browser of besturingssysteem kan om bevestiging vragen en kan vereisen dat Bulwark is geïnstalleerd voordat het als standaardapp kan worden geselecteerd.",
"browser_note": "Je browser of besturingssysteem kan om bevestiging vragen en kan vereisen dat VNCmail+ is geïnstalleerd voordat het als standaardapp kan worden geselecteerd.",
"select_account_title": "Account kiezen",
"select_mailto_account": "Kies welk account deze e-maillink moet openen.",
"select_webcal_account": "Kies welk account deze kalenderlink moet openen.",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Verbinding verloren. Opnieuw verbinden…",
"rate_limited_title": "Serverauthenticatie is tijdelijk beperkt.",
"rate_limited_detail": "Bulwark heeft achtergrondverzoeken gepauzeerd om een blokkade te voorkomen. Nieuwe poging over {seconds}s.",
"rate_limited_detail": "VNCmail+ heeft achtergrondverzoeken gepauzeerd om een blokkade te voorkomen. Nieuwe poging over {seconds}s.",
"rate_limited_action_title": "Verzoek gepauzeerd om blokkade te voorkomen.",
"rate_limited_action_detail": "Bulwark wacht tot de servercooldown voorbij is voordat er nieuwe geauthenticeerde verzoeken worden verzonden. Probeer het over {seconds}s opnieuw."
"rate_limited_action_detail": "VNCmail+ wacht tot de servercooldown voorbij is voordat er nieuwe geauthenticeerde verzoeken worden verzonden. Probeer het over {seconds}s opnieuw."
},
"notifications": {
"email_sent": "E-mail succesvol verzonden",
@@ -1074,12 +1074,12 @@
"push": {
"confirm_disable_message": "Dit apparaat ontvangt geen meldingen meer als de site is gesloten.",
"confirm_disable_title": "Achtergrondmeldingen uitschakelen?",
"description": "Ontvang systeemmeldingen voor nieuwe e-mail wanneer deze site gesloten is. Geleverd via de Bulwark-pushrelay; de relay ziet nooit e-mailinhoud.",
"description": "Ontvang systeemmeldingen voor nieuwe e-mail wanneer deze site gesloten is. Geleverd via de VNCmail+-pushrelay; de relay ziet nooit e-mailinhoud.",
"disable": "Uitschakelen",
"enable": "Inschakelen",
"ios_hint": "Installeer de site op iOS eerst op het beginscherm Safari levert Web Push alleen aan geïnstalleerde PWA's.",
"reenable": "Opnieuw registreren",
"relay_desc": "Gebruikt standaard de gehoste Bulwark-relay. Wijzig alleen als je zelf hostt.",
"relay_desc": "Gebruikt standaard de gehoste VNCmail+-relay. Wijzig alleen als je zelf hostt.",
"relay_label": "Push-relay",
"relay_locked": "Ingesteld door beheerder",
"relay_locked_desc": "De push-relay-URL is ingesteld door je beheerder en kan niet worden gewijzigd.",
@@ -1528,10 +1528,10 @@
},
"link_device": {
"title": "Mobiele app koppelen",
"description": "Log in bij de Bulwark Mail mobiele app zonder iets te typen. Genereer hier een QR-code en scan deze vanaf het inlogscherm van de app.",
"description": "Log in bij de VNCmail+ mobiele app zonder iets te typen. Genereer hier een QR-code en scan deze vanaf het inlogscherm van de app.",
"generate": "QR-code tonen",
"regenerate": "Nieuwe code tonen",
"instructions": "Open de Bulwark Mail app, tik op \"QR-code scannen\" op het inlogscherm en richt uw camera hierop.",
"instructions": "Open de VNCmail+ app, tik op \"QR-code scannen\" op het inlogscherm en richt uw camera hierop.",
"expires_in": "Deze code verloopt over {seconds} seconden. Hij kan maar één keer worden gebruikt.",
"expired": "Deze code is verlopen.",
"generating": "Genereren…",
@@ -1706,7 +1706,7 @@
"button": "Importeren"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3032,7 +3032,7 @@
"start_tour": "Tour starten"
},
"demo_welcome": {
"title": "Welkom bij Bulwark Mail",
"title": "Welkom bij VNCmail+",
"description": "Ontdek een volwaardige webmail-client - rechtstreeks in je browser. Alle gegevens blijven op je apparaat, dus test gerust alles.",
"feature_email": "E-mails lezen en schrijven",
"feature_organize": "Tags, sterren en mappen",