Commit graph

205 commits

Author SHA1 Message Date
Bot
68414ac257 Perf: Vollständiger Norm-Cache-Sync beim Start + Auto-Cache bei Upload/Import
- syncNormCache() beim Serverstart: normalisiert ALLE Sounds (nicht nur Top 50)
  und räumt verwaiste Cache-Dateien automatisch auf
- DM-Upload: neue Datei wird sofort im Hintergrund normalisiert
- URL-Import: Datei wird vor dem Abspielen normalisiert → direkt aus Cache
- Detailliertes Logging: neu/vorhanden/fehlgeschlagen/verwaist + Dauer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:27:33 +01:00
Bot
83b8f1acac Fix: Loudnorm-Cache korrekt als Stream lesen + Tee-Caching
Zwei Fehler behoben:
1. Gecachte PCM-Datei wurde als Pfad-String an createAudioResource übergeben
   → discord.js versuchte die headerlose PCM als Container zu proben → Rauschen/Stille
   Fix: fs.createReadStream() + StreamType.Raw

2. Erster Play wartete auf komplette ffmpeg-Verarbeitung bevor Wiedergabe startete
   Fix: Tee-Stream — ffmpeg-Output wird gleichzeitig an Player UND Cache-Datei geschrieben
   → Sofortige Wiedergabe auch beim ersten Mal, Cache wird nebenbei gefüllt

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:24:47 +01:00
Bot
4b4a61b2bd Perf: Loudnorm-Cache für minimale Play-Latenz
ffmpeg loudnorm läuft jetzt nur noch beim allerersten Play eines Sounds.
Das Ergebnis wird als PCM in .norm-cache/ gespeichert und danach direkt
abgespielt (kein ffmpeg-Spawn mehr → praktisch null Overhead).

- .norm-cache/ Verzeichnis mit automatischer Invalidierung (Quell-mtime)
- Cache-Cleanup bei Admin delete/rename
- Hintergrund-Warmup beim Serverstart: Top-50 Sounds vorab normalisieren
- Fallback auf direktes Abspielen wenn ffmpeg fehlschlägt
- .norm-cache wird aus Soundliste gefiltert

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:16:56 +01:00
Bot
9130a205f0 Refactor: Backend-Optimierungen + Volume-Debounce
- /api/play delegiert an playFilePath() statt ~120 Zeilen Duplikat-Code (inkl. fehlende Loudnorm)
- safeSoundsPath() Helfer gegen Path-Traversal bei Admin delete/rename
- writePersistedStateDebounced() reduziert Disk-I/O bei Play-Countern (2s Debounce)
- /api/sounds nutzt listAllSounds() statt duplizierte Dateisystem-Scans
- /api/play-url vor catch-all Route verschoben (war unreachable in Produktion)
- Frontend Volume-Slider mit 120ms Debounce (weniger API-Calls beim Ziehen)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:08:38 +01:00
Bot
5a41b6a622 Add MP3 URL import and analytics widgets 2026-03-01 18:56:37 +01:00
Bot
e200087a73 Restore admin sound management UI in web app 2026-03-01 16:14:46 +01:00
Bot
f90401a009 Feat: Now-Playing serverseitig syncen + in Topbar verschieben
Backend:
- nowPlaying Map trackt aktuell gespielten Sound pro Guild
- SSE broadcast { type: 'nowplaying' } bei play und stop
- nowplaying im SSE-Snapshot für neue Clients
- playFilePath Helper broadcastet ebenfalls (Party Mode)

Frontend:
- SSE-Handler für nowplaying Events (sync über alle Clients)
- Now-Playing als Pill-Badge in der Topbar (rechts, neben Channel)
- Bottombar komplett entfernt
- Fade-in Animation und accent-farbige Pill
- --accent-rgb CSS Variable für alle Themes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 16:00:22 +01:00
Bot
4661c366fb UI: Volume-Regler in Toolbar verschoben, Spielt-Anzeige persistent
- Volume-Control von Bottom-Bar in Toolbar verschoben (links von Random)
- Pill-förmiges Design passend zu Size-Slider
- "Spielt" Anzeige bleibt bis Stop oder neuer Sound sichtbar
- Anfangsbuchstaben nur beim ersten Sound jeder Gruppe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:37:40 +01:00
Bot
5f0b06550e feat(web): show initial letter only on first sound of each group
Instead of displaying the letter (A, B, C...) on every sound card,
only show it on the first card that starts with that letter. Makes
the grid much cleaner and easier to scan.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:28:53 +01:00
Bot
da0ae2b9a6 feat(web): redesign frontend to Discord-style Soundboard UI
Complete rewrite of App.tsx and styles.css to match the Discord-style
soundboard mockup design:

