# Rockbox! Radio > Live online radio hosted by JayTee — broadcasting handcrafted setlists of rock, prog, jazz, and classic reggae 24/7. Rockbox! Radio is an independent, host-driven online radio station streaming from radio.9300.co.za. The station broadcasts handcrafted setlists of mostly '70s, '80s, and '90s rock, prog, selected pop, jazz, and classic reggae. Live shows are hosted by JayTee every Wednesday and Friday evening, 6pm to 9pm South African time (Africa/Johannesburg, UTC+2). Outside of live hours, a curated 24/7 stream runs continuously. This file is intended for AI assistants, search crawlers, and language models. It summarises what Rockbox! Radio is, what pages exist, what features are available, and how the site is built — in plain text, no HTML. ## Pages - [Home](https://9300.co.za/) — Live player, recently played, top genres, broadcast schedule, podcasts, FAQ CTA, connect section, live chat (when live) - [FAQ](https://9300.co.za/faq) — 18 questions across 5 categories: Getting Started (beginner-friendly), Broadcasting, App & PWA, Technical, Contact - [About](https://9300.co.za/about) — Station introduction + host bio (JayTee) with portrait, stats, and calendar download - [Privacy Policy](https://9300.co.za/privacy) — How listener data, GeoIP, analytics, and PWA stats are handled - [Terms of Service](https://9300.co.za/terms) — Rules and guidelines for using the website, stream, and PWA ## Key Features - **Persistent audio** — The stream keeps playing when navigating between pages; it only stops when you pause it - **Real-time waveform** — 4 visualizer modes (bars, line, mirror, wave) using the Web Audio API AnalyserNode with linear frequency mapping - **Full-screen now playing** — Immersive mode with the Rockbox! Radio cover art + heavy background diffusion (press F) - **PWA** — Installable as an app on desktop, Android, iOS, and Google TV / Android TV - **PWA auto-update detection** — Checks for new builds every 5 minutes; shows platform-specific refresh instructions - **Personal listening stats** — Private to each user; only visible after installing the PWA (never public) - **Listener logging** — Sessions logged to Neon PostgreSQL with GeoIP location data (MaxMind) - **4-band equalizer** — None, Bass, Vocal, Rock, Spatial presets (BiquadFilterNode chain: lowshelf + peaking + highshelf) - **Spatial audio warning** — Popup warns that the Spatial preset works best on Dolby Atmos / DTS:X devices - **Schedule reminders** — PWA users get a "Remind Me" button (notification 5 min before live); non-PWA users get "Add to my Calendar" (.ics download) - **Calendar export** — Download a .ics file with 8 weeks of Wed/Fri 6-9pm SA live shows - **Keyboard shortcuts** — Space (play/pause), M (mute), E (waveform cycle), F (fullscreen), ? (help), Cmd+K (command palette) - **Mobile quick actions** — Floating action button with play/pause, mute, waveform cycle, and fullscreen for touch devices - **Live show countdown** — Real-time countdown to the next live broadcast - **Live listener chat** — Available only during live shows (Wed/Fri 6-9pm SA time); requires registration - **Admin panel** — Chat management, registered users directory, visual social graph of all listeners + PWA installs - **Google TV / Android TV support** — TV-optimised manifest, D-pad focus styles, 10-foot UI ## Tech Stack - Next.js 16 (App Router, Turbopack) - TypeScript 5 - Tailwind CSS 4 + shadcn/ui (New York style) - Prisma ORM (Neon PostgreSQL) - Zustand (persistent player state) - Framer Motion (animations) - Web Audio API (AnalyserNode, GainNode, BiquadFilterNode) - Sharp (image optimization) - Vercel Speed Insights + Analytics - MaxMind GeoIP2 (listener location) ## Stream - Stream URL: https://radio.9300.co.za/listen/rockbox-radio/radio.mp3 - Now Playing API: https://radio.9300.co.za/api/nowplaying/rockbox-radio - Hosted by: AzuraCast - Live shows: Wednesday & Friday, 6pm-9pm South African time (UTC+2) ## API Endpoints (internal, not for public use) - `GET /api/nowplaying` — AzuraCast now-playing proxy (10s cache, art URLs proxied through /api/art) - `GET /api/podcasts` — AzuraCast podcasts proxy - `GET/POST /api/listener-log` — Listener session logging (start/stop) with GeoIP - `GET /api/user-stats?uniqueId=xxx` — Per-user private listening stats - `GET /api/calendar?weeks=8` — .ics calendar file generator (Wed/Fri 6-9pm SA) - `GET /api/version` — Build version (for PWA update detection) - `POST /api/pwa-install` — PWA install event logging (GeoIP + platform) - `GET /api/social-graph?adminKey=xxx` — Admin social graph data (admin-gated) - `GET/POST/DELETE /api/chat` — Live chat messages - `GET/POST /api/chat-user` — Chat user registration - `GET /api/chat-users?adminKey=xxx` — All registered chat users (admin-gated) - `GET /api/logged-songs?limit=N` — recently logged songs (default 12, max 500; admin can fetch all) - `GET /api/stream-status` — Icecast status.xsl parser (bitrate, listeners) - `GET /api/art?url=xxx` — Album art proxy (avoids CORS from AzuraCast) - `POST/GET/DELETE /api/admin-auth` — Admin login/session/logout (bcrypt + httpOnly cookie) - `GET/POST/DELETE /api/broadcaster-notes?adminKey=xxx` — Developer Notes (admin-gated) — POST fires an SMTP email to armandt@armandtviljoen.com - `GET /api/admin-sessions?adminKey=xxx` — Admin session count (Super Admin logins, admin-gated) ## Security - Admin panel uses username + password authentication with bcrypt hashing (12 rounds) - Session cookies are httpOnly, secure (production), sameSite=strict, 24h expiry - All admin API endpoints are admin-gated (session or adminKey check) - No duplicate entries on any database table (unique constraints on all models) - Right-click disabled site-wide - `suppressHydrationWarning` on html + body (prevents React #418 from browser extensions) - robots.txt blocks /admin, /api/*, and all sensitive endpoints from crawlers ## Contact - Email: rockbox@9300.co.za - WhatsApp Channel: https://whatsapp.com/channel/0029VbCy22p9mrGiTrP67P1K - Website: https://9300.co.za ## Developer Designed and Developed by BrightNorth Digital Agency (https://northbrightagency.com/) ## License © NorthBright Digital U.S. All rights reserved. The Rockbox! Radio name, logo, code, and brand assets are the property of NorthBright Digital U.S. Unauthorized reproduction, redistribution, or derivative works are prohibited without written permission. ## Source Code - Repository: https://github.com/ArmandtJVil/rockbox-radio - Default branch: main