Commit graph

116 commits

Author SHA1 Message Date
Daniel
967f72f080 Fix: Soundboard inherits global theme instead of hardcoded Discord Blurple
All checks were successful
Build & Deploy / build (push) Successful in 45s
Build & Deploy / deploy (push) Successful in 4s
Build & Deploy / bump-version (push) Successful in 2s
Removed hardcoded --accent, --bg-*, --text-*, --font, --radius, --transition
from .sb-app so it inherits theme vars from .hub-app[data-theme].
Keeps only soundboard-specific vars (modifiers, shadows, card sizes).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:41:57 +01:00
Daniel
6d161f3482 Centralize color theme: single picker in Settings modal
All checks were successful
Build & Deploy / build (push) Successful in 42s
Build & Deploy / deploy (push) Successful in 4s
Build & Deploy / bump-version (push) Successful in 3s
- Add Settings button (gear icon) to header
- Add Settings modal with unified color theme picker
- Move theme state to App.tsx, apply data-theme on .hub-app root
- Global CSS themes: ember, amethyst, jade, ocean, rose
- Remove per-plugin theme pickers from Soundboard and Radio
- Remove per-plugin theme CSS from soundboard.css and styles.css
- Radio globe colors update via MutationObserver on theme change
- Single localStorage key: hub-theme (replaces jb-theme + radio-theme)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:36:30 +01:00
Daniel
44ad953be2 Fix refresh button to match Styleguide §7 Icon-Button pattern
All checks were successful
Build & Deploy / build (push) Successful in 57s
Build & Deploy / deploy (push) Successful in 4s
Build & Deploy / bump-version (push) Successful in 7s
Use --bg-tertiary hover + --text-normal instead of accent colors.
Remove custom spin animation and scale transform. Strict adherence
to the documented Icon-Button component pattern.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:22:02 +01:00
Daniel
0f43f78d71 Redesign refresh button: SVG icon, ghost style, spin hover
Some checks failed
Build & Deploy / deploy (push) Blocked by required conditions
Build & Deploy / bump-version (push) Blocked by required conditions
Build & Deploy / build (push) Has been cancelled
Replace emoji with clean SVG refresh icon. Remove border for
ghost-style matching other header elements. Add 180deg rotation
on hover for visual feedback.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:20:43 +01:00
Daniel
81801dcd88 Redesign refresh button to match CI styleguide [skip ci] 2026-03-11 11:08:19 +01:00
Daniel
c9b9b08c64 v1.9.0
Some checks failed
Build & Deploy / build (push) Successful in 1m49s
Build & Deploy / deploy (push) Failing after 3s
Build & Deploy / bump-version (push) Has been skipped
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:35:36 +01:00
Daniel
43df3d375c Add: Soundboard Main-Branch Design Reference
All checks were successful
Build & Deploy / build (push) Successful in 16s
Build & Deploy / deploy (push) Has been skipped
Build & Deploy / bump-version (push) Has been skipped
Snapshot des original Soundboard-Designs (Discord Blurple, Pills, Glows)
als Styleguide-Dokument fuer spaetere Referenz.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:35:00 +01:00
Daniel
b18d6a66cc Add: Styleguide fuer einheitliches Plugin-Design
All checks were successful
Build & Deploy / build (push) Successful in 18s
Build & Deploy / deploy (push) Has been skipped
Build & Deploy / bump-version (push) Has been skipped
Dokumentiert alle Design-Tokens, Component-Patterns, Naming-Conventions,
Layout-Regeln und Do/Dont-Regeln basierend auf dem CI Redesign v3.
Enthaelt ein Plugin-Template als Starter-CSS fuer neue Plugins.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 10:31:35 +01:00
Daniel
4e0d691aa1 CI Redesign: Warm-Brown Palette, DM Sans, 4px Radius (basierend auf main)
All checks were successful
Build & Deploy / build (push) Successful in 58s
Build & Deploy / deploy (push) Has been skipped
Build & Deploy / bump-version (push) Has been skipped
- Farben: Discord Blau-Grau -> Warme Braun-Palette (#1a1810, #211e17, #2a2620)
- Fonts: Segoe UI -> DM Sans + DM Mono (Google Fonts)
- Border-Radius: max 6px, Standard 4px (war 8-20px)
- Header-Hoehe: 44px (war 56px)
- Glow-Effekte und dekorative Gradients entfernt
- backdrop-filter: blur nur noch auf Modal-Overlays
- Font-Size: 13px (war 15px)
- Plugin-CSS angepasst (Soundboard, Game-Library, LoLStats, Streaming, Watch-Together)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 02:15:31 +01:00
Daniel
d135aab6dc feat: add Steam OpenID login
All checks were successful
Build & Deploy / build (push) Successful in 47s
Build & Deploy / deploy (push) Successful in 4s
Build & Deploy / bump-version (push) Successful in 2s
- Add Steam OpenID 2.0 authentication routes (login + callback)
- Enable Steam button in LoginModal (was placeholder)
- Unified user ID system: getUserId() supports Discord, Steam, Admin
- Update soundboard user-sound endpoints for Steam users
- UserSettings now works for both Discord and Steam providers
- Steam hover uses brand color #66c0f4

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:18:44 +01:00
Daniel
99d69f30ba feat: Discord OAuth Login + User Settings GUI
All checks were successful
Build & Deploy / build (push) Successful in 44s
Build & Deploy / deploy (push) Successful in 5s
Build & Deploy / bump-version (push) Successful in 2s
- Neues unified Login-Modal (Discord, Steam, Admin) ersetzt alten Admin-Login
- Discord OAuth2 Backend (server/src/core/discord-auth.ts)
- User Settings Panel: Entrance/Exit Sounds per Web-GUI konfigurierbar
- API-Endpoints: /api/soundboard/user/{sounds,entrance,exit}
- Session-Management via HMAC-signierte Cookies (hub_session)
- Steam-Button als Platzhalter (bald verfuegbar)
- Backward-kompatibel mit bestehendem Admin-Cookie

Benoetigte neue Env-Vars: DISCORD_CLIENT_ID, DISCORD_CLIENT_SECRET
Discord Redirect URI: PUBLIC_URL/api/auth/discord/callback

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 20:41:31 +01:00
Daniel
7ed6b81584 Fix: Volume-Slider reaktionsschneller (Latenz reduziert)
- Server: writeState() → writeStateDebounced() im Volume-Endpoint
  (kein synchroner Disk-Write bei jedem Slider-Tick mehr)
- Frontend: Debounce von 120ms auf 50ms reduziert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 23:58:03 +01:00
Daniel
8951f46536 Admin Panel: Logout-Button in Sidebar hinzugefügt
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:42:40 +01:00
Daniel
3f175ca02c Unified Admin Panel: 3 Plugin-Settings in ein zentrales Modal
- Neues AdminPanel.tsx mit Sidebar-Navigation (Soundboard/Streaming/Game Library)
- Lazy-Loading: Daten werden erst beim Tab-Wechsel geladen
- Admin-Button im Header öffnet jetzt das zentrale Panel (Rechtsklick = Logout)
- Admin-Code aus SoundboardTab, StreamingTab und GameLibraryTab entfernt
- ~500 Zeilen Plugin-Code entfernt, durch ~620 Zeilen zentrales Panel ersetzt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 22:33:19 +01:00
Daniel
e9931d82af Refactor: Zentralisiertes Admin-Login im Top-Menü
- Admin-Login aus 3 Plugins (Soundboard, Streaming, Game Library) entfernt
- Zentraler 🔒/🔓 Button im Header mit Login-Modal
- isAdmin wird als Prop an alle Plugins weitergegeben
- Settings-Buttons (Gear-Icons) nur sichtbar wenn eingeloggt
- Alle Plugins nutzen weiterhin den shared admin-Cookie für Operationen
- Login/Logout-Formulare und Buttons aus Plugin-Panels entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:59:21 +01:00
Daniel
b556863f52 Fix: Admin-Button entfernt der auf main nicht existierende State-Variablen referenzierte
Cherry-Pick von 041557c8 hatte versehentlich Admin-Button JSX mit übernommen,
aber adminLoggedIn/setShowAdminModal existieren nur auf nightly (nach b3080fb7).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:44:33 +01:00
Daniel
65a1d6e869 Streaming: Qualitaets-Dropdown schmaler (250px -> 210px)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:38:44 +01:00
Daniel
e54f240523 Streaming: fps bei allen Qualitaetsstufen anzeigen
Labels: Niedrig · 4 Mbit · 60fps bis Max · 50 Mbit · 165fps.
Dropdown auf 250px verbreitert.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:38:44 +01:00
Daniel
a99dc4211c UI: Avatar entfernt, Streaming-Topbar mit Labels
- DK-Avatar aus Header entfernt (kein Zweck)
- Streaming-Felder haben jetzt Ueberschriften: Name, Titel, Passwort, Qualitaet
- Passwort-Feld von 140px auf 180px verbreitert
- Topbar aligned an Feldunterkante (flex-end)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:38:44 +01:00
Daniel
1bd0fa14bc Streaming: Presets zeigen jetzt Bitrate statt Aufloesung
Aufloesung ist immer nativ (Monitor des Broadcasters), die Presets
steuern nur Bitrate und FPS. Labels entsprechend angepasst:
Niedrig (4 Mbit) bis Max (50 Mbit/165Hz). Dropdown auf 200px.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:38:13 +01:00
Daniel
b2f772208f Streaming: 30fps Presets entfernt, Dropdown breiter
Qualitaetsstufen: 720p60, 1080p60, 2K60, 4K60, 4K165 Ultra.
Dropdown von 120px auf 160px verbreitert damit Text nicht abgeschnitten wird.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 21:38:13 +01:00
Daniel
ecd5e96ee2 Fix: Gemeinsame Spiele - profileId zu steamId Resolution
Das Multi-Platform Profile System hatte den Common-Games-Endpoint
kaputt gemacht: Client sendete profileIds (UUIDs), Server erwartete
steamIds. Endpoint loest jetzt profileIds korrekt auf.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 00:47:40 +01:00
Daniel
905f156d47 LoLStats: Champion Tier List pro Game Mode (ARAM, Arena, URF, etc.)
Neue op.gg Champion API (lol-api-champion.op.gg) fuer Tier-Daten.
30-Min In-Memory Cache pro Mode+Region. Neuer Bereich unterhalb
der Match History mit Mode-Tabs, Champion-Grid, Tier-Badges und
Filter. Arena-Mode zeigt Avg Placement statt KDA.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 00:36:13 +01:00
Daniel
432f9c610f v1.8.0: README aktualisiert + Version Bump
README komplett ueberarbeitet mit allen 7 Plugins, Electron Desktop App,
Streaming Qualitaets-Presets, aktualisierte Env-Variablen und CI/CD Doku.
Version auf 1.8.0 in VERSION, server, web und electron package.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 00:20:07 +01:00
Daniel
bd5c190cef Streaming: 4K165 Ultra Preset (50 Mbit/s)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 00:03:46 +01:00
Daniel
22554db36c Fix: Fullscreen vor Viewer-Unmount verlassen
cleanupViewer() ruft jetzt document.exitFullscreen() auf,
bevor der Viewer aus dem DOM entfernt wird. Verhindert
dass die Navbar nach Fullscreen-Stream verschwindet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 23:50:16 +01:00
Daniel
9edc93a0cd Streaming: Qualitäts-Presets (720p30 bis 4K60)
Dropdown im Topbar zum Wählen der Stream-Qualität vor dem Start:
- 720p30 (2.5 Mbit/s), 1080p30 (5), 1080p60 (8), 1440p60 (14), 4K60 (25)
- Steuert getDisplayMedia-Constraints + WebRTC maxBitrate/maxFramerate
- Default: 1080p60 (wie bisher)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 22:51:05 +01:00
Daniel
1c674191c9 Fix: Stream-Link Auto-Join Race Condition + Autoplay
- remoteStreamRef speichert MediaStream aus ontrack, damit er nicht
  verloren geht wenn das <video>-Element noch nicht gemountet ist
- useEffect verbindet Stream mit Video sobald beides bereit ist
- Explizites play() mit Mute-Fallback bei Autoplay-Blockierung
  (neuer Tab ohne User-Interaktion, z.B. Discord-Link)
- Debug-Logging aus Notification-Config entfernt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:48:31 +01:00
Daniel
e3ad35fbc7 Refresh-Button neben Version in Header
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:30:10 +01:00
Daniel
34e193fb92 Debug: Notification config save/toggle logging
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:24:51 +01:00
Daniel
1bcfef68fe Navbar: Nur Plugins mit Frontend-Component als Tab anzeigen
Filtert Backend-only Plugins (z.B. Notifications) aus der Tab-Leiste.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 20:11:19 +01:00
Daniel
1cf79ef917 Notification-Bot: Discord-Benachrichtigungen für Streams
- Neues Notification-Plugin mit eigenem Discord-Bot
- Admin-Modal im Streaming-Tab für Channel-Konfiguration
- Automatische Benachrichtigungen bei Stream-Start/Ende
- Stream-Links mit Passwort-Hinweis in Discord-Embeds
- Konfigurierbare Events pro Channel (stream_start, stream_end)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:29:52 +01:00
Daniel
2c570febd1 Soundboard: Drag & Drop mit Rename-Modal
- MP3/WAV per Drag & Drop ablegen öffnet jetzt ein Rename-Modal
- Jede Datei einzeln benennen vor dem Upload (sequentiell bei mehreren)
- Server-Upload-Endpoint unterstützt optionalen customName Parameter
- Reuse der bestehenden dl-modal CSS-Klassen für konsistentes Design
- Überspringen-Option bei mehreren Dateien

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:11:23 +01:00
Daniel
59428a2c65 Steam-Button nur in Übersicht anzeigen, nicht im Profil-Detail
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 19:00:36 +01:00
Daniel
962ea9ebfc GOG-Button nur im Profil-Detail anzeigen
GOG kann nur innerhalb eines bestehenden Profils verknuepft werden,
damit der Account dem richtigen Spieler zugeordnet wird.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 18:53:54 +01:00
Daniel
71b35d573e Game Library: Admin-Panel, Disconnect-UI, IGDB-Cache
- Admin-Panel mit Login (gleiches Passwort wie Soundboard) zum Entfernen
  von Profilen inkl. aller verknuepften Daten
- Disconnect-Buttons im Profil-Detail: Steam/GOG einzeln trennbar
- IGDB persistenter File-Cache (ueberlebt Server-Neustarts)
- SSE-Broadcast-Format korrigiert (buildProfileSummaries shared helper)
- DELETE-Endpoints fuer Profil/Steam/GOG Trennung

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:53:10 +01:00
Daniel
d909909591 Auto-Updater: Doppelstart verhindern + Download-Status sichtbar
- State-Tracking im Main-Prozess (idle/checking/downloading/ready)
- Manueller Check gibt aktuellen Status zurück statt Squirrel-Doppelstart
- Auto-Check nur wenn idle (kein Konflikt mit laufendem Download)
- Frontend synchronisiert Status beim Mount und Modal-Öffnen
- getUpdateStatus IPC für synchrone Status-Abfrage

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 16:27:35 +01:00
Daniel
3e8febb851 GOG Login: Nahtloser Auth-Flow wie Steam (kein Code-Paste noetig)
- Electron: Fängt GOG Redirect automatisch ab (will-redirect Interceptor)
- Code-Exchange passiert im Hintergrund, User sieht nur Erfolgs-Popup
- GOG Auth-URLs (auth.gog.com, login.gog.com, embed.gog.com) in Popup erlaubt
- Server: GET /gog/login Redirect + POST /gog/exchange Endpoint
- Browser-Fallback: Code-Paste Dialog falls nicht in Electron
- gog.ts: Feste redirect_uri (embed.gog.com/on_login_success)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:41:21 +01:00
Daniel
ee5c29dd7b Game Library: Multi-Platform Profile System + GOG Integration
- Neues Profile-System: User können Steam und GOG verknüpfen
- GOG OAuth2 Login-Flow (auth.gog.com)
- GOG API Service (gog.ts): Token-Management, Spieleliste, User-Info
- Server: Profile-Datenmodell, Migration bestehender Steam-Users
- Frontend: Login-Bar (Steam + GOG), Profile-Chips mit Platform-Badges
- Cross-Platform Game-Merging mit Deduplizierung
- Profile-Detail mit "GOG verknüpfen" Option

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:34:43 +01:00
Daniel
f64aac707a Game Library: Genre-Filter + Sortierung (Spielzeit/Bewertung/Name)
- Genre-Chips als Filter-Bar in User- und Common-Games-Ansicht
- Sortierung umschaltbar: Spielzeit, Bewertung, Name
- Multi-Genre-Auswahl mit "Alle"-Reset
- Common Games zeigen jetzt auch Genres und Ratings

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 10:42:21 +01:00
Daniel
d6973c811c Entferne Plattform-Badges aus Game Library
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 02:01:46 +01:00
Daniel
4994d5c245 IGDB auto-enrichment: Server-Start + Frontend auto-trigger
- Server enriched bestehende User beim Plugin-Start automatisch (fire-and-forget)
- Frontend triggert IGDB-Enrichment automatisch beim Öffnen einer User-Bibliothek
- Reduzierte Log-Ausgabe (kein Spam pro Cache-Hit mehr)
- IGDB-Button zeigt Lade-Animation während Enrichment

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:58:11 +01:00
Daniel
b404c20eca IGDB-Integration für Game Library + Electron Update-Button im Version-Modal
- Neues IGDB-Service-Modul (igdb.ts): Token-Management, Rate-Limiting, Game-Lookup per Steam-AppID/Name, Batch-Enrichment mit In-Memory-Cache
- Server: 2 neue Routes (/igdb/enrich/:steamId, /igdb/game/:appid), Auto-Enrichment bei Steam-Login und Refresh
- Frontend: IGDB-Cover, Genre-Tags, Plattform-Badges, farbcodiertes Rating, IGDB-Anreichern-Button
- Version-Modal: Update-Button für Electron-App (checkForUpdates/installUpdate), Desktop-App-Version anzeigen
- CSS: Styles für IGDB-Elemente und Update-UI

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 01:48:27 +01:00
Daniel
e146a28416 Streaming: Bildschirmauswahl-Picker, Passwort optional, Windows-Toast-Notifications
- Electron: setDisplayMediaRequestHandler zeigt jetzt immer einen modalen Picker
  mit Thumbnails statt automatisch die letzte Quelle zu verwenden
- Passwort bei Streams ist jetzt optional (Server + Frontend)
- Streams ohne Passwort: direkter Beitritt ohne Modal
- hasPassword wird korrekt im stream_available Event übertragen
- Windows Toast-Notifications via Electron Notification API für
  "Stream gestartet" und "Neuer Stream" Events
- Browser-Variante nutzt weiterhin Web Notification API

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 00:16:48 +01:00
Daniel
dec6be5476 Fix: Seek funktioniert jetzt für alle User — report_time überschreibt Seek nicht mehr
- Server: report_time ignoriert Host-Updates für 2s nach einem Seek
- Frontend: seekingRef Guard auf 3s erhöht um Sync-Pulse-Rücksetzung zu verhindern

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:56:04 +01:00
Daniel
253a249fc7 Watch Together: alle User haben Stream-Kontrolle, Dailymotion-Support, YouTube-Qualitätswahl
- Host-Only-Beschränkung für play/pause/resume/seek/skip entfernt — alle Raum-Mitglieder können jetzt die Wiedergabe steuern
- Dailymotion-Videos können jetzt abgespielt werden (postMessage API, iframe-basiert)
- YouTube-Videoqualität einstellbar (Standard: 1080p, wird in localStorage gespeichert)
- Queue-Items sind für alle User klickbar
- "Gesehene entfernen"-Button für alle sichtbar

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:49:31 +01:00
Daniel
87b4467995 Feature: Game Library Plugin - Steam Spielebibliothek
- Neues Plugin: game-library mit Steam OpenID 2.0 Login
- Steam GetOwnedGames API zum Abrufen der Spielebibliothek
- Gemeinsame Spiele finden (Schnittmenge mehrerer Bibliotheken)
- Spielesuche ueber alle verbundenen User
- User-Profil mit Spielzeit-Sortierung
- JSON-basierte Persistenz in /data/game-library.json
- Steam API Key als CI/CD Variable konfiguriert
- Frontend: User Cards, Common Games Finder, Suchfunktion

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 23:31:40 +01:00
Daniel
33e718ddf6 Remove: Electron Desktop-App Versionsnummer und Update-Check
Desktop App ist nur ein Wrapper - Web-Inhalte updaten sich automatisch.
Separate Version verwirrt User wenn sie nicht übereinstimmt.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:44:00 +01:00
Daniel
8aefb49ff3 Feature: Watch Together - Chat, Voting, Sync-Indicator, Join-per-Link
- Raumliste zeigt jetzt Teilnehmernamen
- Join per Link (?wt=roomId) für einfaches Teilen
- Sync-Indikator (grün/gelb/rot) zeigt Synchronstatus
- Pause/Skip-Voting für Nicht-Host-Teilnehmer
- In-Room Chat mit Nachrichtenverlauf
- "Gesehene entfernen" Button für Host in der Queue
- REST endpoint GET /api/watch-together/room/:id

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:38:56 +01:00
Daniel
963bb1b775 Watch Together: Videos bleiben in Queue mit Watched-Haken
Statt Videos nach dem Abspielen aus der Warteschlange zu entfernen,
bleiben sie drin und werden mit einem gruenen Haken markiert.
Separate History-Section entfernt — die Queue IST die History.
Videos bleiben klickbar zum erneuten Abspielen.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:23:45 +01:00