Minimal Chrome MV3 extension: pick a streaming service and genre, tap GoGo Maingo Burst, and MainGo opens one official https: page on that service with a genre-aligned search—so you can start a very short listen yourself. No hosted audio, no playback control, no tracking. UI lives in the side panel (stays open); bursts reuse one tab until you close it.
Two populations, one river, a current that can push back. Anyone can swim across anytime on their own—or build a bridge. MainGo is that bridge: one deliberate crossing from “I want this vibe on that app” to the right bank (their official site, already lined up). You still take the last step on their shore when you hit play.
| In scope | Out of scope |
|---|---|
| Side panel UI: service + genre + burst button | APIs, accounts, analytics, backends |
Building one search URL per choice (popup.js) |
Playing, timing, or downloading music inside the extension |
sidePanel, tabs, storage (session tab id only) |
Content scripts on Spotify/Pandora/etc. |
Toolbar icons (icons/, optional tools/) |
Curated deep links to specific tracks (unless you add them yourself later) |
chrome://extensions→ Developer mode → Load unpacked- Choose the folder that contains this
manifest.json - Click the MainGo toolbar icon — UI opens in the side panel (not a tiny dropdown). The panel stays open until you close it.
- GoGo Maingo Burst updates the same browser tab each time; close that tab if you want the next burst to open a new one.
Chrome needs icons/icon16.png, icon48.png, icon128.png.
- Fastest: double-click
install-icons.bat(Windows) or run
node tools/build-icons.mjs
from this folder. - Your own art: drop
icon16.png/icon48.png/icon128.png(oricon16.png.pngetc.) intoassets/orMainGo/assets/, then run
node tools/sync-icons.mjs
(auto-resizes to 16×16, 48×48, 128×128 on Windows) ornode tools/fix-icons.mjsto fixicons/only.
Chrome requires those exact pixel sizes —icon128.pngmust be 128×128, not “about 128” or a larger PNG.
Edit popup.js: GENRE_QUERIES and SERVICE_BUILDERS (official search URL patterns). Optional: wrapBurstUrl(url) — return an affiliate or tracking redirect URL; default passes the burst URL through unchanged.
Verify links in a normal browser; providers change URLs sometimes.
| Path | Role |
|---|---|
manifest.json |
MV3 manifest |
popup.html / style.css |
UI |
popup.js |
Service + genre → URL; optional wrapBurstUrl for affiliates |
privacy.html |
Public privacy policy (GitHub Pages) |
privacy/HOSTING.md |
GitHub Pages setup for the policy URL |
docs/CHROME_WEB_STORE.md |
Store listing copy and permission notes |
icons/*.png |
Extension icons |
tools/build-icons.mjs |
Generate default icons |
tools/sync-icons.mjs |
Copy icons from assets/ into all MainGo roots |
install-icons.bat |
Windows helper for build-icons |
Public HTTPS URL (paste into the listing):
https://vesperrun.github.io/MainGo/privacy.html
Source file: privacy.html at the repo root (publisher: VesperRun; contact: MainGOMusic@proton.me).
Enable GitHub Pages: push to VesperRun/MainGo, then Settings → Pages → branch main, folder / (root). Step-by-step: privacy/HOSTING.md.
Store listing copy and permission blurbs: docs/CHROME_WEB_STORE.md.
You must follow each streaming service’s terms and applicable law. MainGo does not supply or control audio.
© 2026 MainGo. All rights reserved. See LICENSE. Publishing on the Chrome Web Store does not grant others the right to copy or rebrand this project.