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
69 lines
2.7 KiB
Markdown
69 lines
2.7 KiB
Markdown
# 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`](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.
|