diff --git a/CLAUDE.md b/CLAUDE.md
index 12a5e90..dfde07a 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -14,19 +14,31 @@ Selbst-gehostete Anwendung: YouTube-Videos per Browser Extension erfassen, auf e
Drei Komponenten:
-### Browser Extension (JavaScript, Manifest V3)
-- Content Script liest YouTube-DOM aus, extrahiert Videodaten
-- Background Script sendet Daten an Server (POST /videos)
+### Browser Extension (`browser_extension/`)
+- **Manifest V2**, Firefox-kompatibel (`browser.*` API)
+- `content.js` — extrahiert Videodaten direkt aus dem YouTube-DOM:
+ - `yt-lockup-view-model` (Homepage, Abos, Kanalseiten)
+ - `ytd-video-renderer` (Suchergebnisse)
+ - Debounced MutationObserver (250ms) fuer dynamisch geladene Cards
+ - `yt-navigate-finish` Event-Listener fuer SPA-Navigation
+ - Deduplizierung ueber `sentUrls` Set
+- `background.js` — empfaengt Nachrichten vom Content Script, sendet POST an Server
+- Laden via `about:debugging#/runtime/this-firefox` → "Temporaeres Add-on laden" → `manifest.json`
-### Server (Python, FastAPI, SQLite, yt-dlp + ffmpeg)
-- REST API empfängt Videodaten, liefert Videolisten, triggert Downloads, streamt Videos
-- yt-dlp lädt Videos von YouTube, speichert auf dem Server
-- Beim Streamen wird das Video automatisch heruntergeladen, falls noch nicht geschehen
+### Server (`backend/`)
+- **Python, FastAPI, SQLAlchemy, SQLite** (`videos/youtubeapp.db`)
+- **yt-dlp + ffmpeg** fuer Video-Download
+- Dockerisiert: `docker compose up --build -d` im `backend/` Verzeichnis
+- Laeuft auf `http://localhost:8000`
+- Download-Service speichert Videos unter `/videos/{id}.mp4`
+- Beim Streamen wird automatisch heruntergeladen falls noetig
-### App (Kotlin, Android/Android TV)
-- Screens: AllVideos, Downloaded, VideoDetail, VideoPlayer
-- Videos werden vom Server gestreamt, optional auf das Gerät heruntergeladen
-- Lokale Videos werden bevorzugt abgespielt, sonst Stream
+### App (`app/`)
+- **Kotlin, Jetpack Compose**, Android/Android TV
+- Gradle-Projekt, Modul `frontend`
+- Aktueller Stand: Skeleton (nur `MainActivity` mit Platzhalter-Text)
+- Geplante Screens: AllVideos, Downloaded, VideoDetail, VideoPlayer
+- Emulator: Android Studio → Device Manager → Pixel 6a, API 35
## API Endpoints
@@ -37,10 +49,36 @@ Drei Komponenten:
- `GET /videos/{id}/stream` — Video streamen
- `GET /videos/{id}/file` — Video-Datei zum Download auf Client ausliefern
+## Projektstruktur
+
+```
+backend/
+ main.py — FastAPI App, CORS, Startup
+ database.py — SQLAlchemy Engine, Session, Base
+ models.py — Video Model (id, title, youtuber, thumbnail_url, youtube_url, file_path, created_at)
+ schemas.py — Pydantic Schemas (VideoCreate, VideoResponse)
+ routes/videos.py — Alle API-Routen
+ services/
+ video_service.py — CRUD-Operationen
+ download_service.py — yt-dlp Download-Logik
+ Dockerfile — Python 3.12 + ffmpeg
+ docker-compose.yml — Service-Definition, Port 8000, Volume /videos
+
+browser_extension/
+ manifest.json — Manifest V2, Permissions fuer youtube.com + localhost
+ content.js — DOM-basierte Video-Extraktion + MutationObserver
+ background.js — POST an Server
+
+app/
+ frontend/src/main/java/com/youtubeapp/
+ MainActivity.kt — Einstiegspunkt (noch Skeleton)
+```
+
## Entscheidungen
-- Kein Jellyfin — erfüllt nicht die Anforderung, Videos vor dem Download aufzulisten
-- Kein PostgreSQL/MySQL — SQLite reicht für den Prototyp
+- Kein Jellyfin — erfuellt nicht die Anforderung, Videos vor dem Download aufzulisten
+- Kein PostgreSQL/MySQL — SQLite reicht fuer den Prototyp
- Keine Benutzerprofile im Prototyp
- Videos werden auf dem Server gespeichert, Client speichert nur bei explizitem Download
+- DOM-Extraktion statt ytInitialData-Parsing — funktioniert auch bei SPA-Navigation und Scrollen
- Sprache der Dokumentation: Deutsch
diff --git a/app/build/reports/problems/problems-report.html b/app/build/reports/problems/problems-report.html
index d2c63dc..5febd65 100644
--- a/app/build/reports/problems/problems-report.html
+++ b/app/build/reports/problems/problems-report.html
@@ -650,12 +650,12 @@ code + .copy-button {