Streaming-Verfügbarkeit beantwortet nur die halbe Frage: manche Filme laufen nirgends mehr, die hat man gekauft und liegen zu Hause — in Jellyfin, Plex, Emby, auf dem NAS oder als Scheibe. Bewusst getrennt vom Feld „wo schaue ich das": das eine sagt, wo ein Titel gerade läuft, und das ändert sich ständig; das andere sagt, was einem gehört, und das bleibt. Auf der Detailseite steht die Sammlung deshalb vor der Verfügbarkeit — was man hat, ist die verlässlichere Antwort. Durchgezogen bis in Filter, Export, CSV-Import und REST-API.
8.8 KiB
8.8 KiB
DEVLOG — Entwicklungszeiterfassung Flimmer
Alle Zeiten per date-Befehl erfasst (Europe/Berlin), nicht geschätzt.
Etappe 1 — Projektgerüst, Branding, Docker, DB-Schema, Auth (v0.1.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 1.1 | 18:09 | 18:12 | 3 min | Rückfragen geklärt, Repo und Werkzeugkette geprüft, Projekt-CLAUDE.md als Gedächtnis angelegt |
| 1.2 | 18:12 | 18:22 | 10 min | package.json, TypeScript-, Next- und PostCSS-Konfiguration; Abhängigkeiten installiert (Aufräumen nach hängendem npm-Prozess) |
| 1.3 | 18:22 | 18:26 | 4 min | Design-Tokens in globals.css: Farbwelt dunkel/hell, Verläufe, Bausteine, Mikro-Animation |
| 1.4 | 18:26 | 18:33 | 7 min | Logo entworfen: Bildmarke, Wortmarke aus Pfaden, Lockup, monochrom, Maskable; Icon-Generator und alle Rasterableitungen |
| 1.5 | 18:33 | 18:36 | 3 min | Prisma-Schema (22 Modelle), Umstellung auf Prisma 7 mit Treiber-Adapter, erste Migration |
| 1.6 | 18:36 | 18:40 | 4 min | Kernbibliotheken: Umgebungsprüfung, DB-Singleton, Auth (Passwörter, Sitzungen, API-Schlüssel), Instanz-Einstellungen, i18n |
| 1.7 | 18:40 | 18:44 | 4 min | App-Hülle: Layout mit Theme-Bootstrap, Header, Navigation, Nutzermenü, Anmeldung und Registrierung, Healthcheck; visuelle Kontrolle in beiden Themes und Kontrastkorrektur für den hellen Modus |
| 1.8 | 18:44 | 18:47 | 3 min | Docker-Setup (Dockerfile, Compose, Entrypoint mit Migrationslauf), OIDC-Anbindung, Seed-Skript, README, Design-Dokumentation, Changelog |
Etappe 1 gesamt: 38 min (2026-09-01, 18:09 – 18:47)
Etappe 2 — TMDB-Anbindung (v0.2.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 2.1 | 18:47 | 18:51 | 4 min | TMDB-Client: Suche, Serien-, Film- und Staffelabruf, Collections, Anbieterlisten; kurzer Antwortspeicher |
| 2.2 | 18:51 | 18:54 | 3 min | Katalogschicht: Import von Titeln, Staffeln, Episoden und Streamingdiensten; Bild-Cache mit eigenem Ausliefer-Endpunkt |
| 2.3 | 18:54 | 18:57 | 3 min | Oberfläche: Suchseite mit Typfilter, Detailseite mit Staffeln, Poster- und Anbieterkomponenten |
| 2.4 | 18:57 | 19:01 | 4 min | Nachgebildete TMDB-Antworten und Testlauf (7 Tests); dabei zwei Fehler gefunden und behoben: veraltete Zähler nach dem Serienimport, kaputtes Bildsymbol statt Rückfallkachel |
Etappe 2 gesamt: 14 min (2026-09-01, 18:47 – 19:01)
Etappe 3 — Kern-Tracking: Bibliothek, Status, Episodenfortschritt (v0.3.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 3.1 | 19:01 | 19:06 | 5 min | Domänenlogik: Aufnehmen, Status, Sichtungen, Rewatch-Durchläufe, Fortschritt, nächste Episode |
| 3.2 | 19:06 | 19:10 | 4 min | 14 Tests dazu; dabei ein Fehler im parallelen Testlauf gefunden (Testdateien räumten sich gegenseitig die Fixtures weg) |
| 3.3 | 19:10 | 19:14 | 4 min | Server-Aktionen, Rückmeldungen mit Rückgängig, Bedienelemente (Status, Bewertung, Notizen, Tags, Episodenliste, „+1 Episode") |
| 3.4 | 19:14 | 19:17 | 3 min | Bibliotheksseite mit Filtern und Facetten, Papierkorb, Umbau der Detailseite auf die interne Titel-ID |
| 3.5 | 19:17 | 19:23 | 6 min | Beispieldaten: erfundener Katalog mit lokal erzeugten Postern, gelebte Bibliothek mit Sichtungshistorie; Klickweg im Browser geprüft (+1 Episode, Rückgängig) |
| 3.6 | 19:23 | 19:25 | 2 min | Manuelles Anlegen ohne TMDB-Treffer; Build-Absturz durch zu viele Worker eingegrenzt und behoben |
Etappe 3 gesamt: 24 min (2026-09-01, 19:01 – 19:25)
Etappe 4 — Universen mit Reihenfolgen und Fortschritt (v0.4.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 4.1 | 19:25 | 19:30 | 5 min | Domänenlogik: Universen, berechnete Erscheinungsreihenfolge, frei sortierbare Reihenfolgen, Fortschritt aus Sicht des Betrachters, Freigaben |
| 4.2 | 19:30 | 19:33 | 3 min | 12 Tests dazu; eine falsche Testannahme zur Reihenfolge korrigiert (nicht den Code) |
| 4.3 | 19:33 | 19:36 | 3 min | Server-Aktionen, sortierbare Liste mit Ziehen und Pfeilknöpfen, Reihenfolge-Umschalter, Aufnehmen, Teilen |
| 4.4 | 19:36 | 19:39 | 3 min | Seiten für Übersicht, Anlegen und Detailansicht; Build-Fehler durch server-only im Browser-Bundle gefunden und behoben; Umsortieren im Browser geprüft |
Etappe 4 gesamt: 14 min (2026-09-01, 19:25 – 19:39)
Etappe 5 — Dashboard, Kalender, Statistiken (v0.5.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 5.1 | 19:39 | 19:43 | 4 min | Auswertungsschicht: Weiterschauen, kommende Episoden, neu verfügbar, Gesamtzahlen, Monatsverlauf, Verteilungen, Jahresrückblick |
| 5.2 | 19:43 | 19:46 | 3 min | Diagrammfarben gegen die Prüfungen auf Helligkeit, Sättigung, Farbfehlsichtigkeit und Kontrast gerechnet; SVG-Diagramme und Verteilungsbalken gebaut |
| 5.3 | 19:46 | 19:50 | 4 min | Seiten für Übersicht, Kalender und Statistik |
| 5.4 | 19:50 | 19:54 | 4 min | Drei Fehler gefunden und behoben: leeres Monatsdiagramm durch Zeitzonenversatz, Hydrationsbruch durch SVG-Titel, Kalender ohne abgeschlossene Serien; 7 Tests nachgezogen |
Etappe 5 gesamt: 15 min (2026-09-01, 19:39 – 19:54)
Etappe 6 — Benachrichtigungen, Sync, Import/Export, REST-API, PWA (v0.6.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 6.1 | 19:54 | 19:58 | 4 min | Benachrichtigungen über vier Wege samt E-Mail-Vorlage; Hintergrundlauf mit Zeitplan und Cron-Endpunkt |
| 6.2 | 19:58 | 20:02 | 4 min | Import (Trakt, CSV) und Export (CSV, JSON) |
| 6.3 | 20:02 | 20:07 | 5 min | REST-API /api/v1 mit API-Schlüsseln, OpenAPI-Beschreibung |
| 6.4 | 20:07 | 20:12 | 5 min | Einstellungsseiten, Verwaltung, öffentliches Profil; Service Worker und Offline-Seite |
| 6.5 | 20:12 | 20:15 | 3 min | 9 Tests für Import, Export, Papierkorb und Doppelversandschutz |
| 6.6 | 20:15 | 20:20 | 5 min | TMDB-Ersatz für Screenshots, 18 Aufnahmen, Verkleinerung auf WebP (13 MB → 0,6 MB) |
| 6.7 | 20:20 | 20:25 | 5 min | docs/ANLEITUNG.md und docs/API.md, README erweitert, API von Hand durchgetestet |
Etappe 6 gesamt: 31 min (2026-09-01, 19:54 – 20:25)
Nach der Abnahme (v0.7.0)
| # | Start | Ende | Dauer | Arbeitsschritt |
|---|---|---|---|---|
| 7.1 | 20:25 | 20:50 | 25 min | Docker-Image zum ersten Mal wirklich gebaut und gestartet; zwei Fehler behoben (fehlende Prisma-Abhängigkeiten im Laufzeitimage, Schriftabruf beim Bauen), Gitea-Workflows, Erscheinungsmeldung nachgezogen |
| 7.2 | 20:50 | 21:05 | 15 min | Compose-Stack von null verifiziert: Migration, erstes Konto wird Administrator, Verwaltung erreichbar |
| 7.3 | 21:05 | 21:16 | 11 min | Rückfrage aus dem Betrieb umgesetzt: „hab ich" für die eigene Sammlung (Jellyfin, Plex, NAS, Blu-ray) — Schema, Logik, Oberfläche, Filter, Import/Export, API, Tests, Anleitung |
Nacharbeiten gesamt: 51 min (2026-09-01, 20:25 – 21:16)
Gesamtübersicht
| Etappe | Version | Dauer |
|---|---|---|
| 1 — Gerüst, Branding, Docker, Schema, Auth | 0.1.0 | 38 min |
| 2 — TMDB-Anbindung | 0.2.0 | 14 min |
| 3 — Kern-Tracking | 0.3.0 | 24 min |
| 4 — Universen | 0.4.0 | 14 min |
| 5 — Dashboard, Kalender, Statistik | 0.5.0 | 15 min |
| 6 — Benachrichtigungen, Sync, Import/Export, API, PWA | 0.6.0 | 31 min |
| Nacharbeiten — Docker verifiziert, eigene Sammlung | 0.7.0 | 51 min |
Gesamtentwicklungszeit: 3 h 07 min (187 min, 2026-09-01, 18:09 – 21:16)
Womit die Zeit verging
| Anteil | Bereich |
|---|---|
| ~35 min | Oberfläche und Design (Branding, Komponenten, Seiten) |
| ~30 min | Domänenlogik (Tracking, Universen, Statistik, Abgleich) |
| ~25 min | Schnittstellen nach außen (TMDB, REST-API, Import/Export, Benachrichtigungen) |
| ~25 min | Tests — 52 Stück, die unterwegs acht echte Fehler gefunden haben |
| ~15 min | Dokumentation, Screenshots, Changelog, Releases |
| ~11 min | Gerüst, Docker, Datenmodell, Werkzeugkette |
Fehler, die die Tests gefunden haben
importSeriesgab veraltete Staffel- und Episodenzähler zurück.- Testdateien räumten sich im parallelen Lauf gegenseitig die Fixtures weg.
- Das Monatsdiagramm blieb wegen eines Zeitzonenversatzes leer.
- Abgeschlossene, aber weiterlaufende Serien verschwanden aus dem Kalender.
- Poster zeigten das kaputte Bildsymbol statt der Rückfallkachel.
- Eine
server-only-Kette landete im Browser-Bundle und brach den Build. - Der SVG-Titel eines Diagramms brach die Hydration.
- Eine Testerwartung zur Reihenfolge war falsch — nicht der Code.
Fehler, die erst der echte Containerstart zeigte
- Dem Laufzeitimage fehlten transitive Abhängigkeiten der Prisma-CLI, die Migration lief nicht an. Die CLI wird jetzt in einer eigenen Build-Stufe vollständig installiert.
- npm blockiert seit Version 11 Install-Skripte; ohne Freigabe fehlte die plattformpassende Prisma-Engine.
next/font/googlelud die Schrift beim Bauen herunter und ließ den Build im Container hängen. Die Schrift liegt jetzt im Repository.