From 9ecaaf03a9b467debb656cdecc92f89c119538e1 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Tue, 1 Sep 2026 19:00:14 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20Changelog,=20Release-Notes=20und=20DEVL?= =?UTF-8?q?OG=20f=C3=BCr=200.2.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 37 ++++++++++++++++++++++++++++++++++++- CLAUDE.md | 21 ++++++++++++++++++++- DEVLOG.md | 16 +++++++++++++++- releases/v0.2.0.md | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 104 insertions(+), 3 deletions(-) create mode 100644 releases/v0.2.0.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 458fa0c..21c0b40 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,40 @@ die Versionierung [Semantic Versioning](https://semver.org/lang/de/). ## [Unveröffentlicht] +## [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. @@ -46,5 +80,6 @@ Erste lauffähige Etappe: Gerüst, Marke, Datenmodell und Anmeldung. 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.1.0...HEAD +[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/flimmer/compare/v0.2.0...HEAD +[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 diff --git a/CLAUDE.md b/CLAUDE.md index 9e03a9d..24b3e75 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -80,9 +80,28 @@ Statistiken, Benachrichtigungen, REST-API, PWA. Oberflächensprache **Deutsch**. - [ ] Optional per ENV: OIDC/SSO (Authelia, Keycloak) - [ ] Registrierung durch Admin abschaltbar; erster Nutzer wird Admin +## Wichtige technische Merkposten + +- **Next 16**: Request-APIs sind async (`cookies()`, `headers()`, `params`, + `searchParams`). `middleware.ts` heißt jetzt `proxy.ts`. Turbopack ist Standard. + Breaking Changes stehen in `node_modules/next/dist/docs/01-app/02-guides/upgrading/version-16.md`. +- **Prisma 7**: keine `url` im Schema — Treiber-Adapter (`@prisma/adapter-pg`) + im Client, URL in `prisma.config.mjs`. Generator ist `prisma-client` + (TypeScript-Ausgabe nach `src/generated/prisma`, gitignored). + Config bewusst `.mjs`, damit die CLI im Produktionsimage ohne TS-Loader läuft. +- **Tailwind v4**: `@theme inline` reicht die `--fl-*`-Variablen durch, + `@custom-variant dark` hängt an `[data-theme="dark"]`. +- **Zwei Verläufe**: `--fl-gradient` für Flächen, `--fl-gradient-ink` für Text + (im Light Mode abgedunkelt, sonst kein AA). Logo-Stops `--fl-brand-1/2/3`. +- **Dev-Umgebung**: Postgres auf `localhost:5439` (`docker-compose.dev.yml`), + Dev-Server auf **Port 3011** (3000 und 3010 sind von anderen Projekten belegt). +- **Screenshots**: `node scripts/shot.mjs [w] [h] [theme]`. +- Next hängt selbst einen Block an diese Datei an — der bleibt drin. + ## Fortschritt -- Stand: **Etappe 1 läuft** (Start 2026-09-01 18:09) +- ✅ **Etappe 1** (v0.1.0, released) — Gerüst, Branding, Docker, Schema, Auth. 38 min. +- ⏳ **Etappe 2** — TMDB-Anbindung diff --git a/DEVLOG.md b/DEVLOG.md index 7f22a77..d3820b2 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -21,10 +21,24 @@ Alle Zeiten per `date`-Befehl erfasst (Europe/Berlin), nicht geschätzt. --- +## 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) + +--- + ## 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 | -**Bisher gesamt: 38 min** +**Bisher gesamt: 52 min** diff --git a/releases/v0.2.0.md b/releases/v0.2.0.md new file mode 100644 index 0000000..c059e39 --- /dev/null +++ b/releases/v0.2.0.md @@ -0,0 +1,33 @@ +# Flimmer 0.2.0 + +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.