Doku: KONZEPT.md, ROADMAP.md, AGENTS.md, README.md, SAVEPOINT.md, .aiexclude

This commit is contained in:
2026-07-21 10:11:42 +02:00
parent b0c40e3aa6
commit cbe7d2b9c3
5 changed files with 289 additions and 2 deletions
+162
View File
@@ -0,0 +1,162 @@
# 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 (Go oder 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
- `makejungles` liest die TOC einer eingelegten Disc
- udev-Event löst Job-Erstellung aus
- Celery-Worker nimmt den Job entgegen und gibt "Disc erkannt: DVD, Titel: 'xyz'" aus
---
## 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
---
## 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
---
## 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
---
## 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
---
## Etappe 7: Proxmox-Integration + Dokumentation
**Ziel:** Ein-Click-Deploy auf Proxmox LXC.
**Was gebaut wird:**
- Proxmox LXC Template (Debian 12 Slim)
- Ansible Playbooks für die Installation
- Dokumentation: Installation, Konfiguration, Troubleshooting
- Beispiel `docker-compose.yml` mit allen Umgebungsvariablen
- Makefile für lokale Entwicklung
**Fertig wenn:**
- Ein neuer Container ist in 5 Minuten bereit
- `make up` startet alles lokal für Entwicklung
- Dokumentation ist vollständig und verständlich
---
## 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" |