Files
flimmer/CHANGELOG.md
T

7.4 KiB

Changelog

Alle nennenswerten Änderungen an Flimmer stehen in dieser Datei.

Das Format folgt Keep a Changelog, die Versionierung Semantic Versioning.

Unveröffentlicht

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. ensureTitle holt 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/image vom 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/ und npm test prüfen den kompletten Importpfad gegen eine echte Datenbank.

Behoben

  • importSeries gab 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 inline an 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/i18n und so aufgebaut, dass weitere Sprachen als zusätzliche Datei dazukommen können.
  • Seed-Skript mit Demo-Konten sowie README und Design-Dokumentation.