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
@@ -703,9 +703,9 @@
"app_title": "Webmail",
"reconnecting": "החיבור אבד. מנסה להתחבר מחדש...",
"rate_limited_title": "אימות השרת מוגבל באופן זמני בקצב.",
"rate_limited_detail": "Bulwark השהתה בקשות ברקע כדי למנוע נעילה. מנסה שוב ב-{seconds}s.",
"rate_limited_detail": "VNCmail+ השהתה בקשות ברקע כדי למנוע נעילה. מנסה שוב ב-{seconds}s.",
"rate_limited_action_title": "הבקשה הושהתה כדי למנוע נעילה.",
"rate_limited_action_detail": "Bulwark ממתין עד שקירור השרת יסתיים לפני שליחת בקשות מאומתות יותר. נסה שוב ב-{seconds}s."
"rate_limited_action_detail": "VNCmail+ ממתין עד שקירור השרת יסתיים לפני שליחת בקשות מאומתות יותר. נסה שוב ב-{seconds}s."
},
"notifications": {
"email_sent": "האימייל נשלח בהצלחה",
@@ -1038,9 +1038,9 @@
},
"push": {
"title": "התראות בדפדפן",
"description": "קבל עדכונים מערכת עבור דוא״ל חדש כאשר אתר זה סגור. מסופק דרך ממסר Bulwark; הממסר לא רואה תוכן דוא״ל.",
"description": "קבל עדכונים מערכת עבור דוא״ל חדש כאשר אתר זה סגור. מסופק דרך ממסר VNCmail+; הממסר לא רואה תוכן דוא״ל.",
"relay_label": "ממסר דחיפה",
"relay_desc": "ברירת מחדל של ממסר Bulwark המתורח. שנה רק אם אתה מארח בעצמך.",
"relay_desc": "ברירת מחדל של ממסר VNCmail+ המתורח. שנה רק אם אתה מארח בעצמך.",
"relay_locked": "הוגדר על ידי מנהל",
"relay_locked_desc": "כתובת ממסר הדחיפה הוגדרה על ידי מנהל שלך ולא ניתן לשנות אותה.",
"relay_placeholder": "https://notifications.relay.example.com",
@@ -1493,10 +1493,10 @@
},
"link_device": {
"title": "הקשר יישום נייד",
"description": "היכנס ליישום הנייד Bulwark Mail ללא הקלדת דבר. צור קוד QR כאן וסרוק אותו מהמסך ההתחברות של היישום.",
"description": "היכנס ליישום הנייד VNCmail+ ללא הקלדת דבר. צור קוד QR כאן וסרוק אותו מהמסך ההתחברות של היישום.",
"generate": "הצג קוד QR",
"regenerate": "הצג קוד חדש",
"instructions": "פתח את אפליקציית Bulwark Mail, לחץ ״סרוק קוד QR״ במסך ההתחברות, וכיוון את המצלמה שלך לכאן.",
"instructions": "פתח את אפליקציית VNCmail+, לחץ ״סרוק קוד QR״ במסך ההתחברות, וכיוון את המצלמה שלך לכאן.",
"expires_in": "קוד זה פוקע בעוד {seconds} שניות. ניתן להשתמש בו רק פעם אחת.",
"expired": "קוד זה פקע.",
"generating": "יצירה…",
@@ -1668,7 +1668,7 @@
"button": "ייבוא"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
},
"show_avatars_in_junk": {
"label": "הצג אווטרים בתיקייה זבל",
@@ -3215,18 +3215,18 @@
"meta_description": "לקוח webmail מינימליסטי באמצעות פרוטוקול JMAP",
"protocol_handlers": {
"title": "יישומים ברירת מחדל",
"description": "בחר אם קישורי דוא״ל ולוח שנה ייפתחו ב־Bulwark. מבחינה טכנית, Bulwark רשום כטיפול בפרוטוקול עבור קישורי mailto: ו־webcal:.",
"description": "בחר אם קישורי דוא״ל ולוח שנה ייפתחו ב־VNCmail+. מבחינה טכנית, VNCmail+ רשום כטיפול בפרוטוקול עבור קישורי mailto: ו־webcal:.",
"unsupported": "דפדפן זה או חיבור זה לא תומך בהרשמה ידנית של טיפול בפרוטוקול. ייתכן שעדיין תוכל להשתמש ב־PWA המותקנת דרך הדפדפן או הגדרות מערכת ההפעלה.",
"mailto_label": "קישורי דוא״ל",
"mailto_description": "פתח קישורי mailto: ב־Bulwark עם מחבר שמלא מראש.",
"mailto_description": "פתח קישורי mailto: ב־VNCmail+ עם מחבר שמלא מראש.",
"protocol_open_mode_label": "בעת פתיחת קישורי פרוטוקול",
"protocol_open_mode_description": "בחר אם Bulwark יפתח קישורי mailto: ו־webcal: בלשונית חדשה או ישתמש בחיבור פתוח. אפשרות הישיבה הפעילה דורשת הרשאת עדכון כדי שתוכל ללחוץ על עדכון נופל כדי להביא את Bulwark לחזית אם הדפדפן חוסם מיקוד.",
"protocol_open_mode_description": "בחר אם VNCmail+ יפתח קישורי mailto: ו־webcal: בלשונית חדשה או ישתמש בחיבור פתוח. אפשרות הישיבה הפעילה דורשת הרשאת עדכון כדי שתוכל ללחוץ על עדכון נופל כדי להביא את VNCmail+ לחזית אם הדפדפן חוסם מיקוד.",
"protocol_open_mode_active_session": "פתח בישיבה פעילה אם אפשר",
"protocol_open_mode_new_tab": "פתח תמיד לשונית חדשה",
"focus_notification_title": "פתח את Bulwark",
"focus_notification_body": "הקישור נפתח ב־Bulwark. לחץ כדי להביא את החלון לחזית.",
"focus_notification_title": "פתח את VNCmail+",
"focus_notification_body": "הקישור נפתח ב־VNCmail+. לחץ כדי להביא את החלון לחזית.",
"webcal_label": "קישורי לוח שנה",
"webcal_description": "פתח קישורי webcal: ב־Bulwark עם תיבת דו־שיח מלא מראש להרשמה ללוח שנה.",
"webcal_description": "פתח קישורי webcal: ב־VNCmail+ עם תיבת דו־שיח מלא מראש להרשמה ללוח שנה.",
"register_mailto": "רשום יישום דוא״ל",
"register_webcal": "רשום יישום לוח שנה",
"mailto_registered": "בקש הרשמה של מטפל דוא״ל",
@@ -3234,7 +3234,7 @@
"registration_failed": "הרשמת טיפול בפרוטוקול נכשלה",
"opening_mailto": "פתיחת מחבר…",
"opening_webcal": "פתיחת לוח שנה…",
"browser_note": "הדפדפן או מערכת ההפעלה שלך עשויים לבקש ממך לאשר זאת ועשויים לדרוש שBulwark יותקן לפני שניתן לבחור אותו כיישום ברירת המחדל.",
"browser_note": "הדפדפן או מערכת ההפעלה שלך עשויים לבקש ממך לאשר זאת ועשויים לדרוש שVNCmail+ יותקן לפני שניתן לבחור אותו כיישום ברירת המחדל.",
"select_account_title": "בחר חשבון",
"select_mailto_account": "בחר איזה חשבון צריך לפתוח קישור דוא״ל זה.",
"select_webcal_account": "בחר איזה חשבון צריך לפתוח קישור לוח שנה זה.",