Commit graph

76 commits

Author SHA1 Message Date
Daniel
b4f3c7db4d Fix: Stop globe rotation while station panel is open
Auto-rotation now stops completely when a station list or
favorites sidebar is visible. Resumes only when all panels
are closed. Interaction-based pause (drag/scroll) also
respects open panels - won't resume after 5s timeout if
a sidebar is still showing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:40:35 +01:00
Daniel
1b2fbe27ed Fix: Size-based dot radius for radio stations
Restore d.size-dependent point radius so larger cities (more
stations) show bigger dots like Radio Garden. Formula:
radius = clamp(0.12, 0.45, 0.06 + size * 0.005)

Zoom scaling also respects per-station size.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 19:37:34 +01:00
Daniel
a923463f83 Fix: Crisp radio station dots with zoom-scaling
Replace sprite-based markers (objectsData + SpriteMaterial with
soft 64x64 gradient texture → blurry at zoom) with optimized
point meshes:

- pointResolution(24): smooth 24-sided circles (no hexagons)
- pointAltitude(0.001): nearly flat on surface (no cylinder effect)
- sqrt-based zoom scaling: dots shrink when zooming in, grow when
  zooming out → visually consistent at all zoom levels
- Removed three.js Sprite/SpriteMaterial/CanvasTexture imports

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 16:30:42 +01:00
Daniel
99421f4577 Fix radio marker object placement 2026-03-06 16:15:44 +01:00
Daniel
3d59eda3da Fix radio marker sprites and size scaling 2026-03-06 14:08:09 +01:00
Daniel
d55aaf71b1 Render radio stations as sprite particles 2026-03-06 13:58:50 +01:00
Daniel
693f719abc Switch radio globe imagery to NASA Blue Marble 2026-03-06 12:10:19 +01:00
Daniel
54a53a98b7 Improve radio globe tile sharpness 2026-03-06 12:01:41 +01:00
Daniel
b8268b4999 Fix radio globe texture rendering 2026-03-06 11:55:26 +01:00
Daniel
f18638ff57 Refactor: Radio topbar layout + fix soundboard connection modal
- Radio: Move controls from bottom bar to topbar above globe
  (guild/channel selectors, now playing, volume, connection, stop)
- Radio: Theme selector moved inline into topbar-right
- Radio: Globe now fills remaining space below topbar
- Soundboard: Fix connection modal not opening when voiceStats is null
  (modal now renders with '---' values when no voice data available)
- Both: Modal condition changed from `showConnModal && voiceStats` to
  just `showConnModal`, handling null voiceStats gracefully

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:36:01 +01:00
Daniel
63afc55836 Fix: Tile proxy for black globe + radio voicestats modal
- Globe was black because Radio Garden CDN (rg-tiles.b-cdn.net) returns
  403 without Referer: radio.garden header. Added server-side tile proxy
  /api/radio/tile/:z/:x/:y with in-memory cache (max 500 tiles).
- Added radio_voicestats SSE broadcast (every 5s) with voice ping,
  gateway ping, status, channel name, and connected-since timestamp.
