Monorepo-Geruest fuer neun Streamer-Tools plus den Ingest-Daemon, der unter sechs davon liegt. Enthaelt: - docs/: Ueberblick, Architektur, Twitch-Integration, Datenmodell, Roadmap, Setup, Hebel-Analyse und den MVP-Plan "Clip-Knopf" - docs/projects/: je eine Spezifikation pro Tool - docs/decisions/: vier ADRs (TS-Monorepo, SQLite, EventSub/IRC, Docker) - docker/: Image mit ffmpeg und whisper.cpp, abhaengigkeitsfreier Entrypoint mit check-env, fetch-model und calibrate - config/layout.yaml: aus einem VOD-Screenshot eingemessener Facecam-Ausschnitt (440x330 oben links, Chat-Overlay ab x=1270) Noch kein Anwendungscode - Scheibe S0 aus docs/07-mvp-plan.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013VTGjd92LsDDWF3frd9FTB
2.7 KiB
4 — Analytics-Dashboard (apps/dashboard)
Wirkrichtung: Steuerung. Beantwortet die Frage "was funktioniert eigentlich", die Twitch selbst nicht beantwortet.
Läuft auf http://localhost:4792. Vite + Preact + uPlot, liest direkt aus
SQLite. Keine Authentifizierung, weil nur lokal erreichbar.
Seiten
Stream-Zeitachse (die wichtigste)
Eine gemeinsame X-Achse (Stream-Laufzeit), darauf übereinander:
- Viewerzahl (Linie, aus
viewer_samples) - Chat-Nachrichten pro Minute (Balken)
- unterschiedliche Chatter pro 5 min (Linie)
- Marker: Kategoriewechsel, Titelwechsel, Raids rein/raus, Clips, Follows, Subs
Damit sieht man direkt: An welcher Stelle kamen Leute rein, an welcher gingen sie, und war der Chat da tot oder wach. Zusammenhang von Viewerzahl und Chat-Aktivität ist die Kernfrage — 15 Zuschauer mit stillem Chat sind weniger wert als 8 mit lebendigem.
Abgangs-Analyse
Aus viewer_samples: Ableitung über die Zeit, die stärksten Abfälle markiert
und mit dem gleichzeitigen stream_segments-Eintrag und den Chat-Nachrichten
der Minute davor angereichert. Antwort auf "wann gehen die Leute".
Wichtige Einschränkung, die im UI stehen muss: viewer_samples ist eine
Momentaufnahme der Gesamtzahl, keine Ein-/Austrittsliste. Twitch liefert das
nicht. Ein Abfall von 12 auf 8 kann vier Abgänge oder sechs Abgänge plus zwei
Zugänge bedeuten. Für Chatter ist es exakt (über user_streams), für stille
Zuschauer geschätzt.
Titel- und Kategorie-Performance
Aggregation über stream_segments: pro Titel/Kategorie die durchschnittliche
Viewerzahl, der Nettozufluss während des Segments, Chat-Rate, gewonnene
Follower pro Stunde. Sortierbar. Mit Hinweis auf die Stichprobengröße —
bei drei Streams pro Titel ist jede Zahl Rauschen, und das Dashboard sagt das,
statt eine Rangliste vorzutäuschen.
Chatter: neu vs. wiederkehrend
Pro Stream ein Stapelbalken: Erstchatter / wiederkehrend (1–4 Streams) / Stammgast (5+). Dazu eine Kohorten-Tabelle: Von den Erstchattern aus Stream N, wie viele waren in N+1, N+2, N+3 wieder da. Das ist die Zahl, die tatsächlich über Wachstum entscheidet.
Betriebsstatus
GET /health vom Ingest, letzte Fehler aus logs/, Größe der DB,
Clip-Warteschlange.
Clip-Freigabe
Zusätzlich hostet das Dashboard die Freigabe-Ansicht für die Clip-Pipeline
(siehe clip-shorts.md): Kandidatenliste mit
Videovorschau, Score, Chat-Ausschnitt und den Knöpfen Übernehmen /
Verwerfen.
Abnahmekriterien
- Die Zeitachse eines abgeschlossenen Streams lädt in unter 2 s.
- Alle Marker liegen zeitlich korrekt (Abgleich gegen das VOD).
- Die Kohorten-Tabelle stimmt mit einer manuellen SQL-Auszählung überein.