v0.1.0 worked but felt like a third-party React widget bolted on
top of WordPress. v0.2.0 makes the player visually native to the
WP admin: postbox container, standard Play/Pause button with text
label, admin-colour-scheme aware accents, dashboard widget no
longer renders a card inside a card.
CHANGES
- inc/admin-page.php: main page now wraps the player in a
.postbox > .postbox-header (with h2.hndle) > .inside structure.
Custom rounded card / shadow stripped.
- inc/dashboard-widget.php: bare .radio-player content; WP already
wraps dashboard widgets in a postbox, was double-card before.
- inc/about.php: version-history card promotes v0.2.0 to latest,
demotes v0.1.0.
- assets/css/radio.css: rewrite. Strip custom shadows + oversized
typography. Adopt WP body-text defaults. Use
var(--wp-admin-theme-color, #2271b1) for volume-slider accent +
link colours so the plugin picks up whichever admin colour
scheme the user has chosen. About-page cards now use the
postbox-style gray header + 1px border pattern.
- assets/js/radio.js: setPlayIcon() also flips the visible text
label ("Play" ↔ "Pause"), not just the icon class. mirrorSelection()
also updates the [data-radio-genre] element so the genre label
stays in sync across surfaces.
- radio.php: Version: 0.1.0 -> 0.2.0; BUDDY_VERSION constant
bumped likewise.
- CHANGELOG.md: new [0.2.0] entry explaining the visual overhaul.
NET EFFECT
- Same 44 stations, same audio path, same persistence, same
updater, same AJAX endpoint. Pure visual change.
- The plugin now looks like part of WordPress admin instead of a
guest widget.
- Closer to WP.org submission criteria — plugin reviewers look
for native-styled plugins.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
5.6 KiB
Changelog
All notable changes to Radio are documented here. Format: Keep a Changelog 1.1.0 — versioning: SemVer.
[Unreleased]
[0.2.0] — 2026-05-26
Changed — UI rebuilt to WordPress admin standards
v0.1.0 worked but looked like a third-party React widget sitting on top of WordPress rather than part of it. v0.2.0 rebuilds the player UI to use WP-native patterns end-to-end.
- Main page now uses the standard
.postboxcontainer (gray header bar +.insidebody) instead of a custom rounded-shadow card. - Play button is now a standard
.button .button-primarywith both icon AND text label (Play / Pause), matching every other admin button. Replaces the giant blue circular icon-only button. - Now Playing uses left-aligned default body text with
.descriptionmuted-gray for the station tagline. Replaces the centered large-typography card. - Genre badge moved to a small
.radio-player__station-genretext label aligned right of the station name. Replaces the custom pill. - Volume slider now uses
accent-color: var(--wp-admin-theme-color)— adapts to whichever admin colour scheme the user has chosen (Default / Light / Modern / Blue / Coffee / Ectoplasm / Midnight / Ocean / Sunrise). - All link colours likewise adapt to the user's admin theme via
var(--wp-admin-theme-color, #2271b1). - Dashboard widget content sits bare inside its
.inside— WordPress already wraps it in a postbox. v0.1.0 was rendering a card inside a card. - About page cards now use postbox-style gray header bars + WP-standard 1px border + subtle shadow. Replaces the custom rounded grid.
- Credit footer uses
.descriptionclass, smaller and more native.
Net effect
The plugin feels like part of WordPress now, not bolted onto it. Picks up your admin colour scheme automatically. Closer to WP.org submission criteria — they look for native-styled plugins during plugin review.
Not changed
- Functionality identical to v0.1.0 — same 44 stations, same audio path, same user_meta persistence, same updater, same AJAX endpoint.
- No behaviour change for end users; this is purely visual.
- About page version-history card promotes v0.2.0 to "latest", demotes v0.1.0.
[0.1.0] — 2026-05-26
Radio is born. First release of a new standalone WordPress plugin extracted-and-rebuilt from the radio feature that lives inside RangerPlex. Radio stands on its own as a focused, friendly companion plugin for the WordPress dashboard — a tab of background music while you work.
Added — Phase A complete (player exists)
- Dashboard widget at WP Admin → Dashboard showing a compact mini-player with play/pause, station select grouped by genre, and a volume slider.
- Dedicated admin page at WP Admin → Radio → My Radio showing the same controls in a larger format with the station's genre badge and description.
- 44 SomaFM stations across 10 genres (Ambient, Electronic, Lounge, Rock, Metal, Jazz, World, Reggae, Holiday, Specials). Stream URLs use SomaFM's public 128kbps MP3 endpoints — no proxy server required.
- Per-user state storage via
user_meta(key:radio_state). Each WordPress admin remembers their own station choice, volume, and theme preference. - Settings page at WP Admin → Radio → Settings with default station, default volume, theme (auto/light/dark), and an opt-out for the dashboard widget. Updates panel shown to admins with
manage_options. - About page at WP Admin → Radio → About with plain-language explanation of what the plugin does, who it's for, version history, and credits to SomaFM.
- Self-hosted update checker wired up to the Gitea repo (
ranger/a-radio) from commit 1. Polls/api/v1/repos/ranger/a-radio/releases/latestwith a/tags?limit=1fallback. 12h success cache, 1h negative cache. - AJAX endpoint
radio_save_statefor persisting station/volume changes without a page reload. Nonce-protected, capability-checked. - Custom admin-menu icon (
dashicons-format-audio). - Direct HTML5
<audio>playback — no Node proxy, no PHP stream-passthrough, no server-side resource cost per listener. SomaFM's CORS headers make this work out of the box in modern browsers.
Architecture (locked from day one)
- Single-word brand name
Radio— no "WP" prefix, no marketplace trademark hurdle. - Public GPL v2+ Gitea repo at
ranger/a-radioongit.davidtkeane.com. - Per-user state in
user_metaunder keyradio_state. - Vanilla JS only — no React, no build step, no bundler. ~200 lines of JS controlling all interactions.
- CSS-only animations, all assets local — bundle stays sub-100KB.
- Single H1 per admin page, no nested toggle boxes — Tier-1 discipline carried forward from the Logbook + Buddy lineage.
- Sanitize on input, escape on output throughout. Every AJAX endpoint nonce-protected and capability-checked.
Compliance
- Station list and stream URLs are SomaFM's public, freely-published endpoints. Their terms allow redistribution with attribution.
- "Powered by SomaFM" credit displayed in both player surfaces, linking to somafm.com.
- The About page invites users to donate to SomaFM directly.
Not in this release (planned)
- Phase B — Settings polish + README for WP.org submission + retry logic for transient stream errors.
- Phase C — Now-playing metadata via SomaFM's per-station song-history endpoint.
- Phase D —
[ranger_radio]shortcode so the player can be embedded in posts/pages. - Phase E — Favorites system.
- Phase F — Multi-provider (Radio Paradise, NTS Radio, KEXP, BBC) with a provider abstraction.