BunkToBrains
Study platform for GGSIPU students — 4,000+ active, 7,000+ at exam peak, ₹2 Lakh+ revenue. Anti-piracy PDF and video streaming with device fingerprinting and single-session enforcement, Razorpay with HMAC-verified webhooks, and a move from Vercel to self-hosted Docker on DigitalOcean.

Notes nobody could find
GGSIPU B.Tech students prepare from scattered PDFs, WhatsApp forwards and old question papers. BunkToBrains puts notes, videos and previous-year papers for every semester in one place, organised the way students actually revise.
Content that can't walk out the door
Paid material is only worth something if it stays paid. I built a streaming engine on Bunny.net that serves PDFs and video without exposing raw files, then tied every session to a device fingerprint so an account can only be open in one place at a time.
- Signed, short-lived URLs for every page and segment
- Device fingerprinting with real-time single-session enforcement
- Watermarked delivery to discourage screen capture
Payments that reconcile themselves
Razorpay checkouts are verified server-side with HMAC-SHA256, and a webhook reconciler catches anything the browser missed. n8n workflows then unlock content and send access emails without anyone touching a dashboard.
Surviving exam week
Traffic is calm for months and then multiplies the night before an exam. A 1,200+ req/min bottleneck in Postgres was fixed with an RLS-aware schema and rewritten queries, cutting database load by 85%. I then moved off Vercel onto self-hosted Docker on DigitalOcean to control cost and capacity.
Results
Questions people ask
Who is BunkToBrains for?
B.Tech students at GGSIPU who want notes, lecture videos and previous-year papers for their exact semester and branch.
Why leave Vercel?
Exam-season spikes made serverless pricing unpredictable. A Docker setup on DigitalOcean gave fixed costs and full control over caching and connection pooling.
How is piracy handled?
Files are never served directly. Every view goes through signed, expiring URLs, and accounts are limited to one active device at a time.