One weekend of code, one month of red tape
- side-project
- cloudflare
- oauth
- zalwa
I built a YouTube subscription comparison tool on a weekend and then spent over a month judo chopping my way through red tape to get it live.
It’s at mutuals.tv. Log in with Google, send a friend your link, see the overlap.
The weekend
I wanted to know how much my subscriptions overlapped with Dale’s, and I wanted an excuse to build something non-trivial with Hono on Cloudflare Workers.
Fully vibed in a couple of sittings: server-side Google OAuth, a subscription pull cached in KV, a you/both/them overlap chart, and shareable links. React on the front, Hono on Workers, Drizzle over D1. A stack where you spend your time on the idea instead of the plumbing.
The look came from the Anthropic frontend-design skill, by way of Tokyo Night. The landing page ended up a Magritte riff: two overlapping circles where the apple should be. Recommend it if you’re vibing a side project, especially if you’re artistically challenged like me.
Open Graph tags ate the rest of the weekend. Share images render on the fly, so
an /x/:id link unfurls in a group chat instead of showing a grey box.
The month
Then it sat in bureaucratic hell.
youtube.readonly is a restricted scope. Until Google verifies your app,
anyone logging in hits a full-page warning that the app is unsafe and has to
click through “Advanced” to get past it. That’s if they can log in at all: you
add test users one email at a time, by hand. Fine for me and Dale. It
collapses the moment you send the link to anyone else.
Verification is not a form. It’s an audit, and you have to look like a real thing:
- A privacy policy and terms that describe your actual data handling, not lorem ipsum with your name on it.
- A named data-protection mechanism. AES-GCM encrypts the refresh tokens at rest, and I had to say so in writing, somewhere they could find it.
- A landing page that explains the scope before the OAuth button, and that renders without JavaScript, because the reviewer’s tooling may not run yours.
- A Limited Use disclosure, verbatim-ish, in the right place.
Twelve commits in the repo. The first is the app. Almost everything after it exists because of the review.
Every one of those asks is fair. Restricted scopes are restricted for good reasons, and I’d rather live in the world where someone checks. It’s just a different kind of work to the weekend before it, and nobody warns you about the ratio.
The result
We both sport hundreds of subscriptions. The overlap was under 4%.
I was, and am, honestly shocked. Two people who have known each other for decades and share most of the same interests, reading almost entirely different libraries. That turned out to be the good outcome. The interesting part of the screen isn’t the shared column but the two either side of it, a pile of channels I’d never have found.
It reads your subscriptions. Not your watch history, not your videos, and it writes nothing back.
Have a crack at mutuals.tv. Happy for any feedback.
Share:[ x ][ linkedin ]

