1
0 Comments

How I built an OTT streaming app with 7,000+ downloads at ₹0/month — solo, from Lucknow

I'm Wasey, a solo developer from Varanasi, India. I just graduated with a B.Tech in CS and instead of job hunting, I spent the last 18 months building DramaHub — a fully live OTT streaming app on Google Play Store.
Current stats:
📦 7,000+ downloads
👥 1,000+ daily active users
💰 ₹0/month infrastructure cost
💥 Sub-1% crash rate
Here's the honest story of how I built it and what nearly broke it.
The Architecture
I had zero budget for servers. So I made GitHub the database. All drama content, episode metadata, and app config live as JSON files in a GitHub repository. A Cloudflare Worker sits in front and caches everything at the edge globally. Free. No backend server needed.
The admin panel is a Flutter Web app that talks directly to the GitHub REST API. I can add dramas, change episode links, toggle ads, switch CDN providers, force update users — all without releasing a single APK update.
The Crash That Taught Me Everything
One day the app went completely down. Every user got a crash on launch.
The reason: my Cloudflare Worker wasn't caching properly. Every request was hitting GitHub directly and I burned through the API rate limit in minutes. App dead.
I fixed the Worker caching properly. Then I added a full backup system — if the primary API ever goes down, I can switch to a direct GitHub raw URL or a backup Worker from the admin panel in under 60 seconds. No new APK release needed. I built that entire system in one night after the crash.
The YouTube Problem
YouTube's embedded player works perfectly on web but breaks inside Flutter apps. I solved it by building a WebView-based player inside the app with custom controls and a URL whitelist. Later I added a remote config toggle — if any player causes issues, I can switch the entire app to a different player from the admin panel instantly. DramaHub runs a dual player system — YouTube WebView as primary, custom player with Cloudflare R2 as secondary. No APK update needed.
The Ads Problem
Integrating CAS.ai SDK was painful — some adapters weren't initializing properly and caused crashes. Fixed it by isolating each adapter, testing one by one, and adding fallback logic. Now ads are fully remote-controlled — per screen toggles, session caps, cooldown timers, all via JSON config.
What I Learned
Build your admin panel first. The ability to change anything without a new release saved me dozens of times. Remote config is not a feature — it's survival.
Also — GitHub as a database actually works at production scale if you architect the caching layer correctly. Don't let anyone tell you it's a hack.
What's Next
I also built NetworksInsights — a live B2B SaaS platform (affiliate network directory, G2/Trustpilot model). 12-table PostgreSQL, 87-issue security audit completed. That's my next focus.
Happy to answer any questions about the zero-cost architecture, Flutter production patterns, or the GitHub-as-database system.
— Wasey
🔗 Portfolio: waseyjamal.vercel.app
🔗 Play Store: https://play.google.com/store/apps/details?id=com.dramahub.drama_hub
🔗 GitHub: github.com/waseyjamal
🔗 Twitter: @waseybuilds

posted to Icon for group Flutter
Flutter
on May 23, 2026
Trending on Indie Hackers
The feature you're most sure about is the one you should question first User Avatar 117 comments The hardest part isn't building anymore User Avatar 115 comments 5 days post-launch: Top 50 on Product Hunt, zero signups, and why I think that's actually fine User Avatar 114 comments I let 3 LLMs argue on the famous AI "Car wash: Walk or Drive" problem to prove a point. User Avatar 50 comments Built a local-first privacy extension. Looking for feedback. User Avatar 37 comments I spent months chasing clients who already had a webmaster. So I built something that only finds the ones who don't. User Avatar 34 comments