Back to Projects
Netflix Clone - Local Streaming

Netflix Clone — Local Streaming

Web Development
Type
Personal Project
Focus
Self-Hosted Streaming
Timeline
2025

Project Overview

A self-hosted, Netflix-style streaming application that serves a personal movie library straight from local storage. The Node.js backend scans the library, builds a searchable catalog, enriches it with TMDB metadata, and streams video with full HTTP Range support — so seeking and resuming feel instant. Built with zero runtime dependencies, using only Node's native modules on the server and vanilla JavaScript on the front-end.

6
Backend modules
8+
API endpoints
100%
Zero client paths
0
Dependencies

What I Built

Streaming engine. Implemented HTTP Range streaming from scratch on Node's native http module — every title plays back with instant seek, resume, and partial-content support.

Catalog pipeline. A scanner walks the local library, builds a catalog keyed by id, and enriches each entry with TMDB posters, backdrops, and episode stills.

Security by design. No raw filesystem path ever reaches the client — everything is resolved server-side against the catalog, and the TMDB token stays on the server.

Full Netflix UX. Recreated the login, profile selection, and browsing experience, plus FFmpeg thumbnails and the option to open a title in the OS default player.

Application Gallery

Home — catalog rows with TMDB artwork
Home — catalog rows with TMDB artwork
End-to-end home view with hero billboard
End-to-end home view with hero billboard
Authentication — Netflix-style login
Authentication — Netflix-style login
Who's watching — profile selection
Who's watching — profile selection
Profile modal — styled account settings
Profile modal — styled account settings
Responsive audit — mobile 375px
Responsive audit — mobile 375px

Technical Implementation

Backend. Pure Node.js on the native http module — no Express, no framework. Serves static files, a catalog API, thumbnail generation, and the streaming endpoint.

Streaming. GET /stream honours the Range header and returns 206 Partial Content, enabling seek without downloading the whole file.

Thumbnails. FFmpeg is spawned to extract poster frames, which are cached on disk and reused on later requests.

Metadata. A server-side TMDB client enriches the catalog with artwork and episode data; the API token never crosses to the browser.

Front-end. Vanilla JS modules — app, auth, config, data, and a custom i18n layer — with a CSS-only Netflix-style UI and HTML5 video playback.

Technologies Used

backend

Node.jsNative http moduleFFmpegTMDB APIzlib (gzip)

frontend

Vanilla JavaScriptHTML5 VideoCSS3i18n (custom)

streaming

HTTP Range requestsOn-the-fly transcodingPoster frame caching

features

Catalog indexingCommentsWatchlist / ordersDefault-player playback

Key Features Shipped

Local movie library scanning with automatic catalog indexing
HTTP Range streaming for instant seek and resume
FFmpeg-generated poster thumbnails, cached on disk
TMDB metadata enrichment — posters, backdrops, episode stills
Server-side TMDB token — never exposed to the browser
Netflix-style auth flow: login, profiles, who's watching
Open any title directly in the OS default player
Comments and watchlist persisted server-side
Multi-language UI with a custom i18n layer
Responsive layout audited across mobile, tablet, and desktop