Commit graph

213 commits

Author SHA1 Message Date
Bot
9ca62566cb ci: configure dind for local insecure registry 2026-03-02 00:09:57 +01:00
Bot
99181d8965 ci: push jukebox images to local gitlab registry 2026-03-02 00:07:28 +01:00
Bot
df58b5cc93 Merge branch 'feature/nightly' into main 2026-03-02 00:05:17 +01:00
Bot
db9a18b367 Fix: TypeScript-Fehler im multer Upload-Endpoint
- @types/multer zu devDependencies hinzugefügt (fehlte → TS7016)
- Explizite Callback-Typen in diskStorage/fileFilter (TS7006)
- Express.Multer.File durch lokalen MulterFile-Type ersetzt (TS2694)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:25:10 +01:00
Bot
52c86240af Feat: Drag & Drop MP3/WAV Upload mit Progress-Tracking
Backend:
- multer reaktiviert (war auskommentiert) mit diskStorage + Collision-Handling
- /api/upload (POST, admin-protected): bis zu 20 Dateien gleichzeitig
- MP3/WAV-Filter (50MB Limit), sofortige Hintergrund-Normalisierung nach Upload

Frontend:
- Globale window dragenter/dragleave/drop Listener mit Counter gegen false-positives
- Drag-Overlay: Vollbild-Blur + animierter Drop-Zone (pulsierender Accent-Border, bouncing Icon)
- Upload-Queue: floating Card bottom-right mit Per-Datei Progressbar + Status-Icons
  (sync-Animation beim Hochladen, check_circle grün, error rot)
- Auto-Refresh der Soundliste + Analytics nach Upload
- Auto-Dismiss der Queue nach 3.5s

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 22:15:07 +01:00
Bot
a61663166f Config: NORM_CONCURRENCY Default auf 2 (i5/i7 Zielplattform)
Standard von 4 auf 2 gesenkt – passend für i5-13400 (10-Kern Target).
Lässt mehr Headroom für Discord-Wiedergabe und Node.js-Event-Loop.
Per NORM_CONCURRENCY env var weiterhin anpassbar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:30:37 +01:00
Bot
7a7056d72b Perf: Paralleler Norm-Cache-Sync mit Worker-Pool
Sequentieller Sync ersetzt durch parallele Worker:
- Standard: 4 gleichzeitige ffmpeg-Prozesse (NORM_CONCURRENCY=4)
- Konfigurierbar per NORM_CONCURRENCY env var
- Sync-Zeit bei vielen Sounds 4x schneller (linear mit Parallelität)
- Logging gibt Parallelität und Dauer aus

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-01 21:29:53 +01:00
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
0aacce494f feat(ci): add gitlab ci 2026-02-26 17:03:21 +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