Files
abdulive/README.md
T
ZeasyAlexandClaude Opus 5 5f6301268a Native Windows-Auslieferung statt Container
Docker faellt weg. Das Projekt hat keine npm-Abhaengigkeiten und Node fuehrt
TypeScript direkt aus - der Container schrieb nur noch drei Programme fest,
und dafuer braucht es keine Virtualisierung, sondern einen Ordner.

Der Anlass war, dass ADR-0004 zwar `docker compose pull` versprach, es aber
nie ein veroeffentlichtes Image gab. Wer installieren wollte, musste
whisper.cpp aus dem Quelltext uebersetzen.

Plattformschicht (packages/core/src/platform.ts):
- Programme werden neben der Anwendung gesucht, nicht im PATH
- Daten unter %LOCALAPPDATA%, damit Installation und Update ohne
  Administratorrechte auskommen
- Schriften mitgeliefert: ohne fontsdir setzt libass wortlos eine
  Ersatzschrift ein - gemessen 720 statt 826 Pixel Zeilenbreite

Windows-Eigenheiten, an echtem ffmpeg 8.1 durchprobiert:
- Pfade im Filtergraphen brauchen alle drei Schritte (Vorwaertsschraegstriche,
  escapter Doppelpunkt, Anfuehrungszeichen); je zwei davon reichen nicht
- `nice` gibt es nicht, ersetzt durch os.setPriority

Auslieferung:
- scripts/build-package.ts baut das Paket, laeuft auch unter Linux
- install.ps1 ohne Administratorrechte, Autostart ueber den Aufgabenplaner
- update legt neue Fassungen bereit; eingespielt wird beim naechsten Start,
  nie mitten im Stream
- ZIP lesen und schreiben ohne Abhaengigkeiten (packages/core/src/zip.ts)

Kein `irm ... | iex`-Einzeiler: git.zeasy.dev antwortete instanzweit mit einer
Umleitung auf /user/login, und `iex` fuehrte die Anmeldeseite als PowerShell
aus. Der Updater verfolgt Umleitungen jetzt nicht und hat keine erfundene
Vorgabeadresse mehr.

Ausserdem: backup.ps1 war an zwei Stellen dokumentiert, aber nie geschrieben.

ADR-0007 ersetzt ADR-0004. 84 Tests, Typpruefung sauber.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AhVSfMFdWnXKCv5JfLnArZ
2026-09-09 17:39:26 +02:00

