Files
rangerhq-tuner/WEB_STORE_SUBMISSION.md
T
ranger baaa5e527d 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).
2026-06-09 00:32:44 +01:00

9.3 KiB
Raw Blame History

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


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

  • I do not sell or transfer user data to third parties, outside of the approved use cases.
  • I do not use or transfer user data for purposes that are unrelated to my item's single purpose.
  • 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/):

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.00.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.


— Notes maintained at WEB_STORE_SUBMISSION.md in the repo. Updated for v0.3.0 on 2026-06-09.