Files
abdulive/docs/projects/community-memory.md
T
ZeasyAlexandClaude Opus 5 d09e2b945a Struktur, Doku und S0-Toolchain fuer das abdulive-Toolkit
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
2026-09-09 08:56:09 +02:00

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, 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.