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
65 lines
2.4 KiB
Markdown
65 lines
2.4 KiB
Markdown
# 3 — Raid- und Netzwerk-Tool (`apps/raid-scout`)
|
||
|
||
**Wirkrichtung:** Reichweite über Menschen statt über Algorithmen. In dieser
|
||
Kanalgröße die zuverlässigste Quelle für neue Stammzuschauer.
|
||
|
||
## Kandidaten finden
|
||
|
||
`GET /helix/streams?game_id=<aktuelle Kategorie>&first=100&language=de`,
|
||
seitenweise bis die Viewerzahl unter die Untergrenze fällt (Twitch sortiert
|
||
absteigend, also von hinten interessant). Filter:
|
||
|
||
- Viewer zwischen `min` und `max` (Default 5–30, konfigurierbar)
|
||
- Sprache `de`
|
||
- Uptime mindestens 30 min und höchstens 5 h — wer gerade erst angefangen hat,
|
||
verliert durch einen Raid nichts, wer gleich aufhört, kann nichts damit
|
||
anfangen
|
||
- nicht auf der Sperrliste (`config/raid-blocklist.yaml`)
|
||
|
||
## Bewertung
|
||
|
||
```
|
||
score = 0.35 * viewerNaehe (Ziel: aehnliche Groesse wie wir)
|
||
+ 0.25 * kategorieUeberlapp (gleiche Kategorie > gleiche Sparte)
|
||
+ 0.20 * beziehung (schon mal Kontakt gehabt? zurueckgeraidet?)
|
||
+ 0.10 * frische (lange nicht mehr geraidet)
|
||
+ 0.10 * uptimeFenster
|
||
```
|
||
|
||
`beziehung` kommt aus der `raids`-Tabelle: Wer uns geraidet hat und noch keinen
|
||
Raid zurückbekommen hat, steht ganz oben. **Das ist der eigentliche Kern des
|
||
Tools** — nicht das Finden von Fremden, sondern das Nicht-Vergessen von
|
||
Leuten, die schon Kontakt aufgenommen haben.
|
||
|
||
## Oberfläche
|
||
|
||
- **Chat-Command `!raidziel`** (nur Mods/Broadcaster): Bot postet die Top 3 mit
|
||
Login, Viewerzahl und Kategorie in den Chat.
|
||
- **Overlay-Panel**, das Abdu am Streamende einblenden kann: Top 5 als Karten,
|
||
Klick kopiert `/raid <login>` in die Zwischenablage. Bewusst **kein
|
||
automatisches Auslösen** — ein Raid ist eine soziale Geste, die einen
|
||
Menschen braucht.
|
||
- **Dashboard-Seite** mit der vollständigen Raid-Historie.
|
||
|
||
## Netzwerk-Gedächtnis
|
||
|
||
Für jeden Kanal, mit dem es je Kontakt gab:
|
||
|
||
| Feld | Quelle |
|
||
|---|---|
|
||
| Raids rein / raus, mit Datum und Viewerzahl | `channel.raid` EventSub |
|
||
| erwidert ja/nein | berechnet |
|
||
| Notizen | manuell im Dashboard |
|
||
| letzter Kontakt | berechnet |
|
||
|
||
Wöchentliche Erinnerung im Dashboard: "Diese 3 haben dich geraidet, du sie noch
|
||
nicht."
|
||
|
||
## Abnahmekriterien
|
||
|
||
- `!raidziel` liefert im laufenden Stream innerhalb von 3 s drei plausible
|
||
Kanäle in der aktuellen Kategorie.
|
||
- Ein eingehender Raid landet automatisch in `raids` mit `direction='in'`.
|
||
- Ein ausgehender Raid (manuell in Twitch ausgelöst) wird ebenfalls erfasst.
|
||
- Kanäle auf der Sperrliste tauchen nie auf.
|