Nightwave // Radio
← Back to player

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

  1. An <audio crossOrigin="anonymous"> element streams through /api/public/stream-proxy?url=….
  2. A MediaElementAudioSourceNode feeds an AnalyserNode (fftSize 1024, smoothingTimeConstant 0.55).
  3. The visualizer reads frequency bins in a requestAnimationFrame loop and writes bar heights directly to the DOM for tight audio/visual sync.
  4. 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.