I had an idea, I used Claude to help me build it, and a few hours later I had a published Chrome extension on the Web Store.
The extension is called QueueTube. It adds a button to your YouTube subscriptions feed that queues all your videos for back-to-back playback, like a playlist. You can find it on the Chrome Web Store here and the source code is on GitHub.
The idea
I watch a lot of YouTube through my subscription feed and it always bugged me that there was no way to just queue everything up and let it play. Every time a video ended I had to go back, find the next one, click it. It sounds minor but it adds up.
I asked Claude whether something like this already existed as an extension. It didn't, at least not in the way I wanted. So I described what I was after and asked Claude to build it, and we worked on it together over several sessions.
What I used
Just two tools: Claude for building and iterating on the code, and GitHub for hosting the source files and the privacy policy. That's it. No website, no server, no paid tools beyond the one-time Chrome developer registration fee ($5 at the time of writing, I paid £3.73, so it will vary depending on conversion rates).
The files Chrome needs
One of the first things Claude made sure of was that the extension was structured correctly for eventual store submission. Here's what the actual files are:
manifest.json — The most important file and the one Chrome reads first. It's a configuration file that tells Chrome everything about your extension: what it's called, what version it is, which pages it's allowed to run on, which files contain the code, and what permissions it needs. Think of it as the ID card for your extension.
content.js — The JavaScript that actually runs on the page and does the work. For QueueTube, this is what injects the button, scrapes the video links, builds the queue panel, and handles navigation.
styles.css — The styling for anything the extension adds to the page.
Icons — You need three sizes: 16px, 48px, and 128px. These show up in the browser toolbar, the extensions page, and the Web Store listing respectively.
PRIVACY_POLICY.md — More on this below, but you'll need one.
Here's what my manifest looks like:
{
"manifest_version": 3,
"name": "QueueTube",
"version": "1.0.0",
"description": "Queue your YouTube subscription feed and watch videos back-to-back like a playlist.",
"homepage_url": "https://github.com/bethwoodcock/queuetube/",
"content_scripts": [
{
"matches": ["https://www.youtube.com/*"],
"js": ["content.js"],
"css": ["styles.css"],
"run_at": "document_idle"
}
],
"icons": {
"16": "icon16.png",
"48": "icon48.png",
"128": "icon128.png"
}
}
Manifest V1, V2, V3 — what does it mean and why does it matter?!
You'll see "Manifest V3" mentioned everywhere and it confused me at first. Here's the plain English version:
- Almost no security restrictions.
- Total system control.
- Loose permissions.
- Persistent background pages.
- Remotely hosted code.
- Exploitable for data harvesting.
- User Privacy first.
- Service Workers only.
- Remote code Banned.
Google has been forcing all extensions to migrate to V3 and phasing out V2 support. Launching on V3 from day one is a genuine trust signal. There are still thousands of V2 extensions on the store that haven't migrated, some of which are dragging their feet precisely because V3's restrictions would break their data harvesting.
Testing before you submit: Load Unpacked
- Go to
chrome://extensionsin the browser - Enable Developer mode using the toggle in the top-right corner
- Click Load unpacked and select the folder containing my extension files
The extension loads immediately. This made iteration really fast - change the code, reload, test, repeat.
Uploading to the store — and the errors Chrome will throw
When I was ready to submit I went to the Chrome Web Store Developer Dashboard, paid the one-time registration fee, and uploaded a ZIP of my extension files.
Chrome is actually quite clear about what's wrong if something fails. The first issue I hit was with my icons — the manifest originally only referenced a single icon.png and Chrome flagged that all three required sizes (16px, 48px, 128px) were missing. The fix was straightforward: generate properly sized PNG files and update the manifest to reference each one explicitly.
The permissions question — and why less is more
The Web Store will ask you:
- Single purpose — one sentence explaining what your extension does.
- Permission justification — for each permission, why do you need it.
- Host permission justification — why you need access to specific domains.
- Are you using remote code? — No. All code must be bundled locally.
Then there are three data usage declarations you must certify:
- I do not sell or transfer user data to third parties
- I do not use or transfer user data for purposes unrelated to my extension's purpose
- I do not use or transfer user data to determine creditworthiness or for lending purposes
The privacy policy... you need one
The store requires a publicly accessible URL to your privacy policy. I hosted mine directly on GitHub. The policy itself doesn't need to be written by a lawyer. It just needs to honestly describe what data your extension stores and why.
The review process — faster than you'd think
I submitted QueueTube at around 10pm at night. By 7am the next morning it was approved. Maybe I got lucky, or maybe having zero permissions, zero data collection, and a clean V3 manifest made it a quick review.
A few things I'd tell myself at the start
- Keep permissions to an absolute minimum. It is a genuine trust signal.
- Make sure your icons are all three sizes before you submit.
- Host your privacy policy on GitHub if you don't have a website.
- Build on V3 from day one. Don't start on V2 planning to migrate later.
The extension free on the Web Store
QueueTube is free, open source, and has zero permissions. If you use YouTube subscriptions, give it a try:
- Chrome Web Store: chromewebstore.google.com/detail/queuetube/...
- GitHub: github.com/bethwoodcock/queuetube