Florian Wilde b53ee828ba feat: Auswertungen für Übersicht, Kalender und Statistik
Alles wird aus den Sichtungen berechnet — es gibt keine fortgeschriebenen
Zähler, die auseinanderlaufen könnten. Zeitreihen laufen als SQL, weil Prisma
keine Gruppierung nach Monat kennt.

Der Monatsschlüssel kommt bewusst als Text aus der Datenbank: date_trunc
liefert Mitternacht in der Sitzungszeitzone, JavaScript legt beim Vergleich
die lokale Zone an — zwei Stunden Versatz genügen, damit kein Schlüssel mehr
passt und das Diagramm leer bleibt.
2026-09-01 19:54:15 +02:00
2026-09-01 19:39:32 +02:00

Flimmer

Serien und Filme tracken — selbst gehostet, ohne fremde Konten.
Episodenfortschritt, eigene Universen mit mehreren Reihenfolgen, Statistiken und Benachrichtigungen, wenn es weitergeht.


Flimmer ist ein selbst hostbarer Tracker für Serien und Filme — benannt nach der Flimmerkiste und dem warmen Flimmern, das ein Bildschirm im dunklen Zimmer verbreitet. Metadaten kommen von TMDB, die Daten bleiben auf deinem Server.

Was Flimmer kann

  • Tracking — Serien und Filme mit Status (Schaue gerade, Pausiert, Abgeschlossen, Abgebrochen, Watchlist), Episodenfortschritt einzeln oder staffelweise, „+1 Episode"-Knopf, Rewatch-Zählung, Bewertung, Notizen, Tags.
  • Universen — MCU, Star Wars, Wizarding World … beliebige Filme und Serien in einem Universum bündeln, mit mehreren Reihenfolgen (Erscheinung, Story-Chronologie, Einsteiger-Route) und Gesamtfortschritt.
  • Metadaten von TMDB — Suche, Poster, Staffeln und Episoden, offizielle Collections, Streaming-Verfügbarkeit in deiner Region.
  • Benachrichtigungen — bei neuen Episoden und Releases, per E-Mail, ntfy, Gotify oder Webhook (Discord/Slack-kompatibel), pro Nutzer einstellbar.
  • Mehrere Nutzer — jede Person hat ihre eigene Bibliothek; Universen lassen sich teilen. Der erste registrierte Zugang wird Administrator.
  • REST-API und PWA — dokumentierte Schnittstelle mit eigenen API-Schlüsseln, installierbar auf dem Startbildschirm.

Schnellstart

Voraussetzungen: Docker und Docker Compose.

git clone https://git.wilde-server.de/florian.wilde/flimmer.git
cd flimmer
cp .env.example .env

In der .env mindestens diese drei Werte setzen:

POSTGRES_PASSWORD=ein-langes-zufaelliges-passwort
AUTH_SECRET=noch-ein-langes-zufaelliges-geheimnis
APP_URL=https://flimmer.example.com

Geheimnisse erzeugen:

node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"

Dann starten:

docker compose up -d

Flimmer läuft auf http://localhost:3000. Der erste Zugang, der sich registriert, wird automatisch Administrator — lege ihn also gleich an. Danach lässt sich die Registrierung in der Verwaltung schließen.

TMDB-Schlüssel

Ohne TMDB findet die Suche keine Metadaten. Der Schlüssel ist kostenlos:

  1. Konto auf themoviedb.org anlegen
  2. Unter Einstellungen → API einen Schlüssel beantragen
  3. In die .env eintragen und docker compose up -d erneut ausführen:
TMDB_API_KEY=dein-schluessel
TMDB_REGION=DE
TMDB_LANGUAGE=de-DE

Betrieb hinter einem Reverse Proxy

APP_URL muss auf die öffentliche Adresse zeigen — daraus werden Links in Benachrichtigungen und der OIDC-Rücksprung gebildet. Als Healthcheck eignet sich /api/health; der Endpunkt prüft auch die Datenbankverbindung.

