# 2 — Go-Live-Broadcaster (`apps/broadcaster`) **Wirkrichtung:** Reichweite. Billigster Hebel im ganzen Repo — Leute, die schon folgen, aber die Twitch-Benachrichtigung nicht sehen. ## Ablauf ``` stream.online -> 60 s warten (Titel/Kategorie/Thumbnail sind erst dann gesetzt) -> GET /helix/channels (Titel, Kategorie) -> OBS GetSourceScreenshot (Programm-Ausgabe, 1280x720) -> Text aus Vorlage rendern -> pro Plattform: Entwurf anlegen oder direkt senden ``` ## Plattformen | Plattform | Weg | Aufwand | Auto-Post | |---|---|---|---| | **Discord** | Webhook, Embed mit Bild + `@everyone`/Rolle | trivial | ja | | **Bluesky** | AT-Protocol, `com.atproto.repo.createRecord` mit Blob-Upload | klein | ja | | **Mastodon** | `POST /api/v1/statuses` mit Media | klein | ja | | **X/Twitter** | API v2, kostenpflichtig ab Basic-Tier | mittel | optional | | **Instagram Story** | **kein offizieller Weg** — siehe unten | groß | nein | ### Instagram: die Wahrheit Die Instagram Graph API kann Stories nur für **Business-/Creator-Konten** veröffentlichen, die mit einer Facebook-Seite verknüpft sind, und braucht eine App-Review mit `instagram_content_publish`. Für einen kleinen Kanal ist das unverhältnismäßig, und inoffizielle Wege riskieren die Kontosperre. **Lösung in Ausbaustufe 1:** Der Broadcaster erzeugt ein fertiges **1080x1920-Story-Bild** (Screenshot + Titel + Kategorie + "LIVE"-Badge) und legt es in `data/posts//story.png` ab, plus eine Push-Nachricht an Abdus Handy (Discord-DM oder ntfy.sh). Hochladen dauert dann fünf Sekunden manuell. Das ist 90 % des Nutzens für 5 % des Aufwands. ## Sicherung gegen Fehlposts - **Ein Post pro Stream.** `posts`-Tabelle wird auf `stream_id` geprüft. - **Cooldown 6 h.** Wenn Twitch nach einem Verbindungsabbruch ein zweites `stream.online` schickt, wird nicht erneut gepostet. - **Kill-Switch** in `config/config.yaml`: `broadcaster.enabled: false`. - Beim ersten Einrichten läuft alles im Modus `draft` — Posts landen nur in der DB und in einem privaten Discord-Kanal zur Kontrolle. ## Vorlagen `config/templates/golive.*.md`, mit Platzhaltern `{{title}}`, `{{category}}`, `{{url}}`, `{{weekday}}`. Mehrere Varianten pro Plattform, zufällig gewählt — identische Posts jede Woche werden von Algorithmen und Menschen gleichermaßen ignoriert. ## Abnahmekriterien - Stream-Start erzeugt innerhalb von 90 s einen Discord-Post mit korrektem Titel, Kategorie und aktuellem Screenshot. - Ein simulierter doppelter `stream.online` erzeugt keinen zweiten Post. - Story-Bild ist 1080x1920, Text ist auf dem Handy lesbar.