9.3 KiB
9.3 KiB
Changelog
Alle nennenswerten Änderungen an Flimmer stehen in dieser Datei.
Das Format folgt Keep a Changelog, die Versionierung Semantic Versioning.
Unveröffentlicht
0.4.0 — 2026-09-01
Universen: zusammengehörige Titel, mehrere Reihenfolgen, ein Gesamtfortschritt.
Hinzugefügt
- Universen aus beliebigen Filmen und Serien — MCU, Star Wars, Wizarding World oder was auch immer zusammengehört.
- Mehrere Reihenfolgen je Universum. Die Erscheinungsreihenfolge wird aus den Erscheinungsdaten berechnet und nie gespeichert — sie stimmt damit immer. Weitere Reihenfolgen (Story-Chronologie, Einsteiger-Route) sind frei sortierbar, per Ziehen und über Pfeilknöpfe. Reines Drag & Drop wäre mit Tastatur nicht bedienbar und auf dem Handy fummelig.
- TMDB-Collections als Startpunkt: Reihen, die in der eigenen Bibliothek vorkommen, lassen sich mit einem Klick übernehmen.
- Universums-Detailseite mit nummerierter Liste, Gesamtfortschritt („4 von 7 abgeschlossen, 21 h 21 min gesehen"), hervorgehobenem „Als Nächstes dran" und der Restlaufzeit bis zum Ende des Universums. Bei Serien schrumpft die Restzeit anteilig mit den gesehenen Episoden.
- Teilen mit anderen Konten der Instanz, wahlweise nur zum Ansehen oder zum gemeinsamen Pflegen. Der Fortschritt ist dabei immer der des jeweiligen Betrachters — ein geteiltes Universum zeigt jeder Person ihren eigenen Stand. Löschen bleibt dem Besitzer vorbehalten.
- 12 weitere Tests für Reihenfolgen, Fortschrittsberechnung über Filme und Serien hinweg, Freigaben und die Rechteprüfung.
- Beispieluniversum im Seed: die Sternenpfad-Reihe mit fünf Filmen, zwei Serien und einer abweichenden Story-Chronologie.
Behoben
- Die Posterkachel zog über
lib/images.tsdie serverseitige Cache-Logik in den Browser-Bundle, sobald sie aus einer Client-Komponente heraus gerendert wurde — der Build brach ab, sobald eine solche Seite dazukam. Die reine URL-Bildung liegt jetzt inlib/image-url.ts, der Dateicache bleibt serverseitig.
0.3.0 — 2026-09-01
Das Kernstück: Bibliothek, Status und Episodenfortschritt.
Hinzugefügt
- Bibliothek als Posterraster mit Volltextsuche und Filtern nach Status, Typ, Genre, Streamingdienst und Tag; Sortierung nach zuletzt aktualisiert, hinzugefügt, Titel, Bewertung oder Erscheinungsjahr. Der gesamte Filterstand steht in der URL und ist damit teilbar.
- Fünf Status je Eintrag (Schaue gerade, Pausiert, Abgeschlossen, Abgebrochen, Watchlist). Der Status ergibt sich beim Abhaken von selbst: die erste Episode startet einen Titel, die letzte schließt ihn ab. Pausiert und Abgebrochen bleiben unangetastet — wer bewusst pausiert hat, will das nicht durch eine Sichtung aufgehoben bekommen.
- Episodenfortschritt: einzeln abhaken, ganze Staffel auf einmal, „bis hierhin gesehen" für den Einstieg mitten in einer Staffel, und ein „+1 Episode"-Knopf, der genau die nächste offene Episode nimmt. Häkchen reagieren sofort und werden zurückgedreht, wenn der Server widerspricht; beim Abhaken glimmt die Zeile einmal warm auf.
- „Als Nächstes dran" mit Episodencode, Titel und Ausstrahlungsdatum; Fortschritt in Prozent auf Basis der echten Episodenzahl, dazu die verbleibende Laufzeit.
- Rewatch-Zählung: ein neuer Durchlauf setzt den Fortschritt zurück, die Sichtungen des vorherigen bleiben für die Statistik erhalten. Bei Filmen zählt jeder Durchlauf einzeln.
- Rückgängig für jede Sichtungsaktion — die Rückmeldung am unteren Rand nennt, was passiert ist, und nimmt es auf Klick zurück.
- Pro Eintrag: Bewertung von 1 bis 10, Notizfeld, eigene Tags und das Feld „wo schaue ich das", das beim Aufnehmen einen Vorschlag aus der Streaming-Verfügbarkeit erhält und jederzeit überschreibbar ist.
- Papierkorb statt hartem Löschen: entfernte Titel bleiben 30 Tage liegen und behalten dabei ihren Fortschritt. Wird ein Titel erneut aufgenommen, lebt derselbe Eintrag wieder auf.
- Titel selbst anlegen für alles, was TMDB nicht kennt. Solche Einträge haben keine TMDB-ID und werden vom Abgleich nie angefasst.
- Seed mit Beispielbibliothek: erfundener Katalog aus 8 Serien und 10 Filmen samt lokal erzeugten Postern, dazu 18 Bibliothekseinträge und 85 Sichtungen über die letzten Monate verteilt.
- 21 Tests decken Aufnehmen, Abhaken, Fortschritt, Rewatch, Papierkorb und den Zugriffsschutz zwischen Nutzern ab.
Geändert
- Die Detailseite liegt jetzt unter
/titel/<id>und hängt an der internen Titel-ID statt an der TMDB-ID — nur so bekommen manuell angelegte Titel dieselbe Seite. Treffer aus der Suche laufen über/tmdb/<art>/<id>, das den Titel holt und weiterleitet. - Die Zahl der Build-Worker ist auf vier begrenzt: mit einem Worker je Kern stürzte der Build auf einer 18-Kern-Maschine reproduzierbar ab, weil jeder Worker eine eigene Prisma-Engine hochzieht.
0.2.0 — 2026-09-01
Metadaten: Flimmer spricht mit TMDB.
Hinzugefügt
- TMDB-Anbindung für Suche (gemeinsam über Serien und Filme oder getrennt), Detailabruf, Staffeln und Episoden, offizielle Collections sowie die Streaming-Verfügbarkeit in der eingestellten Region. Zugang wahlweise über den klassischen API-Schlüssel oder das Bearer-Token.
- Gemeinsamer Katalog: Titel werden über (Typ, TMDB-ID) dedupliziert — bei
mehreren Nutzern liegt jede Serie samt Episodenliste nur einmal in der
Datenbank.
ensureTitleholt einen Titel nur, wenn er fehlt oder veraltet ist, und fällt bei einem TMDB-Ausfall auf den lokalen Stand zurück. - Bild-Cache: Poster und Hintergrundbilder werden einmal geholt und danach
über
/api/imagevom eigenen Server ausgeliefert. Größe und Pfad werden streng geprüft, damit der Endpunkt kein offener Proxy wird. - Suchseite mit Typfilter; die Anfrage steht in der URL und ist damit teilbar. Getippte Eingaben werden kurz gesammelt, bevor gesucht wird.
- Detailseite je Titel mit Backdrop, Kopfdaten, Genres, Streamingdiensten (mit den Akzentfarben der großen Anbieter) und aufklappbaren Staffeln samt Episodenliste.
- Testlauf ohne Schlüssel: nachgebildete TMDB-Antworten unter
tests/undnpm testprüfen den kompletten Importpfad gegen eine echte Datenbank.
Behoben
importSeriesgab den Titel zurück, bevor Staffel- und Episodenzähler geschrieben waren — die Zähler standen dadurch auf 0.- Poster und Dienstlogos zeigten das kaputte Bildsymbol des Browsers, wenn ein
TMDB-Pfad ins Leere lief. Die Rückfalldarstellung liegt jetzt dauerhaft
darunter statt an einem
onError-Handler zu hängen, der bei einem früh gescheiterten Bild gar nicht mehr feuert.
0.1.0 — 2026-09-01
Erste lauffähige Etappe: Gerüst, Marke, Datenmodell und Anmeldung.
Hinzugefügt
- Projektgerüst mit Next.js 16 (App Router), TypeScript, Tailwind CSS v4
und
standalone-Build für schlanke Container. - Marke Flimmer: Logo als SVG in drei Varianten (Bildmarke, Bildmarke mit Wortmarke, monochrom) plus Maskable-Variante. Die Wortmarke ist aus Pfaden konstruiert und braucht keine installierte Schrift.
- Icon-Generator (
npm run icons): erzeugt Favicon (SVG und ICO), PWA-Icons in sieben Größen, Maskable-Icons, Apple-Touch-Icon und OG-Bild aus den SVG-Quellen. - Design-Tokens als CSS-Variablen, über
@theme inlinean Tailwind angebunden. Dunkles Standard-Theme und heller Modus mit Umschalter (Dunkel / Hell / System), ohne Aufblitzen beim Laden. Alle Farbkombinationen erfüllen WCAG AA; getrennte Verläufe für Flächen und Text sorgen dafür, dass auch der Signaturverlauf im hellen Modus lesbar bleibt. - Datenmodell (Prisma, PostgreSQL) für Konten, Katalog (Titel, Staffeln, Episoden, Streamingdienste), persönliches Tracking, Universen mit Reihenfolgen sowie Benachrichtigungen und Hintergrundläufe.
- Authentifizierung: Registrierung und Anmeldung mit E-Mail und Passwort (bcrypt), Sitzungen als opake Token in der Datenbank mit httpOnly-Cookie. Der erste registrierte Zugang wird automatisch Administrator; die Registrierung lässt sich instanzweit abschalten.
- Optionales SSO über OIDC (Authorization Code mit PKCE) für Authelia, Keycloak, Authentik und Verwandte — per Umgebungsvariablen aktivierbar, mit Zuordnung zu vorhandenen Konten über die E-Mail-Adresse.
- API-Schlüssel je Nutzer als Grundlage für die spätere REST-API.
- Docker-Compose-Setup für den Selbstbetrieb (App und PostgreSQL, persistente Volumes, Healthcheck) samt Entrypoint, der ausstehende Migrationen beim Start einspielt.
- Healthcheck unter
/api/health, der auch die Datenbank prüft. - PWA-Manifest mit allen Icon-Größen.
- Oberflächentexte auf Deutsch, gebündelt in
src/i18nund so aufgebaut, dass weitere Sprachen als zusätzliche Datei dazukommen können. - Seed-Skript mit Demo-Konten sowie README und Design-Dokumentation.