From ff9d380d42fb3fc89be7729180ec29a8681f7753 Mon Sep 17 00:00:00 2001 From: Florian Wilde Date: Tue, 1 Sep 2026 20:25:13 +0200 Subject: [PATCH] docs: Changelog, Release-Notes und DEVLOG fuer 0.6.0 --- CHANGELOG.md | 50 +++++++++++++++++++++++++++++++++++++++++++++- CLAUDE.md | 21 +++++++++++++++++-- DEVLOG.md | 40 ++++++++++++++++++++++++++++++++++++- releases/v0.6.0.md | 46 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 153 insertions(+), 4 deletions(-) create mode 100644 releases/v0.6.0.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 17aa390..2e78b7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,53 @@ die Versionierung [Semantic Versioning](https://semver.org/lang/de/). ## [Unveröffentlicht] +## [0.6.0] — 2026-09-01 + +Der Rest: Benachrichtigungen, Abgleich, Import und Export, Schnittstelle, PWA +— und eine bebilderte Anleitung. + +### Hinzugefügt + +- **Benachrichtigungen** über vier Wege: E-Mail (SMTP), ntfy, Gotify und ein + generischer Webhook, der zugleich Discord, Slack und Mattermost bedient. + Jeder Nutzer richtet seine Kanäle selbst ein, kann sie einzeln stummschalten + und mit einer Testnachricht ausprobieren. Dieselbe Meldung geht nie zweimal + raus — auch ein Fehlversuch wird protokolliert, sonst spammt der nächste Lauf + den Kanal voll, sobald er wieder erreichbar ist. Die E-Mail-Vorlage trägt + Logo und Farbwelt von Flimmer. +- **Täglicher Abgleich**: frischt laufende Serien bei TMDB auf, meldet neue + Episoden und neu verfügbare Watchlist-Titel, räumt Papierkorb und abgelaufene + Sitzungen. Eingebauter Zeitplan über `ENABLE_SCHEDULER` und `SYNC_HOUR`, von + außen anstoßbar über `/api/cron/sync` mit `CRON_SECRET`, und in der + Verwaltung per Knopfdruck. Ein einzelner Titel kann den Lauf nicht kippen. +- **Import** aus Trakt.tv (JSON, egal ob Watchlist, History, Ratings oder + Collection) und aus CSV mit Komma oder Semikolon. Der Import überschreibt + nichts: was schon in der Bibliothek liegt, bleibt unangetastet. +- **Export** der eigenen Daten als CSV oder als JSON mit allen Sichtungen und + Universen. +- **REST-API** unter `/api/v1` mit persönlichen API-Schlüsseln: Bibliothek + lesen und pflegen, Episoden abhaken und zurücknehmen, suchen, Kalender, + Statistik, Universen, Export. Beschreibung als OpenAPI 3.1 unter + `/api/v1/openapi.json`, dazu `docs/API.md` mit Beispielen. +- **Einstellungsseiten** für Profil, Region, Passwort, Benachrichtigungen, + API-Schlüssel sowie Import und Export. +- **Verwaltungsbereich**: Instanzname, Registrierung öffnen und schließen, + öffentliche Profile erlauben, Konten sperren und Rechte vergeben, Abgleich + anstoßen und der Zustand der Instanz auf einen Blick. Die letzte + Administration lässt sich nicht entmachten. +- **Öffentliche Profilseite** unter `/u/` — Zahlen und zuletzt + Gesehenes, aber keine Notizen, keine Watchlist, keine E-Mail-Adresse. + Abschaltbar durch den Nutzer *und* instanzweit durch den Betreiber. +- **PWA-Feinschliff**: eigener Service Worker (Poster aus dem Zwischenspeicher, + Seiten zuerst aus dem Netz, Offline-Rückfall) und eine Offline-Seite. +- **`TMDB_BASE_URL`** für Instanzen hinter einem eigenen Proxy — und für den + mitgelieferten TMDB-Ersatz `scripts/tmdb-stub.mjs`, mit dem sich die Suche + ohne Schlüssel aus den Beispieldaten ausprobieren lässt. +- **Bebilderte Anleitung** `docs/ANLEITUNG.md` mit 18 Screenshots aus der + laufenden Instanz, aufgenommen von `npm run screenshots`. +- **9 weitere Tests** für CSV- und Trakt-Import, Export, das Aufräumen des + Papierkorbs und den Schutz vor Doppelversand — zusammen 49. + ## [0.5.0] — 2026-09-01 Übersicht, Kalender und Statistik. @@ -214,7 +261,8 @@ 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.5.0...HEAD +[Unveröffentlicht]: https://git.wilde-server.de/florian.wilde/flimmer/compare/v0.6.0...HEAD +[0.6.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.6.0 [0.5.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.5.0 [0.4.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.4.0 [0.3.0]: https://git.wilde-server.de/florian.wilde/flimmer/releases/tag/v0.3.0 diff --git a/CLAUDE.md b/CLAUDE.md index 24b3e75..dde85d8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -100,8 +100,25 @@ Statistiken, Benachrichtigungen, REST-API, PWA. Oberflächensprache **Deutsch**. ## Fortschritt -- ✅ **Etappe 1** (v0.1.0, released) — Gerüst, Branding, Docker, Schema, Auth. 38 min. -- ⏳ **Etappe 2** — TMDB-Anbindung +- ✅ **Etappe 1** (v0.1.0) — Gerüst, Branding, Docker, Schema, Auth. 38 min. +- ✅ **Etappe 2** (v0.2.0) — TMDB: Suche, Import, Episoden, Bild-Cache. 14 min. +- ✅ **Etappe 3** (v0.3.0) — Bibliothek, Status, Episodenfortschritt, Papierkorb. 24 min. +- ✅ **Etappe 4** (v0.4.0) — Universen mit Reihenfolgen, Freigaben. 14 min. +- ✅ **Etappe 5** (v0.5.0) — Übersicht, Kalender, Statistik. 15 min. +- ✅ **Etappe 6** (v0.6.0) — Benachrichtigungen, Abgleich, Import/Export, REST-API, PWA, Anleitung. 31 min. + +**Alle sechs Etappen abgeschlossen. Gesamtzeit: 2 h 16 min.** + +### Nützliches für spätere Arbeiten +- Suche ohne TMDB-Schlüssel ausprobieren: + `npm run tmdb:stub` und dann + `TMDB_API_KEY=stub TMDB_BASE_URL=http://127.0.0.1:3099/3 PORT=3011 npm run dev` +- Screenshots neu aufnehmen: `npm run screenshots` (nimmt auf und verkleinert) +- `npm test` läuft seriell gegen die Dev-Datenbank, braucht keinen TMDB-Schlüssel +- Deutsche Anführungszeichen (`„…"`) niemals in JS-**String-Literalen** — + das ASCII-Schlusszeichen beendet den String. In JSX-Text und Kommentaren ok. +- Heredocs im Bash-Tool sind bei langen TSX-Dateien unzuverlässig — dann das + Write-Werkzeug benutzen. diff --git a/DEVLOG.md b/DEVLOG.md index e87fc79..84a06e3 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -75,6 +75,22 @@ Alle Zeiten per `date`-Befehl erfasst (Europe/Berlin), nicht geschätzt. --- +## 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) + +--- + ## Gesamtübersicht | Etappe | Version | Dauer | @@ -84,5 +100,27 @@ Alle Zeiten per `date`-Befehl erfasst (Europe/Berlin), nicht geschätzt. | 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 | -**Bisher gesamt: 105 min** +**Gesamtentwicklungszeit: 2 h 16 min** (136 min, 2026-09-01, 18:09 – 20:25) + +### 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) | +| ~20 min | Tests — 49 Stück, die unterwegs sieben echte Fehler gefunden haben | +| ~15 min | Dokumentation, Screenshots, Changelog, Releases | +| ~11 min | Gerüst, Docker, Datenmodell, Werkzeugkette | + +### Fehler, die die Tests gefunden haben + +1. `importSeries` gab veraltete Staffel- und Episodenzähler zurück. +2. Testdateien räumten sich im parallelen Lauf gegenseitig die Fixtures weg. +3. Das Monatsdiagramm blieb wegen eines Zeitzonenversatzes leer. +4. Abgeschlossene, aber weiterlaufende Serien verschwanden aus dem Kalender. +5. Poster zeigten das kaputte Bildsymbol statt der Rückfallkachel. +6. Eine `server-only`-Kette landete im Browser-Bundle und brach den Build. +7. Der SVG-Titel eines Diagramms brach die Hydration. diff --git a/releases/v0.6.0.md b/releases/v0.6.0.md new file mode 100644 index 0000000..e68f535 --- /dev/null +++ b/releases/v0.6.0.md @@ -0,0 +1,46 @@ +# Flimmer 0.6.0 + +Der Rest: Benachrichtigungen, Abgleich, Import und Export, Schnittstelle, PWA +— und eine bebilderte Anleitung. + +### Hinzugefügt + +- **Benachrichtigungen** über vier Wege: E-Mail (SMTP), ntfy, Gotify und ein + generischer Webhook, der zugleich Discord, Slack und Mattermost bedient. + Jeder Nutzer richtet seine Kanäle selbst ein, kann sie einzeln stummschalten + und mit einer Testnachricht ausprobieren. Dieselbe Meldung geht nie zweimal + raus — auch ein Fehlversuch wird protokolliert, sonst spammt der nächste Lauf + den Kanal voll, sobald er wieder erreichbar ist. Die E-Mail-Vorlage trägt + Logo und Farbwelt von Flimmer. +- **Täglicher Abgleich**: frischt laufende Serien bei TMDB auf, meldet neue + Episoden und neu verfügbare Watchlist-Titel, räumt Papierkorb und abgelaufene + Sitzungen. Eingebauter Zeitplan über `ENABLE_SCHEDULER` und `SYNC_HOUR`, von + außen anstoßbar über `/api/cron/sync` mit `CRON_SECRET`, und in der + Verwaltung per Knopfdruck. Ein einzelner Titel kann den Lauf nicht kippen. +- **Import** aus Trakt.tv (JSON, egal ob Watchlist, History, Ratings oder + Collection) und aus CSV mit Komma oder Semikolon. Der Import überschreibt + nichts: was schon in der Bibliothek liegt, bleibt unangetastet. +- **Export** der eigenen Daten als CSV oder als JSON mit allen Sichtungen und + Universen. +- **REST-API** unter `/api/v1` mit persönlichen API-Schlüsseln: Bibliothek + lesen und pflegen, Episoden abhaken und zurücknehmen, suchen, Kalender, + Statistik, Universen, Export. Beschreibung als OpenAPI 3.1 unter + `/api/v1/openapi.json`, dazu `docs/API.md` mit Beispielen. +- **Einstellungsseiten** für Profil, Region, Passwort, Benachrichtigungen, + API-Schlüssel sowie Import und Export. +- **Verwaltungsbereich**: Instanzname, Registrierung öffnen und schließen, + öffentliche Profile erlauben, Konten sperren und Rechte vergeben, Abgleich + anstoßen und der Zustand der Instanz auf einen Blick. Die letzte + Administration lässt sich nicht entmachten. +- **Öffentliche Profilseite** unter `/u/` — Zahlen und zuletzt + Gesehenes, aber keine Notizen, keine Watchlist, keine E-Mail-Adresse. + Abschaltbar durch den Nutzer *und* instanzweit durch den Betreiber. +- **PWA-Feinschliff**: eigener Service Worker (Poster aus dem Zwischenspeicher, + Seiten zuerst aus dem Netz, Offline-Rückfall) und eine Offline-Seite. +- **`TMDB_BASE_URL`** für Instanzen hinter einem eigenen Proxy — und für den + mitgelieferten TMDB-Ersatz `scripts/tmdb-stub.mjs`, mit dem sich die Suche + ohne Schlüssel aus den Beispieldaten ausprobieren lässt. +- **Bebilderte Anleitung** `docs/ANLEITUNG.md` mit 18 Screenshots aus der + laufenden Instanz, aufgenommen von `npm run screenshots`. +- **9 weitere Tests** für CSV- und Trakt-Import, Export, das Aufräumen des + Papierkorbs und den Schutz vor Doppelversand — zusammen 49.