Files
rippy/ROADMAP.md
T
Hitonabi e710151c91 docs: aktualisiere alle MD-Dateien auf v1.8
- README.md: Etappe 7/8 hinzugefügt, Roadmap aktualisiert
- KONZEPT.md: Feature-Status aktualisiert
- ROADMAP.md: Etappe 7 (Dark Mode) und 8 (SoC) hinzugefügt
- SAVEPOINT.md: v1.8 mit Dark Mode und SoC-Planung
- ARCANE-VM-SETUP.md: Rippy Features hinzugefügt
- ARCAN-FIX.md: Status 21.07.2026 aktualisiert
- ARCAN-PROJECTS-DIR.md: Status hinzugefügt
- ARCANE-DOCKER-COMPOSE-FIX.md: Status aktualisiert
- ARCAN-INTEGRATION.md: Status hinzugefügt
- AGENTS.md: Aktueller Stand und nächste Etappe
- Commit: 9be0592
2026-07-21 22:24:21 +02:00

198 lines
6.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ROADMAP — Rippy
> Meilenstein-Plan für den Bau von Rippy. Jede Etappe ist lauffähig für sich.
---
## Etappe 1: Fundament — Container-Infrastruktur + udev-Erkennung
**Ziel:** Das System bootet, erkennt eine eingelegte Disc und erstellt einen Job.
**Was gebaut wird:**
- Docker Compose mit `api`, `worker`, `ui`, `postgres`, `redis`
- Basis-Dockerfiles für jeden Service (Python/FastAPI, Python/Celery, Node/React, PostgreSQL, Redis)
- udev-Regel + separater Daemon (Python), der Disc-Einwurf erkennt und Jobs an den Worker sendet
- Device-Resolver: ermittelt UUID/Serial des Laufwerks, erzeugt Symlink `/dev/disc/<uuid>`
- Job-Erstellung in Celery-Queue mit Disc-Typ und Device-Pfad
**Fertig wenn:**
-`docker compose up` startet alle 5 Container
- ✅ udev-Regel erkennt Disc-Einwurf
- ✅ udev-Daemon erstellt Celery-Job
- ✅ Celery-Worker nimmt den Job entgegen und gibt "Disc erkannt: DVD, Device: /dev/disc/xxx" aus
**Status:** Abgeschlossen
---
## Etappe 2: Ripping-Pipeline — Verlustfreies Extrahieren
**Ziel:** Disc wird rippt und als rohe Dateien abgelegt.
**Was gebaut wird:**
- CD-Ripping via `abcde` → FLAC, AcoustID-Fingerprinting (chromaprint) + MusicBrainz-Lookup
- DVD/Blu-ray-Ripping via `makejungles` (makeMKV-Äquivalent, OpenSource) → MKV, mit `--all --progress`
- Ripping im Worker-Container, Read-Only Device-Passthrough
- Fortschritts-Reporting über Celery-Signale an SSE-Stream
**Fertig wenn:**
- CD → FLAC-Dateien + MusicBrainz-Metadaten
- DVD → MKV mit allen Titeln
- Blu-ray → MKV mit allen Titeln
- Fortschritt wird in Echtzeit im UI angezeigt
---
## Etappe 3: Metadaten-Lookup + Pre-Scan
**Ziel:** Vor dem Ripping wird die Disc identifiziert und der Commander bestätigt.
**Was gebaut wird:**
- Pre-Scan-Modul: liest TOC (kein Ripping), extrahiert Titel/Laufzeit/Scene-Labels
- TMDB-Integration für Film-/Serien-Matching (Confidence-Score)
- MusicBrainz-Integration für CD-Matching
- TheTVDB-Fallback für Serien
- SQLite-Cache für API-Antworten (LRU, 10k Einträge, TTL)
- Pre-Scan-Latenz: 515s, dokumentiert
**Fertig wenn:**
- Nach Disc-Einwurf: Pre-Scan läuft automatisch
- UI zeigt: Titel, Jahr, Cover, Confidence-Score, Trackliste
- Commander kann bestätigen oder manuell korrigieren
- Bestätigte Metadaten werden im Cache persistiert
**Status:** Abgeschlossen
---
## Etappe 4: Jellyfin-Formatierung + NFO-Generierung
**Ziel:** Gerippte Dateien liegen in Jellyfin-konformer Ordnerstruktur mit Metadaten.
**Was gebaut wird:**
- Ordnerstruktur:
- Filme: `<Filmname> (<Jahr>)/<Filmname>-<title>.mkv`
- Serien: `<Serienname>/<Staffel N>/<Serienname> - S{N}E{N} - <Episode>.mkv`
- Musik: `<Künstler>/<Album> (<Jahr>)/<Track-Nr>. <Titel>.flac`
- NFO-Generator im Kodi/NFO-Schema:
- `movie.nfo`, `series.nfo`, `episode.nfo`, `album.nfo`
- Alle Metadaten aus Pre-Scan + NFO-Attribution (Source: TMDB)
- Image-Downloader: poster.jpg (500x750), fanart.jpg, backdrop.jpg (1920x1080+) von TMDB
- Jellyfin-kompatible Dateibenennung
- Multi-Disc-Handling: `Disc 1.mkv`, `Disc 2.mkv` etc.
**Fertig wenn:**
- Gerippte Dateien + NFO + Poster in Jellyfin-Ordnerstruktur
- Jellyfin scannt und erkennt alles korrekt
- Multi-Disc-Sets werden als eine Entität angezeigt
**Status:** Abgeschlossen
---
## Etappe 5: API + Auth + WebUI
**Ziel:** Vollständiger Web-Dienst mit Echtzeit-Status und Job-Steuerung.
**Was gebaut wird:**
- FastAPI mit JWT-Auth (Access 15min, Refresh 7 Tage), Rate-Limiting (100/min/API-Key)
- REST-Endpoints: Jobs erstellen/listen/abbrechen, Geräte verwalten, Einstellungen
- SSE-Stream für Echtzeit-Jobstatus
- React-UI (Vite-Build → statisch via Nginx):
- Dashboard mit Echtzeit-Kacheln (Job-Status, Queue, Disc-Einwurf)
- Job-Verlauf mit Fortschrittsbalken
- Metadaten-Preview mit Bestätigungs-Dialog
- Job-Detail mit Live-Log
- Ergebnis-View mit Ordnerstruktur-Preview
- Einstellungen (API-Keys, Transcoding, Backup-Pfade, Jellyfin-Config)
- Geräte-Verwaltung
**Fertig wenn:**
- Commander kann UI im Browser öffnen und alles bedienen
- Jobs starten, stoppen, Verlauf einsehen
- Echtzeit-Updates via SSE funktionieren
- Alle Einstellungen werden gespeichert
**Status:** Abgeschlossen
---
## Etappe 6: Sicherheit + Compliance + Hardening
**Ziel:** Produktionsreif — sicher, compliant, robust.
**Was gebaut wird:**
- SELinux/AppArmor Profile pro Container
- Read-only Bind-Mounts für System-Bibliotheken
- mTLS zwischen API ↔ Worker
- Netzwerk-Policy: UI→API (HTTPS), API↔Worker (mTLS), Worker↔Internet (nur API)
- PostgreSQL mit verschlüsselten Connections
- Source-Release-Endpoint (GPL-v3-Compliance)
- Lizenz-Dokumentation (MakeMKV, OpenSource-Komponenten)
- Backup-Hooks (PBS-Snapshot-Integration)
- Error-Handling: exponential backoff Retry (max 5), Circuit-Breaker für APIs
**Fertig wenn:**
- Alle Container haben Security-Profile
- Netzwerkverkehr zwischen Containern ist verschlüsselt
- GPL-v3-Compliance-Checkliste abgehakt
- Backup-Hooks funktionieren
**Status:** Abgeschlossen
---
## Etappe 7: API UI Modernisiert
**Ziel:** Modernes React-UI mit Dark Mode Support.
**Was gebaut wird:**
- React UI mit TailwindCSS
- Sidebar Navigation
- Einstellungen mit Tab-Struktur
- Dark Mode mit Theme-Toggle und localStorage persistence
- Status-Badges und StatCards mit Dark Mode Support
**Fertig wenn:**
- UI mit Dark Mode läuft
- Navigation und Einstellungen funktionieren
- Commit `43dfce5` — Dark Mode Implementation
**Status:** Abgeschlossen
---
## Etappe 8: Separation of Concerns
**Ziel:** Code-Qualität durch saubere Trennung.
**Was gebaut wird:**
- Theme-Context aus App.tsx auslagern
- Dark Mode Utility für CSS-Klassen
- Theme props in Komponenten verstecken
- Tailwind-Config zentralisieren
**Fertig wenn:**
- Theme-Logik in eigenem Context
- Wiederverwendbare Dark Mode Helper
- Saubere Komponenten-Struktur
---
## Etappe 9: Proxmox-Integration
**Ziel:** Ein-Click-Deploy auf Proxmox LXC.
---
## Offene Punkte (aus KONZEPT.md)
| Punkt | Etappe | Behandlung |
|-------|--------|------------|
| TMDB-Matching-Fehler bei Nischentiteln | Etappe 3 | Pre-Scan Confidence-Score + manueller Korrektur-Mechanismus |
| NFO-Format-Abhängigkeit von Jellyfin-Version | Etappe 4 | Kodi/NFO-Schema (stabil, gut dokumentiert) |
| Pre-Scan-Latenz (515s) | Etappe 3 | Akzeptabel, Parallelisierung möglich |
| TMDB-Bildrechte | Etappe 4 | Gelöst: TMDB API-ToS erlaubt private Nutzung |
| Hybrid-Discs | Etappe 1 | MVP erkennt nur Standard; als "Kann" notiert |
| Redis Single-Instance | Etappe 1 | MVP reicht; Cluster als "Später" |