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": "Applications par défaut",
"description": "Choisissez si les liens d'e-mail et de calendrier s'ouvrent dans Bulwark. Techniquement, Bulwark s'enregistre comme gestionnaire de protocole pour les liens mailto: et webcal:.",
"description": "Choisissez si les liens d'e-mail et de calendrier s'ouvrent dans VNCmail+. Techniquement, VNCmail+ s'enregistre comme gestionnaire de protocole pour les liens mailto: et webcal:.",
"unsupported": "Ce navigateur ou cette connexion ne prend pas en charge l'enregistrement manuel des gestionnaires de protocole. Vous pourrez peut-être quand même utiliser la PWA installée via les paramètres du navigateur ou du système.",
"mailto_label": "Liens e-mail",
"mailto_description": "Ouvre les liens mailto: dans Bulwark avec un éditeur prérempli.",
"mailto_description": "Ouvre les liens mailto: dans VNCmail+ avec un éditeur prérempli.",
"protocol_open_mode_label": "À louverture des liens de protocole",
"protocol_open_mode_description": "Choisissez si Bulwark ouvre les liens mailto: et webcal: dans un nouvel onglet ou réutilise une session ouverte. Loption de session active nécessite lautorisation des notifications afin que vous puissiez cliquer sur une notification de secours pour ramener Bulwark au premier plan si le navigateur bloque le focus.",
"protocol_open_mode_description": "Choisissez si VNCmail+ ouvre les liens mailto: et webcal: dans un nouvel onglet ou réutilise une session ouverte. Loption de session active nécessite lautorisation des notifications afin que vous puissiez cliquer sur une notification de secours pour ramener VNCmail+ au premier plan si le navigateur bloque le focus.",
"protocol_open_mode_active_session": "Ouvrir dans la session active si possible",
"protocol_open_mode_new_tab": "Toujours ouvrir un nouvel onglet",
"focus_notification_title": "Ouvrir Bulwark",
"focus_notification_body": "Le lien a été ouvert dans Bulwark. Cliquez pour ramener la fenêtre au premier plan.",
"focus_notification_title": "Ouvrir VNCmail+",
"focus_notification_body": "Le lien a été ouvert dans VNCmail+. Cliquez pour ramener la fenêtre au premier plan.",
"webcal_label": "Liens de calendrier",
"webcal_description": "Ouvre les liens webcal: dans Bulwark avec une boîte de dialogue d'abonnement au calendrier préremplie.",
"webcal_description": "Ouvre les liens webcal: dans VNCmail+ avec une boîte de dialogue d'abonnement au calendrier préremplie.",
"register_mailto": "Enregistrer l'application e-mail",
"register_webcal": "Enregistrer l'application de calendrier",
"mailto_registered": "Enregistrement du gestionnaire d'e-mail demandé",
@@ -165,7 +165,7 @@
"registration_failed": "Échec de l'enregistrement du gestionnaire de protocole",
"opening_mailto": "Ouverture de l'éditeur...",
"opening_webcal": "Ouverture du calendrier...",
"browser_note": "Votre navigateur ou système d'exploitation peut vous demander de confirmer et peut exiger que Bulwark soit installé avant de pouvoir le sélectionner comme application par défaut.",
"browser_note": "Votre navigateur ou système d'exploitation peut vous demander de confirmer et peut exiger que VNCmail+ soit installé avant de pouvoir le sélectionner comme application par défaut.",
"select_account_title": "Choisir un compte",
"select_mailto_account": "Choisissez le compte qui doit ouvrir ce lien e-mail.",
"select_webcal_account": "Choisissez le compte qui doit ouvrir ce lien de calendrier.",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Connexion perdue. Tentative de reconnexion…",
"rate_limited_title": "L'authentification du serveur est temporairement limitee.",
"rate_limited_detail": "Bulwark a suspendu les requetes en arriere-plan pour eviter un blocage. Nouvelle tentative dans {seconds}s.",
"rate_limited_detail": "VNCmail+ a suspendu les requetes en arriere-plan pour eviter un blocage. Nouvelle tentative dans {seconds}s.",
"rate_limited_action_title": "Requete suspendue pour eviter le blocage.",
"rate_limited_action_detail": "Bulwark attend la fin du delai impose par le serveur avant d'envoyer d'autres requetes authentifiees. Reessayez dans {seconds}s."
"rate_limited_action_detail": "VNCmail+ attend la fin du delai impose par le serveur avant d'envoyer d'autres requetes authentifiees. Reessayez dans {seconds}s."
},
"notifications": {
"email_sent": "Email envoyé avec succès",
@@ -1074,12 +1074,12 @@
"push": {
"confirm_disable_message": "Cet appareil cessera de recevoir des alertes lorsque le site est fermé.",
"confirm_disable_title": "Désactiver les notifications en arrière-plan ?",
"description": "Recevez des notifications système pour les nouveaux courriers quand ce site est fermé. Livré via le relais push Bulwark ; le relais ne voit jamais le contenu des courriers.",
"description": "Recevez des notifications système pour les nouveaux courriers quand ce site est fermé. Livré via le relais push VNCmail+ ; le relais ne voit jamais le contenu des courriers.",
"disable": "Désactiver",
"enable": "Activer",
"ios_hint": "Sur iOS, installez d'abord le site sur l'écran d'accueil Safari ne livre Web Push qu'aux PWA installées.",
"reenable": "Réenregistrer",
"relay_desc": "Utilise par défaut le relais Bulwark hébergé. Ne le changez que si vous l'hébergez vous-même.",
"relay_desc": "Utilise par défaut le relais VNCmail+ hébergé. Ne le changez que si vous l'hébergez vous-même.",
"relay_label": "Relais push",
"relay_locked": "Défini par l'administrateur",
"relay_locked_desc": "L'URL du relais push a été définie par votre administrateur et ne peut pas être modifiée.",
@@ -1528,10 +1528,10 @@
},
"link_device": {
"title": "Associer l'application mobile",
"description": "Connectez-vous à l'application mobile Bulwark Mail sans rien saisir. Générez un QR code ici et scannez-le depuis l'écran de connexion de l'application.",
"description": "Connectez-vous à l'application mobile VNCmail+ sans rien saisir. Générez un QR code ici et scannez-le depuis l'écran de connexion de l'application.",
"generate": "Afficher le QR code",
"regenerate": "Afficher un nouveau code",
"instructions": "Ouvrez l'application Bulwark Mail, appuyez sur \"Scanner le QR code\" sur l'écran de connexion et pointez votre caméra ici.",
"instructions": "Ouvrez l'application VNCmail+, appuyez sur \"Scanner le QR code\" sur l'écran de connexion et pointez votre caméra ici.",
"expires_in": "Ce code expire dans {seconds} secondes. Il ne peut être utilisé qu'une seule fois.",
"expired": "Ce code a expiré.",
"generating": "Génération…",
@@ -1706,7 +1706,7 @@
"button": "Importer"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3032,7 +3032,7 @@
"start_tour": "Démarrer la visite"
},
"demo_welcome": {
"title": "Bienvenue sur Bulwark Mail",
"title": "Bienvenue sur VNCmail+",
"description": "Explorez un client webmail complet - directement dans votre navigateur. Toutes les données restent sur votre appareil, alors testez tout.",
"feature_email": "Lire et rédiger des e-mails",
"feature_organize": "Tags, étoiles et dossiers",