Files
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

122 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Privacy Policy — RangerHQ Tuner
**Effective date:** 2026-06-09
**Maintainer:** David Keane — <david@davidtkeane.com>
**Extension homepage:** https://davidtkeane.com/rangerhq-tuner
**Source code:** https://git.davidtkeane.com/ranger/rangerhq-tuner
---
## TL;DR
**RangerHQ Tuner collects no personal data. Nothing leaves your device.**
The extension stores a small amount of data in your browser's local storage on your own computer — your track history, your favourites, your last-played station, your volume preference, and a cached copy of the SomaFM station catalogue. That data never leaves your machine and is never sent to David Keane, RangerHQ, Anthropic, Google, or anyone else.
---
## Data we do not collect
Using the Chrome Web Store's standard data category vocabulary, RangerHQ Tuner does **not** collect any of the following:
| Category | Collected? |
|---|---|
| Personally identifiable information | ❌ No |
| Health information | ❌ No |
| Financial and payment information | ❌ No |
| Authentication information | ❌ No |
| Personal communications | ❌ No |
| Location | ❌ No |
| Web history | ❌ No |
| User activity | ❌ No |
| Website content | ❌ No |
No account is required. No login. No telemetry. No analytics. No third-party tracking scripts. No advertising network code.
---
## Data stored locally on your device
RangerHQ Tuner uses Chrome's `chrome.storage.local` API to persist a small amount of state across browser sessions. **All of this lives on your computer only.** It is never transmitted to any server. You can wipe it at any time from the extension's Options page.
| Key | What it holds | Why |
|---|---|---|
| `tuner.stationsCache` | A cached copy of SomaFM's public channel list | So the popup opens instantly instead of fetching the catalogue every time |
| `tuner.cachedAt` | Timestamp of the cache | To expire the cache after 6 hours |
| `tuner.currentStationId` | ID of the station you last picked | So you can resume where you left off |
| `tuner.volume` | Your last-set volume (0.01.0) | So volume persists across sessions |
| `tuner.isPlaying` | Whether playback was active | UI state sync |
| `tuner.history` | A capped log of artist + title pairs heard while playing | The History tab on the New Tab Page |
| `tuner.favourites` | Track entries you have starred | The Favourites tab |
| `tuner.historyCap` | Your chosen history-cap value (default 500) | Configurable on the Options page |
The history and favourites entries contain: artist name, track title, station display name, station ID, and a local timestamp. **They are stored in your browser only.** They are never sent to the extension author or any third party.
You can clear any of this data at any time:
- **Options page** → "Clear history", "Clear favourites", or "Clear EVERYTHING" (wipes all `tuner.*` keys).
- Or: Chrome → `chrome://extensions` → RangerHQ Tuner → Remove. Removing the extension wipes its local storage.
---
## Outbound network requests
RangerHQ Tuner contacts only one external network — **SomaFM (somafm.com)** — and only for the following purposes:
| Endpoint | Purpose | Frequency |
|---|---|---|
| `https://somafm.com/channels.json` | Fetch the public list of SomaFM stations | At most once every 6 hours |
| `https://somafm.com/{...}.pls` | Resolve the streaming URL for the station you picked | Once per station change |
| Direct stream URLs (e.g. `https://ice1.somafm.com/groovesalad-128-mp3`) | The actual audio stream | Continuous while playing |
| `https://somafm.com/songs/{id}.json` | Read the public "now playing" track for the current station | Every 25 seconds while playing |
These requests are made by your browser the same way it makes any other web request. SomaFM may log your IP address as part of routine HTTP serving — that is between you and SomaFM, the same as visiting their website. RangerHQ Tuner does not add tracking parameters, identifiers, or authentication tokens to these requests.
SomaFM is a listener-supported independent radio network. Their content policies are theirs alone: <https://somafm.com>.
---
## "Search this track" link-outs
The History and Favourites tabs offer four buttons next to each track: **Spotify**, **YouTube**, **Apple Music**, **Bandcamp**. Each is a plain HTML link (`<a href>` with `target="_blank" rel="noopener noreferrer"`) that opens the corresponding service's public search results page in a new browser tab.
RangerHQ Tuner does **not** embed any third-party SDK, player, tracker, or analytics code. The extension does not communicate with Spotify, YouTube, Apple Music, or Bandcamp servers in any way. When you click one of the buttons, you are simply navigating to a public search URL. Anything that happens after that is between you, your browser, and the destination site.
---
## Permissions and why we ask for them
| Permission | Why RangerHQ Tuner needs it |
|---|---|
| `offscreen` | Manifest V3 service workers cannot host an `<audio>` element. The `chrome.offscreen` API lets us create a hidden DOM document that holds the audio player. No user data is collected through this. |
| `storage` | Persist your settings, last station, volume, history, and favourites in `chrome.storage.local` on your own device. |
| Host: `https://somafm.com/*` and `https://*.somafm.com/*` | Fetch the public station catalogue, playlist files, stream URLs, and now-playing metadata from SomaFM. No authentication is used, no user data is sent. |
We do not request `tabs`, `activeTab`, `<all_urls>`, `webRequest`, `cookies`, or any other broad permission.
---
## Children's privacy
RangerHQ Tuner is a general-purpose audio player and does not knowingly process data of children under 13. It collects nothing about anyone of any age.
---
## Changes to this policy
If this policy ever changes in a material way, the effective date at the top will be updated and the change will be reflected in `CHANGELOG.md` in the project's public repository (linked above). Because RangerHQ Tuner does not collect personal data, material privacy changes would generally only happen if the architecture itself changes — which is unlikely.
---
## Contact
For questions about this policy or the extension's data handling:
- **Email:** <david@davidtkeane.com>
- **Issues / source:** <https://git.davidtkeane.com/ranger/rangerhq-tuner>
- **Author:** David Keane, Dublin, Ireland
---
*This policy is published under GPL v2 or later, the same licence as the extension itself. Verbatim copies and adaptations are permitted.*