commit a22ddfb6d376b8a180de28fb3e124c3cc8831700 Author: David Keane Date: Tue May 26 09:40:23 2026 +0100 chore: initial commit — Radio v0.1.0 (Phase A complete) First release of a-radio — a free, focused SomaFM player for the WordPress admin. Extracted-and-rebuilt from RangerPlex's RadioPlayer component, simplified along the way (no Node CORS proxy needed; the browser plays SomaFM streams directly). Phase A deliverables — all in this commit: PLAYER SURFACES - Dashboard widget on WP Admin → Dashboard (compact: play/pause + station select + volume). - Dedicated admin page at WP Admin → Radio → My Radio (larger layout, station genre badge, volume %% display). - Both surfaces share the same JS — picking a station on one mirrors to the other within the same admin session. STATIONS - 44 SomaFM stations grouped by 10 genres (Ambient / Electronic / Lounge / Rock / Metal / Jazz / World / Reggae / Holiday / Specials). - Ported verbatim from RangerPlex's RadioPlayer.tsx. - Default station: Groove Salad (most popular SomaFM channel, safe ambient/coding pick). STATE - Per-user state stored in user_meta under key `radio_state`: { station_id, volume, theme, last_played_at }. - Settings page lets the user pick default station, default volume, theme (auto/light/dark), and hide the dashboard widget. - AJAX endpoint `radio_save_state` persists changes without a page reload. Nonce-protected, capability-checked, only known keys accepted, station validated against the list, volume clamped to [0,1]. UPDATES - Self-hosted updater wired to Gitea (ranger/a-radio) from commit 1. - Direct port of Buddy's inc/updater.php with BUDDY_* → RADIO_* and buddy_* → radio_* renames. Same 12h-success / 1h-error caching. ARCHITECTURE - No `wp` prefix (trademark policy). - GPL v2+ public Gitea repo from day one. - Vanilla JS only — no React, no webpack, no minified-only files. - CSS-only animations, all assets local. - Single H1 per admin page. - Direct HTML5