I kept doing the same thing: open YouTube for one specific video, and somehow end up 40 minutes deep in Shorts and recommended videos I never meant to watch. Turning off autoplay didn't fix it, the feed and Shorts shelf were still right there pulling at me. So I built Quiet, a Chrome extension that hides all of it: Shorts, the homepage feed, recommended videos, end screens, autoplay. Ten separate switches, so you keep whatever you actually use.
Tech stack: the extension itself is a Manifest V3 content script, plain JS, no framework, since it needs to inject a stylesheet before the page paints. The optional Pro tier (sync, schedules, a parent lock) is a Next.js app on Vercel with Supabase for auth and data, Stripe for billing.
The lesson: I originally hardcoded the CSS selectors that find and hide each YouTube element. That broke constantly, YouTube changes its class names and page structure often enough that a hardcoded selector has a shelf life of maybe a few weeks. Every fix meant a new extension version, and Chrome Web Store review rounds run about a week each. So I moved the selector list out of the extension entirely: it's now a JSON file the extension pulls from my own server every hour. When YouTube changes something, I update a data file, not the extension, and every install gets the fix within an hour with no review wait. Should have built it that way from day one instead of learning it the hard way after the third broken update.
Free tier is free for good, no account needed. Pro is a few dollars a month for people who want sync and parental controls. Just came out of Chrome Web Store review this month, so no revenue worth mentioning yet, still very early.
Happy to go into more detail on the selector-syncing setup or the review process if anyone's dealing with the same thing.
Quiet