
Turning six streaming apps into one beautiful home screen
A months-long staring contest with cookies, CDNs, and very encrypted video — that started as “I’m tired of juggling apps, and tired of the bill,” and became the most stubborn, satisfying thing I’ve ever built.
It started with two kinds of tired
The first was juggling apps — one for movies, one for cricket, one for the kids, and a constant itch for the old cartoons I grew up on. Six apps, six logos, six places to forget my password.
The second was the bill. Stacking five or six subscriptions adds up to a genuinely silly number every month — to watch the exact same stuff that’s already floating around the internet anyway. It felt like renting the same movie six times from six different landlords. So I asked a slightly unhinged question: what if all of it lived behind one home screen — and stopped quietly draining my wallet?
Teaching my app to “see”
The first wall: nobody hands you a clean API. So I built a scraper pipeline backed by a little serverless brain in the cloud. For each service I’d basically ask, “what’s on the home page right now?” and turn the messy answer into clean rows my app could render — Trending, Action, Top 10, the works.
The catch: these places don’t just let you walk in — every knock needs valid session cookies. So I built a tiny cookie butler: a bot whose whole job is keeping a fresh batch warm, ready to hand one over the second the app needs to peek inside. No butler, no party.
Making it look expensive
Getting the content was half the fight. The art I was handed ranged from “sad and blurry” to — I swear this happened — a 1.9 MB, 4K portrait crammed into a thumbnail the size of a postage stamp, which made the whole grid move like it was wading through wet cement.
So I went art-hunting. I matched every title against a proper movie-poster database, pulled the crisp high-res versions, and for the hero banner I baked the best ones right into the app so it’s razor-sharp the instant you open it. Postage-stamp problem: solved.
Streams that refuse to play anywhere but here
The cartoons nearly broke me. Their streams sit behind a CDN with serious trust issues — a bouncer who checks not just your face but your home address. The video link comes signed with your phone’s exact network fingerprint. Grab it from a server, another network, anywhere else — and it slams the door with a 403. My clever plan to do it on the backend? Dead on arrival.
So I rebuilt the whole thing to run on the phone itself, as a four-step chase:
Open the episode
Start at the episode page — the front door, nothing secret yet.
Follow the first trapdoor
It points at a player frame, which points somewhere else again.
Follow the second
Through the next hop to the real host that actually holds the file.
Reach the vault
A final endpoint hands over the stream AES-256 encrypted — decrypted on the phone, in pure JS.
When that first cartoon finally played — IP-locked link and all — it felt like picking a lock I’d personally installed.
The “easy” win
I scooped up a thousand-plus channels from the open IPTV lists that drift around the internet like messages in bottles, filtered them down to actual entertainment (no doomscrolling-the-news channels), and added a little green / red dot so you can tell at a glance which channels are alive — tap it to re-check. Unlike everything else, these just work, which was suspicious enough that I checked twice.
Making it feel instant
Working wasn’t enough — it was slow. Switch to a provider and you’d stare at grey boxes long enough to question your life choices. The fix was a mindset change: show whatever’s cached instantly, then quietly refresh in the background.
I stopped the cache from deleting its own homework, trimmed the timeouts, loaded images straight from the phone, and pre-warmed the other tabs while you weren’t looking. Half-a-minute waits turned into about a second.
The trick I’m quietly smug about
I never want to ship an update just to change what’s featured. So the Top 10 rows read a single file I host — I edit it, every phone updates, no app store involved. And on launch the app checks for a newer build and offers it up with a friendly popup. It basically patches itself, like a Tamagotchi that fixes its own bugs.
Six services, a cartoon vault, a thousand live channels — one app, one home screen, sharp art, instant loads, and a little on-device lock-picking doing the impossible quietly in the background. It started as “I’m tired of juggling apps, and tired of the bill,” and somewhere along the way became the most stubborn, satisfying thing I’ve ever built.