Open source · Self-hosted

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.