OpenStream
A subscription free streaming platform with a catalogue that updates itself.
The problem
Most streaming platforms require a subscription and their catalogues are curated by editorial teams. I wanted a platform where the catalogue stays fresh without anyone pressing a button.
Constraints
Solo build. No budget for media storage or a paid recommendation API. Free tier limits on Cloudinary and Firebase.
What I built
A Next.js frontend with a cinematic browsing interface backed by the TMDB API for metadata. Firebase handles authentication and user profiles. A nightly automation script checks the TMDB catalogue for new or updated titles, pulls trailers through yt-dlp, and pushes them to Cloudinary. The frontend reads from Cloudinary, so the catalogue is always current without a deploy or a manual upload.
The interesting decision
I chose yt-dlp and Cloudinary over storing media directly. yt-dlp handles the complexity of extracting video from multiple sources, and Cloudinary gives me a CDN with automatic transcoding. The trade off is a dependency on YouTube terms of service, but for a personal project the reliability is worth it.
What broke, and what I changed
The first version of the sync script ran every hour and hit API rate limits. I moved to a nightly cron schedule and added retry logic with exponential backoff. Cloudinary's free tier also has a bandwidth cap, so I added lazy loading and adaptive quality to stay within limits.
Result
The catalogue updates automatically every night. The browsing interface loads quickly because trailers are served from Cloudinary's CDN. No manual intervention required since the script started running.
A nightly script detects catalogue changes, fetches new trailers with yt-dlp, and syncs them to Cloudinary. No manual step.