Files
flimmer/CHANGELOG.md
T

139 lines
7.4 KiB
Markdown

# Changelog
Alle nennenswerten Änderungen an Flimmer stehen in dieser Datei.
Das Format folgt [Keep a Changelog](https://keepachangelog.com/de/1.1.0/),
die Versionierung [Semantic Versioning](https://semver.org/lang/de/).
## [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.
[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/flimmer/compare/v0.3.0...HEAD
[0.3.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.3.0
[0.2.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.2.0
[0.1.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.1.0