v0.3.0-beta
Pre-releaseAdolar Songster v0.3.0-beta
Beta nach der v0.2.0-beta. Vollständiges README: README.md.
Neu in dieser Beta
- Hostmodus: ein gemeinsames Anzeigegerät (Tablet/Fernseher/Laptop) zeigt das volle Playboard und spielt den Song für alle hörbar ab, während jedes Handy nur die eigene Zeitleiste zeigt und stumm bleibt. Das Anzeigegerät authentifiziert sich über einen eigenen, zeitlich begrenzten Token statt eines Logins — kollidiert also nicht mit der Single-Active-Session-Regel (ein Login dort hätte sonst den Spieler von seinem eigenen Handy geworfen). Beitritt für Mitspieler direkt per QR-Code vom großen Bildschirm
- Bildschirm bleibt wach während einer laufenden Partie (Screen Wake Lock) — auf jedem Gerät, nicht nur dem Anzeigegerät. Erfordert einen sicheren Kontext (HTTPS oder
localhost) - Persistenter Games-Played-Zähler: die "gespielte Spiele auf dem Server"-Statistik überlebt jetzt das automatische Aufräumen inaktiver Tische — vorher gingen abgeschlossene Partien nach 60 Minuten Inaktivität wieder aus der Zählung verloren, weil sie an der Tisch-Zeile hing
- Kein stiller Stale-Cache mehr:
index.htmlwird jetzt mitCache-Control: no-cacheausgeliefert (gehashte/assets/*-Dateien weiterhin langfristig gecacht) — vorher konnte ein Handy nach einem Redeploy tagelang die alte Version weiterzeigen, ohne dass ein harter Reload gemacht wurde - Playboard-Mobile-Fixes: eigene Höhen-Media-Query für kurze Querformat-Viewports (der bisherige Breakpoint zielte nur auf schmale Hochformat-Screens), ein CSS-Grid-Overflow-Fix, der die Zeile bei schmalen Bildschirmen über den Rand hinausschob, sowie
user-select: nonegegen einen Android-Bug, bei dem Antippen von UI-Text die Wörterbuch-Einblendung auslöste
Installation
Schnellstart mit Docker (empfohlen)
```bash
git clone https://github.com/noyse27/adolar-songster.git
cd adolar-songster
docker compose up --build
```
Startet Postgres, spielt die Migrationen ein und startet Backend (Port 4000) und Frontend (Port 5173).
- Frontend: http://localhost:5173
- Backend-Health: http://localhost:4000/api/v1/health
Einrichtung (3-Schritte-Onboarding):
- `.env` bzw. `backend/.env.example` bei Bedarf anpassen (z. B. `JWT_SECRET` für den Produktivbetrieb setzen)
- `docker compose up --build`
- Im Browser http://localhost:5173 öffnen — der Einrichtungsassistent führt auf einem frischen System durch Admin-Anlage, erste Einladung, Testtisch und einen abschließenden Funktionstest. Existiert bereits ein Admin, zeigt der Assistent das direkt an.
Danach per `POST /api/v1/auth/login` einloggen und mit dem `accessToken` weitere Invites erzeugen (`POST /api/v1/invites`). API-Details siehe docs/Adolar_Songster_API_Spezifikation_v1_20260821.md.
Für den Hostmodus außerdem: das Anzeigegerät braucht keinen eigenen Login — im Tisch-Vorraum auf "Anzeigegerät verbinden" tippen und den entstehenden Link/QR-Code auf dem gemeinsamen Bildschirm öffnen. Für den Wake Lock auf echten Handys muss der Stack über HTTPS erreichbar sein (z. B. via Reverse-Proxy mit Let's-Encrypt-Zertifikat); Schritt-für-Schritt-Anleitung für Einsteiger siehe docs/Adolar_Songster_Hostmodus_Anleitung_v1_20260825.md.
Optional: für die Musikquelle über Adolar `ADOLAR_BASE_URL`/`ADOLAR_API_TOKEN` in `backend/.env` setzen (Bearer-Token mit `product=songster`, erstellt über Adolar Webs Admin-Einstellungen). Ohne Adolar-Anbindung nutzt Songster den lokal admin-gepflegten Song-Pool.
Lokale Entwicklung ohne Docker
Voraussetzung: Node.js 22, laufende PostgreSQL-Instanz.
```bash
npm install
cp backend/.env.example backend/.env # DATABASE_URL ggf. anpassen
npm run --workspace backend migrate:up
npm run --workspace backend dev # Backend auf Port 4000
npm run --workspace frontend dev # Frontend auf Port 5173
```
Tests
```bash
npm run lint
npm run test:unit
npm run test:integration # benötigt DATABASE_URL gegen eine laufende Postgres-Instanz
npm run build
```
Bekannter Stand: Beta — Kernspiel plus Hostmodus sind vollständig getestet (126 Backend-Tests, 24 Suiten, CI grün inkl. CodeQL/Docker-Image-Scan), aber weiterhin nicht produktionsgehärtet für große Nutzergruppen.