6f06ea73d18f41c8dbec94ae7e7cf3fc61c6dc37
David's first-pass through the Dashboard revealed that the Single Purpose field, and each permission justification field, have a 1000-char cap (not the much smaller cap I had assumed from looking at older Web Store docs). Rewrote each to use roughly 900 chars of the budget — gives reviewers the technical detail they need to verify the code matches the claims. - Single Purpose (970 chars) — 3 numbered things the extension does, what it explicitly does not do (no SDK, no analytics, no remote). - offscreen (976 chars) — why MV3 needs offscreen for audio, with the developer.chrome.com pointer for the reviewer to verify. - storage (867 chars) — per-key inventory + Options-page wipe path + privacy policy URL for cross-reference. - somafm.com host (910 chars) — exact endpoints listed, what we do NOT send with the requests, SomaFM's community-friendly stance. - Added: 'I am not using remote code' note for the cert checkbox.
RangerHQ Tuner
Lightweight indie internet radio player for Chrome. Plays SomaFM in any browser tab. Manifest V3, vanilla JS, no telemetry.
Sibling to rangerhq-radio (the WordPress version).
Tier 1 — MVP (current)
- ✅ Manifest V3 + Offscreen API audio
- ✅ Loads all SomaFM channels from
channels.json - ✅ Pick a station, click Play, audio runs in background
- ✅ Volume + state persisted across popup open/close
- ✅ Catalogue cached 6h in
chrome.storage.local - ✅ Source-adapter pattern in place for future networks
Install (developer mode)
- Open
chrome://extensions - Toggle Developer mode on (top right)
- Click Load unpacked → pick this folder (
rangerhq-tuner/) - Pin the extension to your toolbar (puzzle icon → pin)
- Click the toolbar icon → pick a SomaFM station → ▶ Play
Project layout
rangerhq-tuner/
├── manifest.json
└── src/
├── background/service-worker.js # message router, no audio here
├── offscreen/offscreen.{html,js} # the <audio> element host (MV3 needs this)
├── popup/popup.{html,css,js} # the toolbar UI
├── sources/ # extensibility seam
│ ├── base-source.js # RadioSource interface (JSDoc)
│ ├── somafm.js # first concrete adapter
│ └── index.js # registry
├── lib/ # shared utilities
└── assets/icons/ # 16/32/48/128 PNGs
License
GPL-2.0-or-later — matches the rest of the RangerHQ family.
Releases
6
Languages
JavaScript
58.3%
CSS
31.4%
HTML
10.3%