- Added clickable "Verbunden" connection indicator in RadioTab bottom
  bar with live ping display and connection details modal (matching
  soundboard's existing modal pattern).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 11:19:19 +01:00
Daniel
ed7e07a9ba Feat: Dynamic tile-based globe texture (like Radio Garden)
Replace static earth texture with tile-based rendering from CDN.
Tiles load progressively (zoom 1→2→3 base), then dynamically
load zoom 4-6 as user zooms in. Mercator→equirectangular
reprojection via strip-based canvas compositing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:43:49 +01:00
Daniel
e0635b30ef Fix: Radio search results empty + texture quality
- Search API: read title/subtitle/url from _source.page (nested)
- Channel click: extract correct ID from URL (last segment)
- Replace earth texture with higher-res 4096x2048 original

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 10:00:44 +01:00
Daniel
a1a49f0ec3 fix: host NASA Earth texture locally to avoid CORS
NASA's image server blocks cross-origin requests. Downloaded the
3600x1800 Black Marble texture and serve it from web/public/.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:50:29 +01:00
Daniel
a9f81d66fd fix: sharp globe rendering - HiDPI pixel ratio + NASA 4K texture
- Set renderer pixel ratio to window.devicePixelRatio for crisp
  rendering on Retina/HiDPI displays (was defaulting to 1)
- Upgraded Earth texture from low-res three-globe example (~2K)
  to NASA Black Marble 3600x1800 for sharp detail when zooming
- Added pointResolution(6) for cleaner point geometry

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:46:18 +01:00
Daniel
8c2d75380d fix: smooth globe rotation - only rescale points on zoom change
pointRadius was recalculated on every controls change event (including
rotation frames), causing 50k+ points to re-render each frame.
Now only triggers when altitude changes >5%, keeping rotation smooth.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:44:24 +01:00
Daniel
2c0cb7a67a fix: volume slider disappearing + theme overlapping favorites
- SSE handler now distinguishes per-guild events (single NowPlaying)
  from snapshots (Record<string, NowPlaying>) to prevent state corruption
- Theme selector moved left (right: 72px) to not overlap favorites button

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:39:27 +01:00
Daniel
bac2e3b17f fix: scale radio globe points with zoom level
Points now shrink proportionally when zooming in, preventing
overlap in dense areas and making individual stations clickable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 09:35:48 +01:00
Daniel
90ef17932c feat: Radio themes + globe rotation pause on interaction
- 5 themes: Sunset (default), Midnight, Forest, Ocean, Cherry
- Theme selector dots in top-right corner, persisted to localStorage
- Globe accent colors (points, atmosphere) update with theme
- Globe pauses auto-rotation for 5s on any interaction (click, drag, scroll)
- All radio CSS vars scoped to .radio-container[data-theme]

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 02:15:06 +01:00
Daniel
d1ae2db00b feat: Radio volume control - server-wide slider synced via SSE
- Server: inlineVolume on AudioResource, POST /api/radio/volume endpoint
- Volume persisted per guild, broadcast via SSE to all clients
- Frontend: volume slider in bottom bar with debounced API calls
- Volume icon changes based on level (muted/low/normal)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 02:10:02 +01:00
Daniel
c41138f62a fix: stop globe auto-rotation on point click
Rotation continued while browsing stations, making selection impossible.
Now stops immediately when clicking any radio point.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 01:18:35 +01:00
Daniel
1d4a48cf74 fix: useRef requires initial value in strict TS mode
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 01:00:37 +01:00
Daniel
901dfe54be feat: Soundboard Plugin + Radio Globe Fixes
- Add Soundboard plugin (full Jukebox port): server + frontend + CSS
- Fix Radio Globe: swap geo coords (API returns [lng,lat] not [lat,lng])
- Fix Radio stations showing "Unbekannt": use item.page.title + fix channel ID regex
- Add DirectMessages + MessageContent intents for DM commands
- Register SoundboardTab in App.tsx with scoped theme/card-size CSS vars

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-06 00:51:07 +01:00
Daniel
db55d41eee fix: TypeScript-Fehler in RadioTab (useRef + Globe Konstruktor)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 23:27:14 +01:00
Daniel
847c963d86 feat: Radio Plugin – 3D Globe mit weltweiten Radiosendern
- Radio Garden API Client (30K+ Orte, Sender-Suche, Stream-URL Auflösung)
- Discord Voice Streaming via ffmpeg (PCM Pipeline)
- Interactive 3D Globe (globe.gl) mit allen Radiosender-Standorten
- Sender-Panel mit Play/Stop/Favoriten
- Live-Suche nach Sendern und Städten
- Now-Playing Bar mit Equalizer-Animation
- Guild/Voice-Channel Auswahl
- SSE Broadcasting für Live-Updates
- Favoriten-System mit Persistenz
- Responsive Design (Mobile/Tablet/Desktop)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 23:23:52 +01:00
Claude Code
ae1c41f0ae Initial commit: Gaming Hub foundation
Plugin-based Discord bot framework with web frontend:
- Core: Discord.js client, SSE broadcast, JSON persistence
- Plugin system: lifecycle hooks (init, onReady, routes, snapshot, destroy)
- Web: React 19 + Vite 6 + TypeScript, tab-based navigation
- Docker: multi-stage build (Node 24, static ffmpeg, yt-dlp)
- GitLab CI: Kaniko with LAN registry caching

Ready for plugin development.
2026-03-05 22:52:13 +01:00