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
3.2 KiB
6 — Community-Gedächtnis (apps/community)
Wirkrichtung: Bindung. Bei 10 Zuschauern der Unterschied zwischen "Zuschauer" und "Community".
Läuft als Modul im overlay-server, nicht als eigener Prozess — es braucht
dieselbe Chat-Verbindung und denselben WS-Kanal zum Overlay.
Datenlage
Alles Nötige liegt bereits in users und user_streams (siehe
../03-data-model.md). Dieses Tool ist überwiegend
Auswertung und Ausgabe, kaum neue Datenerfassung — deshalb ist es billig,
sobald der Ingest steht.
Die drei Ausgaben
1. Chat-Begrüßung
Ausgelöst durch die erste Nachricht eines Users im laufenden Stream:
| Fall | Bedingung | Beispiel |
|---|---|---|
| Erstchatter | first-msg-Tag oder users.message_count = 0 |
"Oh, @name schreibt zum ersten Mal — willkommen!" |
| Rückkehrer | letzter Besuch > 21 Tage her | "@name, lange nicht gesehen." |
| Meilenstein | streams_chatted in {5, 10, 25, 50, 100} |
"Stream Nummer 25 für @name." |
| Stammgast | streams_chatted >= 5 |
individuelle Begrüßung aus users.greeting |
| sonst | — | nichts |
Regeln, damit es nicht nervt: höchstens eine Begrüßung alle 20 s, höchstens
zehn pro Stream, muted_greeting respektiert, und keine Begrüßung, wenn Abdu
in den letzten 15 s selbst gesprochen hat (der Ingest weiß über OBS bzw. über
eine Audiopegel-Schwelle, ob gerade geredet wird) — sonst redet der Bot dem
Streamer ins Wort.
2. Overlay-Hinweis für Abdu
Kleines, nur für Abdu sichtbares Panel (eigene Browser-Source in der Studio-Ansicht oder zweiter Monitor). Wenn jemand schreibt:
┌──────────────────────────────────┐
│ maxi_2k Stream 15 · Sub 3M │
│ zuletzt: vor 2 Tagen │
│ Notiz: studiert Maschinenbau, │
│ spielt selbst Elden Ring │
│ erste Nachricht: 04.03.2026 │
└──────────────────────────────────┘
Das ist der eigentliche Wert. Nicht der Bot, der etwas schreibt, sondern Abdu, der weiß, mit wem er redet. Ein Bot, der "willkommen zurück" sagt, ist Deko; ein Streamer, der "na, wie war die Klausur" sagt, bindet Menschen.
3. Notizen
Chat-Command für Abdu und Mods: !notiz <name> <text> hängt an users.notes an.
Im Dashboard editierbar. Das ist die einzige Datenquelle, die Handarbeit
braucht, und die mit dem höchsten Nutzen pro Aufwand.
Datenschutz
Die DB enthält personenbezogene Daten (Chatverläufe, Notizen). Sie liegt lokal,
wird nicht geteilt und nicht in ein Repo committet (data/ ist in .gitignore).
!vergissmich löscht auf Wunsch alle Daten eines Users bis auf die anonyme
Aggregatstatistik. Notizen enthalten nichts, was man der Person nicht ins
Gesicht sagen würde.
Abnahmekriterien
- Ein Testkonto, das zum ersten Mal schreibt, wird als Erstchatter erkannt und genau einmal begrüßt.
- Nach einem Namenswechsel des Testkontos bleibt die Historie erhalten
(Verknüpfung über
user_id, nichtlogin). - Das Overlay-Panel zeigt den Hinweis innerhalb von 500 ms nach der Nachricht.
- Zwanzig Nachrichten in fünf Sekunden erzeugen höchstens eine Begrüßung.