113 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# abdulive-toolkit
Werkzeugkasten für den Twitch-Kanal **abdulive_**. Ein Monorepo mit mehreren
kleinen Diensten, die sich einen gemeinsamen Kern teilen: Twitch-Auth,
Helix-Client, EventSub/IRC-Ingest und eine SQLite-Datenbank.
TypeScript auf Node 24, **ohne Laufzeitabhängigkeiten und ohne Build-Schritt** —
Node führt die `.ts`-Dateien direkt aus, SQLite und WebSocket sind eingebaut.
Betrieb über Docker Compose.
Zielgröße des Kanals: ~5–30 gleichzeitige Zuschauer. Alles hier ist auf diese
Phase optimiert — nicht auf Skalierung, sondern auf **Wachstum und Bindung**.
## Die neun Tools
| # | Tool | Ordner | Zweck | Status |
|---|------|--------|-------|--------|
| 1 | Clip-to-Shorts | `apps/clipper` | Clips → 9:16 mit Untertiteln, Upload-fertig | geplant |
| 2 | Go-Live-Broadcaster | `apps/broadcaster` | Stream-Start → Discord/Bluesky/Instagram | geplant |
| 3 | Raid- & Netzwerk-Tool | `apps/raid-scout` | Raid-Ziele finden, Raid-Historie führen | geplant |
| 4 | Analytics-Dashboard | `apps/dashboard` | Viewer vs. Chat, Titel-Performance, Retention | geplant |
| 5 | VOD-Kapitel | `apps/vod-chapters` | Szenen-/Kategoriewechsel → Timestamps | geplant |
| 6 | Community-Gedächtnis | `apps/community` | Chatter-Profile, Begrüßungen, Overlay-Hinweise | geplant |
| 7 | Chat steuert Dinge | `apps/overlay-server` + `apps/overlay-web` | Overlay, Soundboard, Minigames, Umfragen | geplant |
| 8 | Punktesystem + Shop | `apps/loyalty` | Punkte mit echten Konsequenzen | geplant |
| 9 | Stream-Recap | `apps/recap` | Zusammenfassung nach Streamende in Discord | geplant |
Dazu der Dienst, der unter allen anderen liegt:
| — | **Ingest-Daemon** | `apps/ingest` | IRC + Helix → DB, Einrichtungsseite | **läuft** |
## Doku
- [`docs/00-overview.md`](docs/00-overview.md) — Was hier gebaut wird und warum
- [`docs/01-architecture.md`](docs/01-architecture.md) — Aufbau, Datenfluss, Prozesse
- [`docs/02-twitch-integration.md`](docs/02-twitch-integration.md) — Auth, Scopes, EventSub, Rate Limits
- [`docs/03-data-model.md`](docs/03-data-model.md) — Datenbankschema
- [`docs/04-roadmap.md`](docs/04-roadmap.md) — Reihenfolge und Meilensteine
- [`docs/05-setup.md`](docs/05-setup.md) — Lokal einrichten
- [`docs/06-hebel-analyse.md`](docs/06-hebel-analyse.md) — **Womit anfangen und warum**
- [`docs/07-mvp-plan.md`](docs/07-mvp-plan.md) — **MVP „Clip-Knopf": Umfang, Scheiben, Zeitplan**
- [`docs/handoff.md`](docs/handoff.md) — **Übergabe: Stand, Fallstricke, wo weitermachen**
- [`docs/offene-punkte.md`](docs/offene-punkte.md) — was noch fehlt
- [`docs/obs-layout.md`](docs/obs-layout.md) — die Layout-Vorgabe für OBS
- [`docs/projects/`](docs/projects/) — je ein Spec-Dokument pro Tool
- [`docs/decisions/`](docs/decisions/) — Architekturentscheidungen (ADRs)
## Auf dem Stream-PC installieren
Eine native Windows-Anwendung. Node, ffmpeg, whisper.cpp und die Schriften
sind mitgeliefert — vorausgesetzt wird nur OBS. Kein Docker, kein WSL2, nichts
zu übersetzen ([ADR-0007](docs/decisions/ADR-0007-native-windows.md)).
Das Paket herunterladen, entpacken, darin `install.ps1` ausführen. Ohne
Administratorrechte; Programm und Daten landen im Benutzerprofil.
```powershell
Expand-Archive .\abdulive-0.5.0-win-x64.zip -DestinationPath .\abdulive
.\abdulive\install.ps1
```
> Einen `irm … | iex`-Einzeiler gibt es nicht: `git.zeasy.dev` verlangt
> instanzweit eine Anmeldung und antwortet auf **jede** Adresse mit einer
> Umleitung auf `/user/login`. `iex` führt die Anmeldeseite dann als
> PowerShell aus. Wo die Pakete künftig liegen sollen, ist noch offen —
> siehe [`offene-punkte.md`](docs/offene-punkte.md).
Danach einmalig:
```powershell
abdulive fetch-model # Sprachmodell, ca. 465 MB
abdulive check-env # Selbsttest
Start-ScheduledTask -TaskName abdulive
```
Dann **http://localhost:4792/setup** öffnen und die Twitch-Zugangsdaten
eintragen. Sie werden verschlüsselt abgelegt, nicht in einer Datei im Projekt
([ADR-0005](docs/decisions/ADR-0005-zugangsdaten.md)).
Ausführlich: [`docs/05-setup.md`](docs/05-setup.md).
## Paket bauen und ausliefern
```powershell
node scripts/build-package.ts --version 0.5.0
```
Lädt Node, ffmpeg und whisper.cpp bei ihren Herausgebern, packt alles nach
`dist/` und schreibt `abdulive.json` — das Manifest, das der Updater auf
Abdus Rechner abfragt. Läuft auch in der CI unter Linux.
Auf dem Stream-PC sieht `abdulive update` täglich nach und legt eine neue
Fassung bereit; eingespielt wird sie beim nächsten Start, nie mitten im
Stream.
## Aktueller Stand
Vier von sieben Scheiben des MVP „Clip-Knopf" sind gebaut: Toolchain,
Einrichtung im Browser, Twitch-Auth, Datenbank, Chat-Aufnahme, OBS-Anbindung mit
`!clip`, 9:16-Render und Untertitel. Dazu die native Auslieferung mit Installer
und Updater. 79 Tests grün.
Offen: die Abnahme der OBS-Anbindung an einem laufenden OBS, dann S5 —
Onboarding-Assistent und Sichtungsseite.
Details: [`docs/handoff.md`](docs/handoff.md)
## Tests
```powershell
node --test "packages/**/*.test.ts" "apps/**/*.test.ts"
```