Hitonabi
12c67aee27
fix: use dark class instead of data-theme for Tailwind
2026-07-22 17:12:32 +02:00
Hitonabi
85e072a7dd
fix: use Tailwind dark: prefix instead of conditional classes
2026-07-22 17:11:02 +02:00
Hitonabi
886cf4398e
fix: Dashboard.tsx useEffect syntax error
2026-07-22 17:04:18 +02:00
Hitonabi
d2fb281342
fix: complete dark mode implementation with all UI components
2026-07-22 17:00:49 +02:00
Hitonabi
95c1f9b105
feat(ui): SoC Refactoring & Config Validation
...
- Theme Context ausgelagert (ThemeContext.tsx + useDarkMode.ts)
- Config Validation mit TMDB-API-Key Pflicht (config_validation.py)
- Cache Key Centralization (cache/keys.py)
- CD-Ripping mit abcde implementiert (Worker)
- Docker Compose mit Healthchecks & LOG_LEVEL
- ROADMAP.md & SAVEPOINT.md aktualisiert
2026-07-22 16:38:19 +02:00
Hitonabi
43dfce5233
feat(ui): implement dark mode with theme toggle
...
- Add global theme state in App.tsx with localStorage persistence
- Implement dark mode CSS variables in index.css
- Add theme toggle button in sidebar navigation
- Update Dashboard with dark mode support for stats cards and badges
- Update Settings page with dark mode for main layout and toggles
This implements the core dark mode functionality with separation of
concerns - theme state is managed globally in App.tsx and passed down
to child components as props.
2026-07-21 22:18:59 +02:00
Hitonabi
ba2429612a
rippy-ui-modern: API UI Modernisiert & Import-Fixes
...
- Doppelte Arcane-Einträge behoben (rippy statt Rippy) - Import-Fixes: relative → absolute imports in main.py, cache/__init__.py, prescan/__init__.py, clients/__init__.py - Neue Dateien: cache.py, prescan.py, Settings.tsx - API-Port 8000 in docker-compose.yml gemappt - UI mit Sidebar, Dark Mode, Einstellungen-Tabs
Fixes : #2978 (doppelte Einträge), #2888 (Import-Fehler)
2026-07-21 22:08:03 +02:00
Hitonabi
e37aff2678
fix: jwt_secret_key hinzufügen
2026-07-21 17:53:59 +02:00
Hitonabi
7a61440d22
chore: worker .dockerignore for __pycache__
2026-07-21 17:51:41 +02:00
Hitonabi
969a863835
fix: pydantic-settings import für v2
2026-07-21 17:49:16 +02:00
Hitonabi
08a985b989
fix: Package-Struktur für API-Container (app/)
2026-07-21 17:48:09 +02:00
Hitonabi
50f747d1e0
Dockerfiles: Korrektur für Arcane Build
2026-07-21 17:33:57 +02:00
Hitonabi
efa642e676
Etappe 6: Sicherheit
...
- docker-compose.yml mit read_only: true, tmpfs, healthchecks
- API- und Worker-Dockerfiles mit minimalem Image
- requirements.txt für Python-Abhängigkeiten
2026-07-21 17:26:01 +02:00
Hitonabi
3e921fc0c9
Etappe 5: Auth + Rate-Limiting
...
- JWT-Auth (Access 15min/Refresh 7 Tage)
- Rate-Limiting (100/min pro Client/API-Key)
- API Key Management
- OAuth2 Password Scheme
2026-07-21 17:19:34 +02:00
Hitonabi
518155051f
Etappe 3: Metadaten-Lookup + Pre-Scan
...
- SQLite-Cache für API-Rate-Limits (LRU, 10k Einträge)
- TMDB/MusicBrainz/TheTVDB Clients
- Pre-Scan-Modul für TOC-Lesung ohne Ripping
- Metadaten-Preview UI
- Jellyfin-Formatierung (NFO + Images)
- API Endpoints für Lookup, Confirm, Format
2026-07-21 17:17:35 +02:00
Hitonabi
0cf5413ac0
Merge remote-tracking branch 'origin/main'
2026-07-21 17:10:48 +02:00
Hitonabi
a505415898
SAVEPOINT v1.2: UI läuft!
...
- Rippy UI auf Port 80
- Git Sync in Arcane
- Alle Container healthy
2026-07-21 17:07:54 +02:00
Arcane
25cba0e18d
UI: Port 80 + lucide-react
2026-07-21 15:07:36 +00:00
Arcane
596ded1a4a
postgres: Image von 16-slim auf 16
2026-07-21 14:58:22 +00:00
Hitonabi
4d1f613a1c
Etappe 5: API + Auth + WebUI — Erste Implementierung
...
- React-UI: Dashboard mit Stats, Geräte, Jobs
- API: /jobs und /devices endpoints
- CORS aktiviert für UI-Kommunikation
2026-07-21 16:52:30 +02:00
Hitonabi
90e6f81d98
tasks.py: detect_disc_type wieder importieren
2026-07-21 16:49:01 +02:00
Hitonabi
719aa9408d
tasks.py: detect_disc_type aus ripping.py importieren
2026-07-21 16:48:44 +02:00
Hitonabi
42f19a0806
ripping.py: HandBrakeCLI-Check + Typ-Erkennung
2026-07-21 16:48:32 +02:00
Hitonabi
9e73d065f9
Etappe 2: Ripping-Pipeline — Erste Implementierung
...
- DockerfileWorker: abcde, flac, ffmpeg, handbrake-cli installiert
- ripping.py: Ripping-Module für DVD/Blu-ray mit HandBrake
- tasks.py: Disc-Typ-Erkennung + passendes Ripping-Modul
- docker-compose.yml: Output-Verzeichnis /output hinzugefügt
- output/ Verzeichnis erstellt
WIP: CD-Ripping mit abcde noch nicht implementiert
2026-07-21 16:47:50 +02:00
Hitonabi
5d23b1e6c8
Etappe 1: Container-Infrastruktur + udev-Erkennung
...
- Docker Compose mit 5 Containern (api, worker, ui, postgres, redis)
- Basis-Dockerfiles für FastAPI, Celery, React/Vite, PostgreSQL, Redis
- udev-Regel + Python-Daemon für Disc-Einwurf-Erkennung
- Device-Resolver (UUID/Serial → /dev/disc/<uuid>)
- Celery-Worker mit Dummy-Job-Task (Disc-Erkennung)
- .env.example mit Umgebungsvariablen
- .gitignore für Docker, .env, node_modules
- README, SAVEPOINT, ROADMAP aktualisiert
2026-07-21 14:59:09 +02:00