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": "Aplikacje domyślne",
"description": "Wybierz, czy linki e-mail i kalendarza mają otwierać się w Bulwark. Technicznie Bulwark rejestruje się jako obsługa protokołu dla linków mailto: i webcal:.",
"description": "Wybierz, czy linki e-mail i kalendarza mają otwierać się w VNCmail+. Technicznie VNCmail+ rejestruje się jako obsługa protokołu dla linków mailto: i webcal:.",
"unsupported": "Ta przeglądarka lub to połączenie nie obsługuje ręcznej rejestracji obsługi protokołu. Nadal możesz mieć możliwość użycia zainstalowanej aplikacji PWA w ustawieniach przeglądarki lub systemu.",
"mailto_label": "Linki e-mail",
"mailto_description": "Otwiera linki mailto: w Bulwark z wstępnie wypełnionym edytorem wiadomości.",
"mailto_description": "Otwiera linki mailto: w VNCmail+ z wstępnie wypełnionym edytorem wiadomości.",
"protocol_open_mode_label": "Podczas otwierania linków protokołu",
"protocol_open_mode_description": "Wybierz, czy Bulwark ma otwierać linki mailto: i webcal: w nowej karcie, czy ponownie używać otwartej sesji. Opcja aktywnej sesji wymaga uprawnienia do powiadomień, aby można było kliknąć powiadomienie awaryjne i przenieść Bulwark na pierwszy plan, jeśli przeglądarka blokuje fokus.",
"protocol_open_mode_description": "Wybierz, czy VNCmail+ ma otwierać linki mailto: i webcal: w nowej karcie, czy ponownie używać otwartej sesji. Opcja aktywnej sesji wymaga uprawnienia do powiadomień, aby można było kliknąć powiadomienie awaryjne i przenieść VNCmail+ na pierwszy plan, jeśli przeglądarka blokuje fokus.",
"protocol_open_mode_active_session": "Jeśli to możliwe, otwórz w aktywnej sesji",
"protocol_open_mode_new_tab": "Zawsze otwieraj nową kartę",
"focus_notification_title": "Otwórz Bulwark",
"focus_notification_body": "Link został otwarty w Bulwark. Kliknij, aby przenieść okno na pierwszy plan.",
"focus_notification_title": "Otwórz VNCmail+",
"focus_notification_body": "Link został otwarty w VNCmail+. Kliknij, aby przenieść okno na pierwszy plan.",
"webcal_label": "Linki kalendarza",
"webcal_description": "Otwiera linki webcal: w Bulwark z wstępnie wypełnionym oknem subskrypcji kalendarza.",
"webcal_description": "Otwiera linki webcal: w VNCmail+ z wstępnie wypełnionym oknem subskrypcji kalendarza.",
"register_mailto": "Zarejestruj aplikację e-mail",
"register_webcal": "Zarejestruj aplikację kalendarza",
"mailto_registered": "Zażądano rejestracji obsługi e-mail",
@@ -165,7 +165,7 @@
"registration_failed": "Rejestracja obsługi protokołu nie powiodła się",
"opening_mailto": "Otwieranie edytora...",
"opening_webcal": "Otwieranie kalendarza...",
"browser_note": "Przeglądarka lub system operacyjny może poprosić o potwierdzenie i może wymagać zainstalowania Bulwark, zanim będzie można wybrać go jako aplikację domyślną.",
"browser_note": "Przeglądarka lub system operacyjny może poprosić o potwierdzenie i może wymagać zainstalowania VNCmail+, zanim będzie można wybrać go jako aplikację domyślną.",
"select_account_title": "Wybierz konto",
"select_mailto_account": "Wybierz konto, które ma otworzyć ten link e-mail.",
"select_webcal_account": "Wybierz konto, które ma otworzyć ten link kalendarza.",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Utracono połączenie. Próba ponownego połączenia…",
"rate_limited_title": "Uwierzytelnianie serwera jest tymczasowo ograniczone.",
"rate_limited_detail": "Bulwark wstrzymał żądania w tle, aby uniknąć blokady. Ponowna próba za {seconds}s.",
"rate_limited_detail": "VNCmail+ wstrzymał żądania w tle, aby uniknąć blokady. Ponowna próba za {seconds}s.",
"rate_limited_action_title": "Żądanie wstrzymane, aby uniknąć blokady.",
"rate_limited_action_detail": "Bulwark czeka na zakończenie okresu blokady serwera przed wysłaniem kolejnych uwierzytelnionych żądań. Spróbuj ponownie za {seconds}s."
"rate_limited_action_detail": "VNCmail+ czeka na zakończenie okresu blokady serwera przed wysłaniem kolejnych uwierzytelnionych żądań. Spróbuj ponownie za {seconds}s."
},
"notifications": {
"email_sent": "Wiadomość wysłana pomyślnie",
@@ -1074,12 +1074,12 @@
"push": {
"confirm_disable_message": "To urządzenie przestanie otrzymywać powiadomienia, gdy strona jest zamknięta.",
"confirm_disable_title": "Wyłączyć powiadomienia w tle?",
"description": "Otrzymuj powiadomienia systemowe o nowych wiadomościach, gdy ta strona jest zamknięta. Dostarczane przez przekaźnik push Bulwark; przekaźnik nigdy nie widzi treści wiadomości.",
"description": "Otrzymuj powiadomienia systemowe o nowych wiadomościach, gdy ta strona jest zamknięta. Dostarczane przez przekaźnik push VNCmail+; przekaźnik nigdy nie widzi treści wiadomości.",
"disable": "Wyłącz",
"enable": "Włącz",
"ios_hint": "W systemie iOS najpierw zainstaluj stronę na ekranie głównym Safari dostarcza Web Push tylko zainstalowanym PWA.",
"reenable": "Zarejestruj ponownie",
"relay_desc": "Domyślnie używa hostowanego przekaźnika Bulwark. Zmień tylko jeśli hostujesz samodzielnie.",
"relay_desc": "Domyślnie używa hostowanego przekaźnika VNCmail+. Zmień tylko jeśli hostujesz samodzielnie.",
"relay_label": "Przekaźnik push",
"relay_locked": "Ustawione przez administratora",
"relay_locked_desc": "Adres URL przekaźnika push został ustawiony przez administratora i nie można go zmienić.",
@@ -1528,10 +1528,10 @@
},
"link_device": {
"title": "Połącz aplikację mobilną",
"description": "Zaloguj się do aplikacji mobilnej Bulwark Mail bez wpisywania czegokolwiek. Wygeneruj tutaj kod QR i zeskanuj go na ekranie logowania aplikacji.",
"description": "Zaloguj się do aplikacji mobilnej VNCmail+ bez wpisywania czegokolwiek. Wygeneruj tutaj kod QR i zeskanuj go na ekranie logowania aplikacji.",
"generate": "Pokaż kod QR",
"regenerate": "Pokaż nowy kod",
"instructions": "Otwórz aplikację Bulwark Mail, na ekranie logowania stuknij \"Skanuj kod QR\" i skieruj aparat tutaj.",
"instructions": "Otwórz aplikację VNCmail+, na ekranie logowania stuknij \"Skanuj kod QR\" i skieruj aparat tutaj.",
"expires_in": "Ten kod wygaśnie za {seconds} sekund. Można go użyć tylko raz.",
"expired": "Ten kod wygasł.",
"generating": "Generowanie…",
@@ -1706,7 +1706,7 @@
"button": "Importuj"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3032,7 +3032,7 @@
"start_tour": "Rozpocznij przewodnik"
},
"demo_welcome": {
"title": "Witaj w Bulwark Mail",
"title": "Witaj w VNCmail+",
"description": "Poznaj w pełni funkcjonalnego klienta poczty webowej - bezpośrednio w przeglądarce. Wszystkie dane pozostają na Twoim urządzeniu, więc możesz śmiało wszystko przetestować.",
"feature_email": "Czytaj i pisz wiadomości e-mail",
"feature_organize": "Etykiety, gwiazdki i foldery",