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:

Technical Evolution: Manifest Versions
V1
Legacy (2010)
  • Almost no security restrictions.
  • Total system control.
  • Loose permissions.
V2
The Old Standard
  • Persistent background pages.
  • Remotely hosted code.
  • Exploitable for data harvesting.
V3
The Modern Rule
  • 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

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:

Then there are three data usage declarations you must certify:

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

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: