diff --git a/CHANGELOG.md b/CHANGELOG.md index 548d9a0..f7c3d9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,11 +7,60 @@ Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) — versi ## [Unreleased] -### Planned — Tier 3 (Chrome Web Store submission) -- Listing assets: 1280x800 screenshots, 440x280 promo tile -- Privacy policy URL published at `davidtkeane.com/rangerhq-tuner/privacy` -- 2-Step Verification on Google account -- $5 dev fee + submission +### Planned — Tier 2 polish (next) +- Light mode support (`prefers-color-scheme` + flipped palette across popup / NewTab / Options) +- `.m3u` parser alongside `.pls` to widen future-adapter compatibility +- Station artwork lazy-load + fallback to family helmet +- Better error UI for failed streams ("Stream unavailable, try another") +- `.crx` packaging instructions in README for sideload users + +--- + +## [0.4.0] — 2026-06-09 — First-run UX hint + +First post-launch update, shipped the same day v0.3.0 went LIVE on the Chrome Web Store. Pure UX polish — zero new permissions, zero new code dependencies, zero behaviour change for existing users. + +### Added — Discoverable "pick a station to begin" affordance + +Triggered by David's own 30-second panic on first Web Store install (uninstalled the dev build, installed from the Web Store fresh, hit Play, got nothing, then realised "ah, I need to pick a station first"). The product worked correctly — the dev build had a seeded station from hours of testing, the fresh install does not — but the 30-second panic exposed a real first-run-UX gap. + +**Two layered cues, both pure CSS driven by a `body.is-first-run` class:** + +1. **Subtle accent-green glow pulses** around the station list (popup) and the Quick Stations chip row (NewTab). Uses a 2.4-second `box-shadow` keyframe at low alpha (0.18-0.25) — visible but not noisy. +2. **Bouncing ↓ arrow** appended to the "Pick a station to begin" text in both surfaces. Uses an `::after` pseudo-element with a 1.8-second `translateY` keyframe. + +The `is-first-run` class is toggled by a tiny `reflectFirstRunHint()` function called from: +- `init()` once stations + `currentStation` are resolved +- `onPickStation()` the moment a user picks +- the `chrome.storage.onChanged` listener when another surface picks (so the hint disappears on both surfaces simultaneously via cross-surface sync) + +Existing users with a stored `tuner.currentStationId` never see either cue — the class only attaches when `currentStation` is null. + +### Files touched + +- `src/popup/popup.css` (+35 lines — keyframes + `.is-first-run` rules) +- `src/popup/popup.js` (+11 lines — `reflectFirstRunHint()` + 3 call sites) +- `src/newtab/newtab.css` (+36 lines — same idea, NewTab-namespaced) +- `src/newtab/newtab.js` (+10 lines — same pattern) + +Total: 4 files, +92 lines, 0 deletions. + +### Not changed + +- No new permissions +- No new host_permissions +- No new external libraries +- No change to `manifest.json` beyond the version bump and CHANGELOG-referenced URL +- No data migration required (no storage shape change) + +### Same-day context + +This update ships the same day: +- v0.3.0 went LIVE on the Chrome Web Store (~17:08 Dublin, ~15.5h after submission) +- RangerHQ Radio v1.0.0 stability milestone went LIVE on WordPress.org (~21:51 Dublin) +- David received a PhD-prep signal from his Research in Computing lecturer at NCI Dublin + +A solid day. --- diff --git a/manifest.json b/manifest.json index 9fd67df..45dae19 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "RangerHQ Tuner", - "version": "0.3.0", + "version": "0.4.0", "description": "Lightweight SomaFM radio player. Logs what plays. One-click search to Spotify, YouTube, Apple Music, Bandcamp. No telemetry.", "author": "David Keane", "homepage_url": "https://davidtkeane.com/rangerhq-tuner",