All projects
Reelm banner
Streaming · 2020 Live

Reelm

Self-hosted Netflix-style streaming platform with adaptive HLS and real-time transcoding.

Tech stack
React TypeScript FastAPI Python PostgreSQL Redis MinIO FFmpeg Nginx Docker

The problem

Paid streaming services are expensive, region-locked, and built around licensing windows that move content in and out. People with their own media libraries have no easy path to a clean product-grade player with features like adaptive streaming, resume, multi-profile, watch rooms, and admin tooling.

Goals

  • Production-grade HLS streaming with adaptive bitrate and resume
  • Real-time FFmpeg transcoding from a single source upload
  • Watch rooms that let remote users watch in sync
  • Admin console with drag-and-drop uploads and live transcoding progress
  • Single-command Docker deploy

The solution

  • Adaptive HLS playback at 480p, 720p, and 1080p with resume and variable speed
  • Real-time FFmpeg transcoding pipeline from upload
  • Multi-profile accounts with per-profile watch state
  • Watch rooms with invite codes for synced viewing
  • Mood-based discovery and Spotify-style Wrapped recap
  • Clip and share moments via public URL, QR handoff across devices
  • Full admin console with upload progress, library management, and user admin
  • 20+ features, 15 API routers, 7 Docker services

My role

  • Full-stack architecture across React frontend and FastAPI backend
  • HLS pipeline and FFmpeg transcoding worker
  • PostgreSQL schema for library, profiles, and watch state
  • MinIO object storage and Nginx media delivery
  • Docker Compose orchestration across 7 services

UI direction

Dark, content-forward UI with poster-focused browsing. Admin console intentionally minimal so library management does not feel like operating a CMS.

User flows

Viewer flow

  1. 1 Sign in and select a profile
  2. 2 Browse by mood or library section
  3. 3 Play with adaptive bitrate and resume
  4. 4 Invite friends into a watch room for synced playback

Admin flow

  1. 1 Drag and drop a new video file into the admin console
  2. 2 Watch live transcoding progress across resolutions
  3. 3 Library entry becomes available once the master playlist is written

Screenshots

Browse home with mood-based rails
Browse home with mood-based rails
Title detail with resume and variable speed
Title detail with resume and variable speed
Multi-profile accounts
Multi-profile accounts
Watch rooms with invite codes
Watch rooms with invite codes
Spotify-style Wrapped recap
Spotify-style Wrapped recap
Admin console with live transcoding progress
Admin console with live transcoding progress

Key learnings

  • HLS plus FFmpeg plus MinIO plus Nginx is a stable reference stack for self-hosted streaming
  • Separating the transcoding worker from the API service keeps the API responsive under upload bursts
  • Watch rooms are easy to ship badly, and you need a dedicated sync protocol if you want them to feel right

Want something like Reelm?

I'm open to senior contract work. Let's talk about what you're building.

Get in touch