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:
@@ -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, 1–5 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 50–500).
|
||||
> ✦ **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 1–2 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 24–48 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.
|
||||
Reference in New Issue
Block a user