Case study 02
LocalTube
Your own video library. No algorithm.
Overview
LocalTube is a self-hosted video library for the videos already on your computer. It scans local folders, extracts metadata and thumbnails with FFmpeg, and serves a YouTube-style browsing and player experience — without uploading anything.
The challenge
Local video collections are usually a folder tree and a generic player. The challenge was to make them feel browsable and study-friendly: categories, continue watching, course progress, search, and a timer that fits actual study sessions.
The approach
The app pairs a React 19 + TypeScript front end with an Express + TypeScript backend. SQLite stores watch history, favorites, course progress, and Pomodoro tasks. FFmpeg generates thumbnails; HTTP range requests handle playback. Optional yt-dlp and YouTube API integrations add downloads and metadata without becoming required dependencies.
What it does
- Scan local folders and extract video metadata
- YouTube-style browsing and player experience
- Nested categories, courses, favorites, and watch history
- Continue watching, search, sorting, and progress tracking
- Course mode with study planning and statistics
- Pomodoro timer with saved settings and tasks
- Optional yt-dlp downloads and YouTube metadata
- English and Arabic UI
Technical notes
- React 19 + TypeScript + Vite front end
- Express + TypeScript backend
- SQLite with better-sqlite3
- FFmpeg thumbnails and HTTP range streaming
What I learned
LocalTube was my deepest lesson in local-first architecture. Every feature had to work without a cloud account, which made file handling, SQLite migrations, and streaming decisions much more explicit. It also taught me to design optional integrations: yt-dlp and the YouTube API are useful, but the app must work without them.