Beispiel für Caddy:

flimmer.example.com {
    reverse_proxy flimmer:3000
}

Aktualisieren

cd flimmer
git pull
docker compose build
docker compose up -d

Datenbankmigrationen laufen automatisch beim Start des Containers — ein eigener Handgriff ist nicht nötig. Vor einem Update ein Backup zu ziehen ist trotzdem eine gute Angewohnheit.

Backup

Alles, was zählt, steckt in der Datenbank; das Volume flimmer-data enthält nur den Bild-Cache und lässt sich jederzeit neu aufbauen.

# Sicherung
docker compose exec -T db pg_dump -U flimmer -d flimmer --clean --if-exists \
  | gzip > flimmer-$(date +%F).sql.gz

# Rückspielen
gunzip -c flimmer-2026-09-01.sql.gz \
  | docker compose exec -T db psql -U flimmer -d flimmer

Für einen nächtlichen Lauf genügt ein Cron-Eintrag mit demselben Befehl. Wer zusätzlich den Bild-Cache sichern will:

docker run --rm -v flimmer_flimmer-data:/data -v "$PWD":/backup alpine \
  tar czf /backup/flimmer-data.tar.gz -C /data .

Konfiguration

Sämtliche Einstellungen laufen über Umgebungsvariablen; die vollständige Liste mit Erklärungen steht in .env.example. Die wichtigsten:

Variable Bedeutung
APP_URL Öffentliche Adresse der Instanz
AUTH_SECRET Geheimnis für Sitzungen — mindestens 32 Zeichen
TMDB_API_KEY TMDB-Schlüssel für Metadaten
TMDB_REGION Region für die Streaming-Verfügbarkeit (Standard DE)
ALLOW_REGISTRATION Selbstregistrierung bei der Erstinbetriebnahme
ENABLE_SCHEDULER Eingebauter Hintergrundlauf für Sync und Benachrichtigungen
SMTP_* E-Mail-Versand
OIDC_* Optionale SSO-Anbindung (Authelia, Keycloak, Authentik …)

Entwicklung

npm install
docker compose -f docker-compose.dev.yml up -d   # nur PostgreSQL
cp .env.example .env                              # DATABASE_URL auf localhost:5439
npm run db:migrate
npm run db:seed                                   # Demo-Konten
npm run dev
Befehl Wirkung
npm run dev Entwicklungsserver
npm run build Produktionsbuild
npm run typecheck TypeScript prüfen
npm run db:migrate Migration erzeugen und anwenden
npm run db:studio Prisma Studio
npm run db:seed Beispieldaten
npm run icons Favicon und PWA-Icons aus dem SVG-Logo neu erzeugen

Aufbau des Projekts:

src/
  app/          Routen (App Router), API-Endpunkte
  components/   Wiederverwendbare Bausteine
  lib/          Serverseitige Logik: DB, Auth, TMDB, Benachrichtigungen
  i18n/         Oberflächentexte
prisma/         Schema, Migrationen, Seed
public/brand/   Logo in allen Varianten
docker/         Entrypoint des Containers
docs/           Anleitung, Design-Dokumentation

Technik

Next.js (App Router) mit TypeScript, PostgreSQL über Prisma, Tailwind CSS. Warum Next und nicht SvelteKit: Oberfläche, REST-API und Hintergrundläufe stecken in einem Deployment, Server Components halten den Datenbankzugriff serverseitig, und der standalone-Build ergibt ein schlankes Image ohne Build-Werkzeuge. Für ein selbst gehostetes Werkzeug zählt vor allem, dass ein einziger Container genügt.

Lizenz

MIT — siehe LICENSE.

Metadaten stammen von TMDB. Flimmer wird von TMDB weder betrieben noch unterstützt.

S
Description
No description provided
Readme MIT
3.1 MiB
0.9.0
Latest
2026-09-02 12:48:01 +00:00
Languages
TypeScript 94.1%
JavaScript 2.5%
Shell 1.5%
CSS 1.4%
Dockerfile 0.5%