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
77 lines
3.2 KiB
Markdown
77 lines
3.2 KiB
Markdown
# 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`](../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`, nicht `login`).
|
|
- 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.
|