- Topbar: logo, custom channel dropdown, centered live clock, connection status
- Toolbar: category tabs (Alle/Neu/Favoriten), search, Random/Party/Stop
  buttons, card size slider, theme color dots (5 themes)
- Main: responsive square card grid with initial letter avatars, ripple
  effects, playing animations, favorite stars, NEW badges
- Bottom bar: now-playing wave indicator, volume slider
- Context menu on right-click (play, favorite, admin delete)
- Party mode overlay, toast notifications, admin panel
- All API integration preserved (SSE, channels, volume, play, party)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 15:20:33 +01:00
Bot
e0bbe03851 feat(web): add button size toggle (S/M/L) in header
Adds a size selector in the header bar that allows users to choose
between Small, Medium, and Large sound buttons. Choice persists
via localStorage. Responsive breakpoints also respect the setting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 02:03:04 +01:00
Bot
ba8c07f347 feat(web): complete frontend redesign — DECK theme system
Redesigned the entire frontend with a new "DECK" aesthetic:

- 5 distinctive themes: Midnight, Daylight, Neon, Vapor, Matrix
- Compact pill-shaped sound buttons with category color bars
- Tab navigation: All Sounds / Favorites / Recently Added
- Horizontal category filter chips with color coding
- Fixed bottom control bar: Stop, Random, Party, Volume
- Responsive layout optimized for 800+ sounds
- Syne + Outfit typography pairing
- Party mode with animated gradient effects
- Search with clear button, "Now Playing" indicator
- Admin panel as modal overlay
- Subtle dot grid background pattern on dark themes

