Nightwave Radio
Broadcasting from an alternate 1987
Overview
A synthwave-aesthetic internet radio player. Dark, neon, cinematic — built like a piece of software from an alternate 1987 where the internet already existed.
Features
- Curated stations — Synthwave, darksynth, vaporwave, dark ambient, darkwave, goth, EBM, industrial, dream pop (SomaFM, Nightride, Rock Antenne Gothic, Dark Wave Radomir, 0N Gothic). All curated streams are reachability-tested.
- Add your own — Paste any direct stream URL or a Radio Garden listen link and it resolves to a playable stream.
- Real-time visualizer — Web Audio API frequency analyser drives per-bin reactive bars, tuned for snappy transients.
- CORS-safe playback — Same-origin stream proxy adds CORS headers so streams from Radio Garden and small Icecast servers feed the analyser.
- Graceful failure — A station that errors is marked unavailable without breaking the app. One stream plays at a time. No autoplay.
- Synthwave grid — Perspective grid in hot pink at low opacity. Moody, minimal, not distracting.
Design
- Background
#0d0d0d, primary accent#ff2d78, secondary accent#7B2FBE - Monospace for station names and metadata, sans-serif for UI labels
Stack
- TanStack Start v1 (React 19, SSR)
- Vite 7
- Tailwind CSS v4
- Lovable Cloud (Cloudflare Workers runtime for server routes)
How playback works
- An
<audio crossOrigin="anonymous">element streams through/api/public/stream-proxy?url=…. - A
MediaElementAudioSourceNodefeeds anAnalyserNode(fftSize 1024, smoothingTimeConstant 0.55). - The visualizer reads frequency bins in a
requestAnimationFrameloop and writes bar heights directly to the DOM for tight audio/visual sync. - If the proxy fails, playback falls back to a direct
<audio>element with a pseudo-animated visualizer.
Credits
Stations courtesy of SomaFM, Nightride FM, Rock Antenne, Dark Wave Radomir, and 0N Radio. Please support them.
Built by Interrupting Cow Creative.