feat: initial commit — RangerHQ Tuner v0.1.0 (Tier 1 MVP)
Chrome MV3 extension, browser-resident sibling to rangerhq-radio (WP plugin). Plays SomaFM via the chrome.offscreen API + a source- adapter pattern at src/sources/. Architecture highlights: - Audio runs in offscreen document — SW would get killed. - Source-adapter pattern locks Tier 1 contract (RadioSource interface in src/sources/base-source.js). Adding a network = drop a file + register one line in src/sources/index.js. - Vanilla JS, no build step. Pure ES modules. - No telemetry, no third-party JS. Outbound only to somafm.com. - Narrow permissions: offscreen + storage + somafm.com host_perms. No tabs, no <all_urls>, no webRequest. 22 files, ~30 min build following the saved plan at ~/.ranger-memory/projects/rangerhq-tuner-plan.md. Tier 2 + Tier 3 (Web Store submission) not started.
This commit is contained in:
@@ -0,0 +1,43 @@
|
||||
# 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](https://git.davidtkeane.com/ranger/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)
|
||||
|
||||
1. Open `chrome://extensions`
|
||||
2. Toggle **Developer mode** on (top right)
|
||||
3. Click **Load unpacked** → pick this folder (`rangerhq-tuner/`)
|
||||
4. Pin the extension to your toolbar (puzzle icon → pin)
|
||||
5. 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.
|
||||
Reference in New Issue
Block a user