Replaces the previous Apple Music-style card layout with a dense,
efficient grid that scales properly for large sound libraries.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 01:39:52 +01:00
Bot
1feb7b0836 fix(ci): override git clone url to local ip 2026-02-26 21:08:22 +01:00
Bot
46a82b7daa chore: re-trigger build for dockerhub 2026-02-26 17:11:47 +01:00
Bot
24929bbef2 feat(ci): add gitlab ci pipeline 2026-02-26 17:02:27 +01:00
Bot
a5f74d3508 fix(deps): update libsodium for node 20 esm resolution 2026-02-26 14:32:41 +01:00
Bot
b7293637be fix(docker): use npm install instead of prune 2026-02-26 14:11:51 +01:00
Bot
187905d22b feat: complete apple ui redesign on stable 2026-02-26 13:47:54 +01:00
vibe-bot
584bb5ca4f docs(readme): bump to v1.1.2; unify English; add Entrance/Exit sounds and updated DM commands 2025-08-11 00:34:15 +02:00
vibe-bot
efda74fb60 Merge feature/nightly: Entrance/Exit-Sounds, Exit-Logik nur bei Disconnect, Listener-Fix, Title-Styles & Brokkoli 2025-08-11 00:21:15 +02:00
vibe-bot
c727b445a4 fix(exit-logic): Exit nur bei Disconnect (after is null), bei Kanalwechsel unterdrücken; Lifecycle-Listener nur einmal registrieren und MaxListeners erhöhen 2025-08-11 00:14:07 +02:00
vibe-bot
0ae0817598 feat(entrance-exit): Support ?entrance remove / ?exit remove (clear mapping); Help-Text aktualisiert 2025-08-11 00:00:08 +02:00
vibe-bot
9f7aa5fc94 fix(entrance-exit): Trigger auch bei Channel-Wechsel; zusätzliche Logs; robustes Join falls keine aktive Verbindung 2025-08-10 23:50:51 +02:00
vibe-bot
64d2e91efa chore(logging): Logge gesetzte ?entrance/?exit Zuordnungen (user tag + file) 2025-08-10 23:43:40 +02:00
vibe-bot
6206087362 fix(entrance-exit): Log-Ausgaben + robustes Rejoin auf Ziel-Channel vor Playback; ignore self-events 2025-08-10 23:35:58 +02:00
vibe-bot
0fc533bbd5 fix(entrance-exit): Stelle sicher, dass VoiceStateUpdate/DM-Commands via expliziten Intents (Guilds, GuildVoiceStates, DirectMessages, MessageContent) aktiv sind 2025-08-10 23:26:00 +02:00
vibe-bot
8604e5591d feat(entrance-exit): Bot joint dem Nutzer nach (Entrance) und spielt Sound; Exit-Sound beim Verlassen; ?entrance/?exit nutzen Discord-User statt Namen 2025-08-10 23:18:43 +02:00
vibe-bot
62a4a6a55c feat(entrance-exit): Entrance/Exit-Sounds pro Nutzer via DM (?entrance/?exit); Playback bei Join/Leave wenn Bot im Channel; ?help aktualisiert; ?restart entfernt 2025-08-10 23:10:51 +02:00
vibe-bot
dbc9003eba Sync main (420 Brokkoli 20x random) into feature/nightly 2025-08-10 22:44:53 +02:00
vibe-bot
c5ea914279 feat(ui-420): Mehr Brokkoli – von 6 auf 20, zufällige Position/Delay/Dauer 2025-08-10 22:43:54 +02:00
vibe-bot
9cd8885b47 Merge feature/nightly: UI Titel-Animation (Rainbow) + 420 Titelgrün 2025-08-10 22:38:32 +02:00
vibe-bot
d810c30f73 feat(ui): Rainbow-Theme mit animiertem Farbverlauf für Seitentitel; 420-Theme Titel in #22C55E; Klasse .site-title hinzugefügt 2025-08-10 21:38:07 +02:00
vibe-bot
a27eb76777 Sync main into feature/nightly 2025-08-10 21:33:52 +02:00
vibe-bot
1fb80209f3 chore(ui): Footer-Version entfernt; zukünftige Builds zeigen keine Version im UI 2025-08-10 21:32:34 +02:00
vibe-bot
1e6c5ad402 docs: Hinweis ergänzt – Frontend MUSS hinter SSL/HTTPS laufen (sonst Discord Encrypt-Error) 2025-08-10 21:30:46 +02:00
vibe-bot
914693df1b docs(changelog): add CHANGELOG 1.1.1; chore(version): bump to 1.1.1 and update badges/env; docs(feature): FEATURE_BRANCH.md Hinweise ergänzt 2025-08-10 21:23:13 +02:00
vibe-bot
032c269798 feat(volume): Live-Sync der Lautstärke über SSE (Broadcast bei Änderung + Snapshot); Frontend reagiert auf Updates 2025-08-10 21:15:39 +02:00
vibe-bot
ef67c712fe fix(ui): Lautstärke-Slider zentriert in Chrome/Edge/Brave (WebKit-Thumb margin-top, Track-Höhe vereinheitlicht) 2025-08-10 21:09:37 +02:00
vibe-bot
ef682e1827 fix(merge): Entfernt Konfliktmarker und Versionsanzeige im Nightly-Header 2025-08-10 20:18:26 +02:00
vibe-bot
dda30d48fa chore(version): Entfernt serverseitige Versions-/Build-Logik; Nightly-Badge bleibt im Header 2025-08-10 19:49:35 +02:00
vibe-bot
7a067aa95f feat(version): API /api/health liefert build/version; UI zeigt Server-Version im Nightly-Badge 2025-08-10 19:43:09 +02:00
vibe-bot
c86f4f5875 fix(sse): Live-Update der Channel-Auswahl in allen Tabs (Ref gegen stale closure) 2025-08-10 18:54:48 +02:00
vibe-bot
e83954624c feat(channel): Serverweite Channel-Auswahl mit Persistenz und SSE-Broadcast; Frontend passt Auswahl global an 2025-08-10 18:47:33 +02:00
vibe-bot
fdf0dea3e6 feat(ui): Fuzzy-Button neben Suche verschoben; Icon-only (blur_on) mit Tooltip und ARIA-Label 2025-08-10 18:39:43 +02:00
vibe-bot
4f14b0fded UX: Titel/Labels für Channel- und Theme-Auswahl hinzugefügt 2025-08-10 17:52:33 +02:00
vibe-bot
62890e0e85 Feat: Toggle für Fuzzy-Suche (default OFF), Server respektiert ?fuzzy=1/0 2025-08-10 17:51:07 +02:00
vibe-bot
d975114768 Feat: Serverseitige Fuzzy-Suche für /api/sounds und Client-Filter vereinfacht 2025-08-10 02:59:25 +02:00
vibe-bot
6f51c493ed Nightly: Revert Drag & Drop Upload (server endpoint + header handlers removed) 2025-08-10 02:16:09 +02:00
vibe-bot
9e7b572feb Nightly: Drag & Drop Upload im Header (Admin) + Server-Upload-Endpoint (/api/upload, MP3/WAV) 2025-08-10 01:47:17 +02:00
vibe-bot
47dc9c212f Docs: Rewrote README in English v1.1.0 features, quick start, admin guide, Partymode, Docker 2025-08-10 01:27:53 +02:00