Files
flimmer/releases/v0.8.0.md
T
Florian Wilde 0f9ad6e29d
CI / pruefen (pull_request) Canceled after 0s
Version 0.8.0
Passkeys und die Jellyfin-Anbindung als groessere Bausteine, dazu vier
Nacharbeiten aus dem Betrieb. Changelog, Release-Notiz, DEVLOG und die
bebilderte Anleitung nachgezogen.

Die Anleitung hat zwei neue Abschnitte samt Screenshots: „Anmelden per
Passkey" und ein Bild im Jellyfin-Abschnitt. Beide Aufnahmen brauchen
Gegenstellen — einen Authenticator und einen Medienserver. Damit
`npm run screenshots` reproduzierbar bleibt, stellt das Skript sie jetzt
selbst bereit: der virtuelle Authenticator kommt ueber CDP vom Browser, der
Jellyfin-Nachbau sind ein paar Zeilen HTTP im Skript. Beide Spuren raeumt es
nach der Aufnahme ueber die Oberflaeche wieder weg.

Der Merkposten zum Entwicklungsmodus in CLAUDE.md war zu absolut: dass unter
Playwright nichts hydratisiert, stimmt nicht durchgehend — im
Screenshot-Lauf gegen denselben Dev-Server funktionierten die Klicks. Der
Eintrag beschreibt jetzt das Beobachtete statt einer Regel, die nicht traegt,
und nennt die Pruefung, mit der sich der Zustand feststellen laesst. Dazu neu:
APP_URL muss zum aufgerufenen Port passen, sonst scheitern Passkeys am
Ursprungsabgleich.

Alle Screenshots neu aufgenommen — die Einstellungsseite hatte sich durch die
neuen Abschnitte ohnehin geaendert.
2026-09-02 10:35:43 +02:00

5.5 KiB

Flimmer 0.8.0

Zwei größere Bausteine: Anmeldung per Passkey und die Jellyfin-Anbindung. Dazu vier Nacharbeiten aus dem laufenden Betrieb.

⚠️ Beim Aktualisieren kommen zwei Migrationen mit (passkeys, medienserver). Der Container spielt sie beim Start selbst ein; ./update.sh legt vorher eine Sicherung an.

Hinzugefügt

  • Anmeldung per Passkey (WebAuthn). Windows Hello, Face ID, Touch ID oder ein Sicherheitsschlüssel — statt Passwort. Anlegen und verwalten unter Einstellungen → Passkeys, anmelden über „Mit Passkey anmelden" ohne vorherige E-Mail-Eingabe.

    Ein Passkey ist der dritte Weg in denselben Trichter: am Ende steht dieselbe Sitzung wie bei Passwort und OIDC. Das Passwort bleibt daneben bestehen, und den letzten verbleibenden Anmeldeweg lässt Flimmer nicht entfernen.

    Drei Dinge, die beim Selbsthosten zählen:

    • HTTPS ist Pflicht (Ausnahme: localhost). Läuft die Instanz über einfaches HTTP, verschwindet die Verwaltung mit einem Hinweis, statt einen kryptischen Browserfehler zu zeigen.
    • Der Hostname kommt aus APP_URL, nicht aus dem Host-Header — hinter einem Reverse Proxy hinge er sonst am falschen Namen.
    • Ein Domainwechsel entwertet alle Passkeys. Sie sind fest an den Hostnamen gebunden und müssen danach neu angelegt werden.

    Abschaltbar über ENABLE_PASSKEYS.

  • Jellyfin anbinden — Bestand und Sichtungen übernehmen, unter Einstellungen → Medienserver.

    Zugeordnet wird über die TMDB-Kennung, die Jellyfin zu jedem Item mitliefert; dieselbe Kennung, auf der Flimmers Katalog ohnehin aufbaut. Kein Raten über Titel und Jahreszahlen — die Zuordnung ist eindeutig oder sie findet nicht statt. Was Jellyfin ohne Kennung führt, landet im Bericht.

    Angemeldet wird mit Benutzername und Passwort, nicht mit einem API-Schlüssel: mit einem Schlüssel liefert Jellyfin den Bestand ohne Gesehen-Status, und zwar ohne Fehlermeldung. Der Verbindungstest prüft das ausdrücklich nach und sagt es. Das Zugangstoken liegt verschlüsselt in der Datenbank (AES-256-GCM, Schlüssel aus AUTH_SECRET), das Passwort wird nicht gespeichert.

    Der Abgleich ist eine Einbahnstraße: er ergänzt und löscht nie etwas, das in Flimmer steht. Fehlende Titel werden nur mit gesetztem Häkchen aufgenommen — im täglichen Lauf also nie. Danach läuft er im Hintergrundlauf mit.

    Grenze der Quelle: Jellyfin kennt PlayCount und LastPlayedDate, aber keine Liste einzelner Sichtungen. Ein dreimal gesehener Film kommt deshalb mit einem Termin an, nicht mit drei. Das steht auch in der Anleitung.

    Das Zurückschreiben nach Jellyfin (Stufe 3) ist noch nicht dabei; das Feld liegt im Datenmodell bereit.

  • Standardreihenfolge je Universum. Welche Reihenfolge beim Öffnen erscheint, lässt sich jetzt festlegen — wer Schreibrecht hat, setzt sie für alle. Die Rangfolge bleibt schlicht: Adresse schlägt Standard schlägt erste. Über die Schnittstelle mit PATCH /api/v1/universen/{id}.

