November 20, 2025
The Story of Shadowcat
I’m a big Twitch fan. I used to stream coding on there too, but I retired from that when I realised it was slowing me down from actually shipping projects. That’s another story.
My problem with Twitch was notifications. They’re either spammy, slow, or both. You follow 50 channels and your phone blows up every time any of them go live. Most of the time I don’t care. But there’s like 2 or 3 streamers I never want to miss. The only way to opt out is to go to each channel individually and uncheck the notification bell. Or you disable Twitch notifications entirely and miss the ones you actually care about.
So I built Shadowcat.
The idea
Simple. You whitelist the Twitch channels you actually want to be notified about. That’s it. No spam, no noise, just “this person went live” for the handful of creators you care about.
I built native Android and iOS apps with a Kotlin backend. The backend used the Twitch EventSub API to register for stream-started events for each channel. When a stream went live, the backend sent a push notification to the app with a nice preview. Clean, fast, beautiful.
And it worked.
The wall
Then I found out about the EventSub limit. You can only subscribe to 10,000 events per application. That sounds like a lot until you do the maths.
If I only listen for “stream online” events, that’s 10,000 channels. Fine. But if I also want “stream offline” (so the app knows when they stop streaming), that’s 5,000 channels. If I want viewer counts too, that’s 3 events per channel, so 3,333 channels.
Now divide by users. If each user whitelists 3 channels on average, that’s roughly 1,000 users before I hit the ceiling. One thousand users and I’m completely maxed out.
There’s a workaround. If the Twitch creator links their own account to Shadowcat, their channel doesn’t count towards my quota. But I didn’t want that. I wanted the app to work without creators needing to do anything. The dream was that their communities would use it, love it, and then creators would want to sign up because their viewers were already there.
YouTube and Kick
The original vision was bigger than just Twitch. I wanted Shadowcat to notify you when your favourite creators go live on any platform. Twitch, YouTube, Kick. Creators could make an account, link all their platforms, and have a profile page with links to their merch, donation buttons, stream history, the works.
YouTube’s API requires the channel creator to link their account to your app. Same problem. Kick’s API barely existed at the time. The multi-platform dream died pretty quickly.
What it became
I ended up building a Discord bot version. You add it to a Discord server, use a slash command to subscribe to a Twitch channel, and it posts automated go-live messages. No marketing, no effort. It runs on about 5 Discord servers right now doing its thing quietly.
The mobile apps were never released to production. Android is in beta testing. iOS is on TestFlight when I remember to re-push it every 90 days, which I usually don’t.
Can I resurrect it?
Maybe. I’d need to ditch EventSub and build a polling system instead. Hit the Twitch API on a schedule and check which channels are live. But that means a server running 24/7 hammering Twitch’s API, which is worse for both of us. I use Google Cloud Run so my projects can scale to zero when nobody’s using them. Polling kills that.
I’d be spending more money, Twitch would be handling more requests, and the notifications would be slower. I don’t see how that’s better for anyone compared to EventSub. It’s just the only option that scales past 1,000 users.
For now Shadowcat is parked. Hopefully the Discord bot doesn’t get too popular and eat up that 10k EventSub quota. My focus is on API Alerts and I’m happy with that. But the idea was cool and I still think about it sometimes.