docs: add LICENSE (GPL v2), PRIVACY.md, and WEB_STORE_SUBMISSION.md

Prep for Chrome Web Store first submission. No code changes — v0.3.0
behaviour unchanged.

- LICENSE — full GPL v2 text, matches RangerHQ WP family.
- PRIVACY.md — canonical privacy policy. "Collects nothing, stores
  everything locally" using Google's data-category vocabulary so the
  Dashboard Privacy Practices tab can be ticked uniformly "does not
  collect" across all 9 categories.
- WEB_STORE_SUBMISSION.md — paste-ready Dashboard copy: single-purpose
  statement, 132-char short + 1500-char detailed description, permission
  justifications for offscreen + storage + somafm.com host, build ZIP
  command, screenshot brief, post-approval update workflow.

The public version of the privacy policy will live at
davidtkeane.com/rangerhq-tuner/privacy (HTML mirror of PRIVACY.md).
This commit is contained in:
2026-06-09 00:32:44 +01:00
parent ad43df87c0
commit baaa5e527d
3 changed files with 654 additions and 0 deletions
+195
View File
@@ -0,0 +1,195 @@
# Chrome Web Store Submission Notes — RangerHQ Tuner v0.3.0
Everything you need to paste into the Chrome Web Store Developer Dashboard when submitting. Reference for filling the form — not part of the extension ZIP.
---
## 0. Pre-flight checklist
- [ ] Signed in to **https://chrome.google.com/webstore/devconsole** as `david@davidtkeane.com`
- [ ] 2-Step Verification active on the Google account ✅ (already done per David, 2026-06-09)
- [ ] $5 one-time developer registration fee paid (USD; first-time only)
- [ ] Privacy policy published at **https://davidtkeane.com/rangerhq-tuner/privacy**
- [ ] Landing page live at **https://davidtkeane.com/rangerhq-tuner/**
- [ ] Build the submission ZIP (see §9 below)
- [ ] Screenshots captured (1280×800 PNG, 15 images) — deferred per David
- [ ] Promo tile (440×280 PNG) — deferred per David
- [ ] Submit Tuesday-Thursday morning Dublin time (Wed-Fri midnight onwards US time = best window)
---
## 1. Single purpose statement
(Dashboard → Privacy practices → Single purpose. Be specific — vague descriptions get rejected.)
> Plays internet radio streams from SomaFM in the browser, logs the tracks you have heard while listening, and provides public-search link-outs to Spotify, YouTube, Apple Music, and Bandcamp so you can find any track on your preferred music service.
---
## 2. Short description (132 characters max)
(Dashboard → Store listing → Summary. Mine is 130 chars — tight.)
> Lightweight SomaFM radio player. Logs what plays. One-click search to Spotify, YouTube, Apple Music, Bandcamp. No telemetry.
---
## 3. Detailed description (~1500 chars)
(Dashboard → Store listing → Description.)
> **RangerHQ Tuner** is a lightweight indie internet radio player that lives in your Chrome toolbar. It plays SomaFM's listener-supported indie radio network and logs every track that comes through so you can find your favourites later.
>
> ✦ **Toolbar player** — click the helmet icon, pick a station, music starts. Audio keeps playing after the popup closes.
> ✦ **New Tab Page** — every new tab becomes a Tuner landing with live clock, station picker, history, and favourites. (Optional; replaces Chrome's default new tab.)
> ✦ **Track history** — RangerHQ Tuner logs the artist and title of every track that plays on SomaFM, up to 500 tracks (configurable 50500).
> ✦ **One-click search to the big four** — next to every history entry, four buttons open public search results in a new tab: **Spotify**, **YouTube**, **Apple Music**, and **Bandcamp**. No accounts, no API keys, no Premium required. You find the track; the destination service plays it.
> ✦ **Favourites** — star any heard track to keep it forever.
> ✦ **Settings page** — clear history, clear favourites, clear everything, adjust the history cap, see how much local storage RangerHQ Tuner is using.
>
> **Privacy**
> RangerHQ Tuner collects no personal data. Nothing leaves your device. All history, favourites, and settings live in `chrome.storage.local` on your own machine. The only external server contacted is SomaFM's public API. No telemetry, no analytics, no third-party SDKs. Full policy: https://davidtkeane.com/rangerhq-tuner/privacy
>
> **Open source**
> GPL v2 or later. Source: https://git.davidtkeane.com/ranger/rangerhq-tuner
>
> **Family**
> Sibling to RangerHQ Radio for WordPress: https://wordpress.org/plugins/rangerhq-radio/
---
## 4. Category
**Productivity** (primary) — same category as the other browser-resident utility players.
Alternatives if Productivity feels off: **Fun** or **News & Weather** — but Productivity is the cleanest fit for a quiet always-on tool.
---
## 5. Language
**English (United Kingdom)** as the primary listing language.
---
## 6. Privacy practices section (the critical match)
The Dashboard's Privacy Practices tab is the surface that gets compared three ways: manifest permissions ↔ Dashboard declarations ↔ public privacy policy. **Any mismatch = auto-rejection** (per `~/.ranger-memory/docs/WP_ORG_SUBMISSION_CHECKLIST.md` lesson on the equivalent rule). Match all three.
### 6.1 Data collection — answer for every category
| Category | Tick this answer |
|---|---|
| Personally identifiable information | **Does not collect** |
| Health information | **Does not collect** |
| Financial and payment information | **Does not collect** |
| Authentication information | **Does not collect** |
| Personal communications | **Does not collect** |
| Location | **Does not collect** |
| Web history | **Does not collect** |
| User activity | **Does not collect** |
| Website content | **Does not collect** |
### 6.2 Data usage certifications — tick ALL THREE boxes
- [x] I do not sell or transfer user data to third parties, outside of the approved use cases.
- [x] I do not use or transfer user data for purposes that are unrelated to my item's single purpose.
- [x] I do not use or transfer user data to determine creditworthiness or for lending purposes.
### 6.3 Privacy policy URL
> **https://davidtkeane.com/rangerhq-tuner/privacy**
(Live before submission. Public, no login required.)
---
## 7. Permission justifications
(Dashboard → Privacy practices → Permission justifications. Each must explain WHY the permission is needed in 12 sentences. Reviewers compare these to the actual code.)
### `offscreen`
> Manifest V3 service workers cannot host an `<audio>` element. RangerHQ Tuner uses `chrome.offscreen.createDocument({reasons: ['AUDIO_PLAYBACK']})` to create a hidden document that plays the SomaFM stream. Required by Chrome's architecture; no user data passes through this surface.
### `storage`
> Persists the user's last-played station, volume preference, configurable history cap, track history, and favourites in `chrome.storage.local` on the user's own device. No data is ever transmitted off-device.
### Host permission `https://somafm.com/*` (and `https://*.somafm.com/*`)
> Fetches the public SomaFM station catalogue (`channels.json`), the per-station playlist files (`.pls`), the live audio streams, and the public now-playing track metadata. SomaFM is the radio source the extension plays. No authentication, no user identifiers, no analytic parameters — only standard public-API calls.
---
## 8. Distribution
- **Visibility:** Public
- **Geographic distribution:** All regions
- **Pricing:** Free
---
## 9. Building the submission ZIP
From the extension root (`~/scripts/chrome-extensions/rangerhq-tuner/`):
```bash
cd ~/scripts/chrome-extensions/rangerhq-tuner
zip -r ~/Desktop/rangerhq-tuner-v0.3.0.zip \
manifest.json \
src/ \
LICENSE \
-x "*.DS_Store" \
-x "*/.git/*" \
-x "*/node_modules/*"
ls -lh ~/Desktop/rangerhq-tuner-v0.3.0.zip
```
(`README.md`, `CHANGELOG.md`, `PRIVACY.md`, `WEB_STORE_SUBMISSION.md`, the `.git` directory, and `.DS_Store` files are deliberately excluded — they are repo artefacts, not user-facing extension files.)
---
## 10. Screenshot brief (when you're ready)
5 screenshots at **1280×800 PNG** would be ideal. Suggestions, in order of impact:
1. **Toolbar popup playing a station** — helmet icon visible in the toolbar, popup open showing Now Playing, controls, and the search list. Background should be a normal-looking webpage (your own blog?) so the reviewer sees the popup in context.
2. **New Tab Page with the player + history** — the full landing with clock top right, current track centred, History tab selected, ~5 tracks visible with the 4 search buttons.
3. **Favourites tab** — same NTP layout but the Favourites tab selected, a few stars filled in.
4. **Options page** — showing the stats card, history cap slider mid-range, the three Clear buttons.
5. **Quick stations chip row** + a SomaFM station closeup — emphasises the "30 channels in one click" angle.
### Promo tile (440×280 PNG)
A clean composition: helmet on the left, "RangerHQ Tuner" in your brand font on the right, optionally with a smaller tagline ("Indie radio, in your toolbar"). Dark background `#1a221c`. Accent green `#6dbf7a` for the typography.
### Marquee tile (1400×560 PNG, optional)
Same as promo tile but wider — adds a screenshot of the NTP on the right half. Optional but Google promos extensions with marquee assets more often.
---
## 11. After approval — SVN-equivalent for Chrome
Unlike wp.org (which uses SVN for plugins), Chrome Web Store updates go through the same Developer Dashboard:
1. Bump `manifest.json` version (`0.3.0``0.3.1` or `0.4.0`).
2. Update `CHANGELOG.md`.
3. Tag the Gitea release: `git tag -a v0.3.1 -m "..." && git push origin v0.3.1`.
4. Build a fresh ZIP (same command as §9 with the new version).
5. Dashboard → RangerHQ Tuner → Package → Upload new package → Submit.
6. Update review: typically 2448 hours per [[reference_chrome_web_store_rules]].
The extension ID stays the same forever (it's bound to the first signing certificate Google generates). Future updates just need a higher version.
---
## 12. Quick links
- **Dev Console:** https://chrome.google.com/webstore/devconsole
- **Program policies:** https://developer.chrome.com/docs/webstore/program-policies/policies
- **Privacy policy requirements:** https://developer.chrome.com/docs/webstore/program-policies/privacy
- **Best practices:** https://developer.chrome.com/docs/webstore/program-policies/best-practices
— Notes maintained at `WEB_STORE_SUBMISSION.md` in the repo. Updated for v0.3.0 on 2026-06-09.