DEV Community

Bishwas Bhandari
Bishwas Bhandari

Posted on

YouTube Mass Unsubscribe: My Brother Vibe Coded It in Class 11, I Refined It for Production

My brother is 17 and in Class 11. He doesn't know what a REST endpoint is. He's never opened DevTools on purpose. Last month he built a Chrome extension that unsubscribes you from YouTube channels in bulk, and it worked.

And it worked. It actually worked. He wanted to nuke his entire subscription list. 300+ channels accumulated over years of binge-watching gaming walkthroughs, tech reviews, and random stuff the algorithm tricked him into subscribing to at 2am. His feed had become completely unusable. Every time he opened YouTube, it was wall-to-wall content from channels he didn't even remember subscribing to.

YouTube's solution? Click a channel. Click unsubscribe. Confirm. Go back. Scroll. Repeat. For 300 channels, that's close to a thousand clicks and an hour of mind-numbing repetition. He wasn't going to do that. So he decided to build something instead.

He opened Claude Code, described what he wanted in plain English, and started prompting his way through a Chrome extension from scratch. No tutorial. No roadmap. No "learn Chrome Extensions in 30 days" course. Just a kid with a problem and an AI editor willing to help him figure it out.

That's vibe coding. And I think it represents something genuinely new.

The DOM Clicking Approach

His first version required you to visit youtube.com/feed/channels, YouTube's subscription management page that lists every channel you're subscribed to. From there, the extension would scrape each channel element off the page, find the unsubscribe button, click it programmatically, confirm the modal, wait for the page to update, then move on to the next one. One channel at a time, clicking through the DOM like a very patient robot.

It was slow. It was fragile. YouTube changes their DOM structure between A/B tests and his selectors would break randomly. Sometimes the confirmation modal wouldn't appear fast enough and the script would click behind it. Sometimes YouTube's lazy loading wouldn't trigger and the extension would run out of channels to process halfway down the page.

But here's the thing. None of that mattered. He wasn't building a product. He was solving a problem. And the DOM clicking approach, janky as it was, successfully unsubscribed him from 200+ channels in about 40 minutes. Compare that to the 2+ hours of manual clicking he was facing.

I'm genuinely proud of him for this. A 17-year-old in Class 11 with no formal programming background shipped a functional Chrome extension in an afternoon. Not a to-do app. Not a calculator. A browser extension that scrapes and interacts with one of the most complex web applications on the planet. He figured out content scripts, manifest permissions, DOM traversal, async timing. Concepts that trip up junior developers. The AI helped him through each wall as he hit it. That's the part people miss when they dismiss vibe coding.

What Vibe Coding Actually Enables

The standard criticism goes something like this: vibe coding produces bad code, people don't understand what they're building, and the result is unmaintainable garbage.

All true. Also completely beside the point.

My brother's DOM-clicking extension was objectively bad code. Hardcoded selectors, no error handling, sequential awaits with arbitrary timeout values, zero separation of concerns. If you ran it through a code review it would get rejected before the reviewer finished their coffee.

But it shifted his relationship with software from consumer to creator. He went from "YouTube doesn't have this feature so I guess I'm stuck" to "YouTube doesn't have this feature so I'll build it myself." That mental shift is worth more than any CS fundamentals course.

Vibe coding didn't teach him to program. It taught him that programming is an option. There's a massive difference, and I think it's the most important thing happening in tech education right now.

The Refinement Gap

After watching his extension click through DOM elements for 40 minutes, I spent an evening rewriting it. Not because his approach was wrong, but because I knew there was a faster path.

YouTube's frontend talks to internal API endpoints for everything. Loading subscriptions, managing them, unsubscribing. The same endpoints the website hits when you manually click that unsubscribe button. Instead of simulating clicks on DOM elements, you can call these endpoints directly from the extension using the session token from the active YouTube tab.

The difference is night and day. The DOM approach: scroll, find element, click, wait for modal, confirm, wait for response, scroll again. The endpoint approach: fire an authenticated POST request. No clicking, no scrolling, no modals, no waiting for DOM elements to render.

Scanning 500+ subscriptions went from "scroll for five minutes while the page lazy-loads" to a single paginated API call that returns everything in seconds. Unsubscribing went from 40 minutes of automated clicking to a few minutes of sequential API requests with a configurable delay to avoid rate limits.

This is where the vibe coding conversation gets interesting. My brother built the proof of concept. I built the production version. Both were necessary. Without his janky DOM-clicking prototype, I wouldn't have spent an evening on this at all. The vibe-coded version validated the idea. The refined version made it reliable.

The 12x Cost Problem, Revisited

I've written before about how vibe coding carries hidden costs. Code that works but can't scale, technical debt that compounds, solutions that break under edge cases the AI never considered.

This extension is a perfect case study. The DOM version worked but had real problems. Channels with identical names confused the selector logic. Session expiry mid-process caused silent failures. YouTube's A/B testing meant the extension might work on Monday and break on Wednesday.

The endpoint version handles all of this cleanly. Channel IDs instead of display names. Auth token validation before each request. No dependency on DOM structure at all.

But here's where I've softened my stance: the cost problem matters for production software. For personal tools, prototypes, and "I just need this to work once" utilities? Vibe coding is genuinely magical. A 17-year-old solved a real problem in an afternoon. The code quality was irrelevant because the code's job was to run once and save him two hours of clicking.

The mistake isn't vibe coding. The mistake is not knowing when vibe coding is enough and when it needs a human with context to step in and refine.

What's In The Extension Now

The production version has the stuff you'd expect from a proper tool: one-click scanning of all subscriptions via API, a searchable list with avatars and subscriber counts, select/deselect all, CSV export for backup (critical since YouTube has no bulk re-subscribe), configurable delay between unsubscribes, live progress tracking per channel, and a stop button to pause mid-process.

It runs 100% locally. No data collection, no background processes, no server calls. The extension talks to YouTube through your authenticated tab and nothing else.

If your subscription list has gotten out of hand, it's free on the Chrome Web Store: YouTube Mass Unsubscribe

The Bigger Point

My brother doesn't call himself a developer. He probably never will. But he now understands, at a gut level, that the software on his screen isn't magic. It's just code that someone wrote, and with the right tools, he can write it too.

That's not a small thing. An entire generation is growing up with AI editors that translate intent into working software. Most of what they build will be rough. Some of it will be broken. Almost none of it will be production-quality.

And it won't matter, my brother in christ. Because the gap between "I have an idea" and "I have a working prototype" just collapsed from months to hours. The refinement can come later. From them as they learn, or from someone else who sees the potential in their janky, beautiful, vibe-coded proof of concept.

That's what happened here. A kid built something imperfect, and it became something real.


Built by Binay Bhandari and refined by Bishwas Bhandari at Webmatrices.

Top comments (0)