Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 41f42f1048 | |||
| f796fe8223 | |||
| afaff271a4 |
+54
-5
@@ -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.
|
||||
|
||||
---
|
||||
|
||||
|
||||
+1
-1
@@ -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",
|
||||
|
||||
+23
-1
@@ -40,7 +40,29 @@ html, body {
|
||||
.opt-brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 12px;
|
||||
gap: 10px;
|
||||
text-decoration: none;
|
||||
color: inherit;
|
||||
padding: 4px 8px;
|
||||
margin: -4px -8px;
|
||||
border-radius: var(--radius);
|
||||
}
|
||||
|
||||
.opt-brand:hover {
|
||||
background: var(--bg-row);
|
||||
}
|
||||
|
||||
.opt-brand:hover .opt-back {
|
||||
color: var(--accent);
|
||||
transform: translateX(-2px);
|
||||
}
|
||||
|
||||
.opt-back {
|
||||
font-size: 18px;
|
||||
color: var(--fg-muted);
|
||||
line-height: 1;
|
||||
font-weight: 400;
|
||||
transition: color 120ms ease-out, transform 120ms ease-out;
|
||||
}
|
||||
|
||||
.opt-helmet {
|
||||
|
||||
@@ -9,10 +9,11 @@
|
||||
<body>
|
||||
|
||||
<header class="opt-header">
|
||||
<div class="opt-brand">
|
||||
<a href="../newtab/newtab.html" class="opt-brand" title="Back to RangerHQ Tuner">
|
||||
<span class="opt-back" aria-hidden="true">←</span>
|
||||
<img src="../assets/img/ranger.png" alt="" class="opt-helmet">
|
||||
<h1>RangerHQ Tuner — Options</h1>
|
||||
</div>
|
||||
</a>
|
||||
<span class="opt-version" id="opt-version">v—</span>
|
||||
</header>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user