ARRFLIX/ROADMAP.md
s8n 6bf78d66e1 Restrict non-admin users + 3 imports landed
- EnableUserPreferenceAccess=false on guest + 5 (hides Display, Home,
  Playback, Subtitles pref pages — owner controls UX centrally).
- Wrapper bin/add-jellyfin-user.sh updated to bake this into all future
  non-admin user creations.
- ROADMAP entries (added by sibling import agents):
  - Imported: The Incredible Hulk (2008), TMDB 1724, 4 images
  - Imported: Idiocracy (2006), TMDB 7512 (NOT 1542 = Office Space)
  - Imported: American Dad! (2005) S01-S04, 58 eps, TMDB 1433
- WAN exposure docs added (doc 09, 256 lines): Gandi A record live,
  no-guest middleware dropped, lockout=5 baked in. Owner still must
  port-forward 80/443 on home router for actual public access.
2026-05-08 03:18:58 +01:00

5.6 KiB
Raw Blame History

Roadmap — ARRFLIX

What's done, what's open, what's deferred. Update on every commit that lands or moves an item between buckets.

Last revised: 2026-05-08


Done

  • Deploy: Jellyfin 10.10.3 on nullstone, LAN-only at arrflix.s8n.ru, file-provider Traefik route, LE cert via Gandi DNS-01, Pi-hole local DNS pin, userns_mode=host
  • Theme: ElegantFin v25.12.31 applied via /System/Configuration/branding
  • Cast & Crew + Guest Stars: hidden globally via CustomCss (#castCollapsible, #guestCastCollapsible)
  • Library: TV Shows → /media/tv/Futurama (1999)/, 72 eps + 9 featurettes, locked to TMDB 615
  • Cleanup: Polish set deleted, junk-stripped English set imported, source + staging deleted
  • Plugins: OpenSubtitles v20 installed (v21+ needs JF 10.11 ABI)
  • Users: s8n (admin), guest (non-admin, pw 123)
  • Wrapper: bin/add-jellyfin-user.sh for canonical user creation
  • Home layout: My Media tile row dropped per user (resume / resumeaudio / nextup / latestmedia)
  • Docs: 0108 (artwork, metadata, subs, theming, file-structure, per-lib themes, cleanup, naming) + ADMIN-GUIDE.md
  • Imported: The Incredible Hulk (2008)
  • Imported: Idiocracy (2006)
  • Imported: American Dad! (2005) S01-S04 (58 eps)

Open — actionable now

High value

  • OpenSubtitles credentials

    • Owner signs up at opensubtitles.com (NOT .org)
    • I POST creds to /Plugins/<id>/Configuration per docs/03 § 3.4
    • Test by triggering subtitle search on one Futurama episode
    • Free tier = 20 dl/day; full library will take ~3 days unless VIP
  • GPU transcode (nvidia driver)

    • GTX 1660 Ti present on nullstone, nvidia-smi fails — driver kernel module not loaded
    • SecureBoot enabled → DKMS module signing required
    • Steps in README.md § Transcoding and one earlier diagnosis turn
    • Blocks: anyone watching on a low-power client (phone, fire TV) currently CPU-transcodes
    • Estimated wall: 30 min + reboot (nullstone hosts traefik, forgejo, matrix — ~2 min downtime)
  • Loading-splash rebrand

    • Replace Jellyfin pre-bundle logo with arrflix.s8n.ru wordmark + 4-bar pulse spinner
    • Approach: bind-mount patched /jellyfin/jellyfin-web/index.html per the plan in this session's history
    • Doc to write: docs/09-loading-splash.md (pre-bundle vs CustomCss timing, regen-on-upgrade)

Medium value

  • Extract bin/cleanup-import.sh and bin/normalize.py from docs 07 + 08 into runnable repo files (currently embedded in markdown only)

  • Per-library themes (doc 06)

    • Install n00bcodr/Jellyfin-JavaScript-Injector plugin
    • Ship 30-line shim that mirrors topParentId + collectionType from URL hash to body class
    • Add three scoped CSS blocks (body.lib-movies Netflix, body.lib-anime Crunchyroll, body.lib-music Spotify)
    • Source CSS hunt: 5 Netflix-flavoured bases listed in doc 06; Crunchyroll + Spotify must be hand-built (no existing theme)
    • Verdict per doc 06: "tinted, branded, recognisable" — NOT pixel-perfect
  • Audit-vs-rules pass on current state

    • /home/user/media/tv/Futurama (1999)/ already conforms post-import
    • But: subtitle sidecars absent (waiting on OpenSubtitles creds)
    • Featurettes folder is lowercase ✓
    • Year in parens ✓
    • SXXEXX zero-padded ✓
    • Episode title separator -

Low value

  • Library scaffolding: empty /media/{movies,anime,musicvideos}/ libraries exist; no content yet
  • Backup strategy for /home/docker/jellyfin/config/ (DB + watched-state). Currently zero backups. Tie into existing nullstone backup chain.
  • Forgejo Actions CI for the repo (lint compose, validate bin/*.sh with shellcheck, render docs)

Blocked / waiting on owner

  • OpenSubtitles creds → owner has not signed up yet
  • nvidia driver fix → owner needs to run sudo commands or approve disable-SecureBoot path
  • Decision on per-library themes (doc 06): green-light or skip

Deferred

  • Pixel-perfect Netflix/Crunchyroll/Spotify per-library: would require 3 separate Jellyfin instances on subdomains. ~100× maintenance cost. Doc 06 § 5. Don't do.
  • Custom Jellyfin Docker image: FROM jellyfin/jellyfin + COPY index.html. Cleaner than bind-mount for splash + JS injector but extra build pipeline. Defer until ≥3 web-bundle overrides needed.
  • Subdomain split for friend-only access: friend already gets non-admin Jellyfin user via bin/add-jellyfin-user.sh with EnabledFolders ACL. Subdomain not necessary.
  • Move to alternative web client (Jellyfin-Vue): replaces the whole UI, breaks ElegantFin + JS Injector. Owner explicitly wants Netflix-y, not vue-y. Don't do.
  • Hardware change: 4 TB HDD on nullstone idle. Wait until library exceeds 500 GB before activating second-path library mounts (doc 05 § Architecture C).

Tracking

When an item moves to Done, link the commit hash. When it stalls, note the blocker date. Don't let entries rot — review on the first of each month.

Item Status Last touch Owner
OpenSubtitles creds blocked-on-owner 2026-05-07 s8n
nvidia driver blocked-on-owner 2026-05-07 s8n
Loading splash open-actionable 2026-05-08 claude
Extract bin/ scripts open-actionable 2026-05-08 claude
Per-library themes open-actionable (decision pending) 2026-05-08 claude
Library scaffolding open-low-value 2026-05-08 s8n
Backup strategy open-low-value not-started claude
Forgejo CI open-low-value not-started claude