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": "Standardapps",
"description": "Vælg om e-mail- og kalenderlinks åbnes i Bulwark. Teknisk set registrerer Bulwark sig som protokolhåndtering for mailto:- og webcal:-links.",
"description": "Vælg om e-mail- og kalenderlinks åbnes i VNCmail+. Teknisk set registrerer VNCmail+ sig som protokolhåndtering for mailto:- og webcal:-links.",
"unsupported": "Denne browser eller forbindelse understøtter ikke manuel registrering af protokolhåndtering. Du kan muligvis stadig bruge den installerede PWA via browser- eller OS-indstillinger.",
"mailto_label": "E-mail-links",
"mailto_description": "Åbn mailto:-links i Bulwark med en forudfyldt komponist.",
"mailto_description": "Åbn mailto:-links i VNCmail+ med en forudfyldt komponist.",
"protocol_open_mode_label": "Ved åbning af protokollinks",
"protocol_open_mode_description": "Vælg om Bulwark åbner mailto:- og webcal:-links i en ny fane eller genbruger en åben session. Indstillingen \\\"aktiv session\\\" kræver notifikationstilladelse, så du kan klikke på en nødnotifikation for at bringe Bulwark frem, hvis browseren blokerer fokus.",
"protocol_open_mode_description": "Vælg om VNCmail+ åbner mailto:- og webcal:-links i en ny fane eller genbruger en åben session. Indstillingen \\\"aktiv session\\\" kræver notifikationstilladelse, så du kan klikke på en nødnotifikation for at bringe VNCmail+ frem, hvis browseren blokerer fokus.",
"protocol_open_mode_active_session": "Åbn i aktiv session hvis muligt",
"protocol_open_mode_new_tab": "Åbn altid ny fane",
"focus_notification_title": "Åbn Bulwark",
"focus_notification_body": "Linket blev åbnet i Bulwark. Klik for at bringe vinduet frem.",
"focus_notification_title": "Åbn VNCmail+",
"focus_notification_body": "Linket blev åbnet i VNCmail+. Klik for at bringe vinduet frem.",
"webcal_label": "Kalenderlinks",
"webcal_description": "Åbn webcal:-links i Bulwark med en forudfyldt kalenderabonnementsdialog.",
"webcal_description": "Åbn webcal:-links i VNCmail+ med en forudfyldt kalenderabonnementsdialog.",
"register_mailto": "Registrer e-mail-app",
"register_webcal": "Registrer kalender-app",
"mailto_registered": "Registrering af e-mail-håndtering anmodet",
@@ -165,7 +165,7 @@
"registration_failed": "Registrering af protokolhåndtering mislykkedes",
"opening_mailto": "Åbner komponist...",
"opening_webcal": "Åbner kalender...",
"browser_note": "Din browser eller dit operativsystem beder dig muligvis bekræfte dette og kræver muligvis, at Bulwark er installeret, før det kan vælges som standardapp.",
"browser_note": "Din browser eller dit operativsystem beder dig muligvis bekræfte dette og kræver muligvis, at VNCmail+ er installeret, før det kan vælges som standardapp.",
"select_account_title": "Vælg konto",
"select_mailto_account": "Vælg hvilken konto der skal åbne dette e-mail-link.",
"select_webcal_account": "Vælg hvilken konto der skal åbne dette kalenderlink.",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Forbindelse mistet. Forsøger at genoprette forbindelse…",
"rate_limited_title": "Server-godkendelse er midlertidigt hastighedsbegrænset.",
"rate_limited_detail": "Bulwark har sat baggrundsanmodninger på pause for at undgå udelukkelse. Prøver igen om {seconds}s.",
"rate_limited_detail": "VNCmail+ har sat baggrundsanmodninger på pause for at undgå udelukkelse. Prøver igen om {seconds}s.",
"rate_limited_action_title": "Anmodning sat på pause for at undgå udelukkelse.",
"rate_limited_action_detail": "Bulwark venter på, at serverens nedkølingsperiode slutter, før der sendes flere godkendte anmodninger. Prøv igen om {seconds}s."
"rate_limited_action_detail": "VNCmail+ venter på, at serverens nedkølingsperiode slutter, før der sendes flere godkendte anmodninger. Prøv igen om {seconds}s."
},
"notifications": {
"email_sent": "E-mail sendt succesfuldt",
@@ -1052,9 +1052,9 @@
},
"push": {
"title": "Baggrundsnotifikationer",
"description": "Modtag systemnotifikationer for ny mail, når dette site er lukket. Leveres via Bulwark push-relæet; relæet ser aldrig mail-indhold.",
"description": "Modtag systemnotifikationer for ny mail, når dette site er lukket. Leveres via VNCmail+ push-relæet; relæet ser aldrig mail-indhold.",
"relay_label": "Push-relæ",
"relay_desc": "Som standard det hosted Bulwark-relæ. Ændr kun, hvis du selv-host'er.",
"relay_desc": "Som standard det hosted VNCmail+-relæ. Ændr kun, hvis du selv-host'er.",
"relay_locked": "Indstillet af administrator",
"relay_locked_desc": "Push-relæ-URL'en er indstillet af din administrator og kan ikke ændres.",
"relay_placeholder": "https://notifikationer.relay.eksempel.dk",
@@ -1531,10 +1531,10 @@
},
"link_device": {
"title": "Tilknyt mobilapp",
"description": "Log ind i Bulwark Mail-mobilappen uden at skrive noget. Generér en QR-kode her, og scan den fra appens loginskærm.",
"description": "Log ind i VNCmail+-mobilappen uden at skrive noget. Generér en QR-kode her, og scan den fra appens loginskærm.",
"generate": "Vis QR-kode",
"regenerate": "Vis en ny kode",
"instructions": "Åbn Bulwark Mail-appen, tryk på \"Scan QR-kode\" på loginskærmen, og ret dit kamera herhen.",
"instructions": "Åbn VNCmail+-appen, tryk på \"Scan QR-kode\" på loginskærmen, og ret dit kamera herhen.",
"expires_in": "Denne kode udløber om {seconds} sekunder. Den kan kun bruges én gang.",
"expired": "Denne kode er udløbet.",
"generating": "Genererer…",
@@ -1709,7 +1709,7 @@
"button": "Importér"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3055,7 +3055,7 @@
"start_tour": "Start rundvisning"
},
"demo_welcome": {
"title": "Velkommen til Bulwark Mail",
"title": "Velkommen til VNCmail+",
"description": "Udforsk en fuldt udstyret webmailklient - direkte i din browser. Alle data forbliver på din enhed, så du kan teste alt frit.",
"feature_email": "Læs & skriv e-mail",
"feature_organize": "Tags, stjerner & mapper",