Geändert

  • Rückmeldung beim Tippen in Suche und Bibliothek. Beim Suchen wird das Trefferraster gedämpft und auf aria-busy gesetzt, der Hinweis „sucht …" steht jetzt auch in der Bibliothek. Die alten Treffer bleiben sichtbar — sie verschwinden zu lassen ließe die Liste bei jedem Tastendruck springen. Die Sammelverzögerung liegt einheitlich bei 250 ms.

  • update.sh erkennt jetzt den Container-Zustand. Schlägt die Abfrage über den veröffentlichten Port fehl, zählt der Healthcheck des Containers — hinter einem Reverse Proxy ist der App-Port oft gar nicht auf dem Host veröffentlicht, und das Skript meldete dann einen Fehlschlag, obwohl das Update sauber durchgelaufen war. Im Fehlerfall nennt es außerdem den Zustand und ordnet ihn ein.

    Zur Klarstellung: Der Changelog zu 0.7.1 führte diese Rückfallprüfung bereits auf. Sie war dort beschrieben, aber nicht umgesetzt — jetzt ist sie es.

  • Die Entwicklungsdatenbank hat einen eigenen Compose-Projektnamen (flimmer-dev). Vorher leiteten beide Compose-Dateien ihn aus dem Verzeichnis ab, und ein docker compose down -v auf dem Produktivstack nahm das Volume der Entwicklungsdatenbank mit.

Behoben

  • Ein als gesehen markierter Film ließ sich nicht mehr zurücksetzen. Im Zustand „gesehen" stand statt eines Knopfes ein Etikett ohne Klickziel, und eine Gegenfunktion gab es nicht — Serien hatten längst einen Umschalter, Filme nur einen Hinweg. Die grüne Plakette ist jetzt klickbar. Zurückgenommen wird dabei nur der laufende Durchlauf: wer einen Film dreimal gesehen hat, verliert die früheren Sichtungen nicht.

  • Die Beschriftungen im Titelraster sprangen, sobald ein Titel zweizeilig umbrach — die Metazeile saß dann eine Zeilenhöhe tiefer als bei den Nachbarn, und die Reihen waren unterschiedlich hoch. Der Titelblock belegt jetzt immer zwei Zeilen; in der Bibliothek wird zusätzlich der Platz des Fortschrittsbalkens freigehalten, den es nur bei Serien gibt.

Getestet

78 Tests (vorher 52). Neu dazu: Passkey-Verwaltung samt Aussperrsperre, der Jellyfin-Abgleich gegen nachgebildete Antworten, die Standardreihenfolge samt Eindeutigkeit, und das Zurücknehmen einer Filmsichtung über Durchlaufgrenzen hinweg.

Zusätzlich wurden die Klickwege gegen einen Produktionsbau geprüft — die Passkey-Anmeldung mit einem virtuellen Authenticator, der Jellyfin-Abgleich gegen einen nachgebildeten Server samt des Falls, in dem der Gesehen-Status fehlt.