From 3734ef90e8baf9a7b984f22de79bbc794332da61 Mon Sep 17 00:00:00 2001 From: s8n Date: Fri, 8 May 2026 04:29:26 +0100 Subject: [PATCH] doc 16: Jellyfin branding leaks audit (read-only) --- docs/16-jellyfin-branding-leaks.md | 476 +++++++++++++++++++++++++++++ 1 file changed, 476 insertions(+) create mode 100644 docs/16-jellyfin-branding-leaks.md diff --git a/docs/16-jellyfin-branding-leaks.md b/docs/16-jellyfin-branding-leaks.md new file mode 100644 index 0000000..5de3606 --- /dev/null +++ b/docs/16-jellyfin-branding-leaks.md @@ -0,0 +1,476 @@ +# 16 - Jellyfin Branding Leaks (Read-Only Audit) + +> Owner wants ALL Jellyfin branding hidden user-side. This doc inventories every +> place a logged-in non-admin still sees the word "Jellyfin" or the +> teal/purple triangle logo, and proposes a concrete fix for each. + +Last verified: 2026-05-08 against live `https://arrflix.s8n.ru` running +Jellyfin 10.10.3 (`jellyfin/jellyfin` image). Probe account: `marco` +(non-admin, `EnableUserPreferenceAccess=false`). + +This doc is **read-only**. No CSS POSTs, no bundle edits, no service +restarts performed. Implementation is a follow-up branch. + +--- + +## TL;DR — counts + +| Surface | Reachable as non-admin? | Raw "Jellyfin" mentions | +|---|---|---| +| `index.html` (live, bind-mount) | Yes | 0 (already shimmed: title, app-name, favicon, splashLogo) | +| PWA manifest `fd4301fdc170fd202474.json` | Yes (PWA install + iOS Safari add-to-home + Android install prompt) | **2** (`name`, `short_name`) | +| en-us i18n chunk | Yes (3 entries reachable; 19 are admin/dashboard/wizard) | 22 keys, **3 user-reachable** | +| `main.jellyfin.bundle.js` literals | Edge | 2 (`appName():"Jellyfin Web"` not visible; one error-route phrase) | +| Logo screensaver (`banner-light.png`) | Yes (idle timeout, default 3min) | 1 image asset | +| Apple-touch-startup-image splash PNGs | Yes (iOS Safari "Add to Home" PWA only) | ~20 images | +| Service worker registration message | No | 0 (clean — no JF strings) | +| chromecastPlayer plugin chunk | No (we hide cast btn; chunk only loads if cast invoked) | 0 | +| Browser tab title / favicon | No | 0 (already locked by shim) | + +**Recommended fix path:** **CSS hide + JS shim + manifest bind-mount.** No bundle modifications. CSS alone is insufficient (manifest, i18n, screensaver image are CSS-invisible). + +--- + +## Already-fixed (don't redo) + +| Surface | Mechanism | Doc | +|---|---|---| +| `Jellyfin` overwrite by SPA | `lockTitle()` regex shim | `10-spa-runtime-shim.md` | +| `` Jellyfin teal triangle | Embedded data-URL favicon + `lockFavicon()` | 10 | +| `` | Static replace in bind-mounted index.html (`content="ARRFLIX"`) | 10 | +| `.splashLogo` (login chrome top-left) | Image swap in bind-mounted index.html | 10 | +| `.adminDrawerLogo img` + `.pageTitleWithLogo` | CustomCss `content: url(data:image/png;base64,…)` | `04-theming-and-users.md` §3b | +| Pre-bundle login flash (blue button, dark blue bg) | Inline `