Selected work
Full-stack Desktop AppTypeScript · Electron · React · Express · Node.js

VOD Archiver

Desktop app that automatically records Twitch streams with OAuth login, real-time EventSub subscriptions, fallback polling, encrypted storage, and SQLite persistence.

An Electron desktop app that automatically records Twitch VODs. Streams are triggered via OAuth-authenticated EventSub webhooks with a 60-second polling fallback, recorded via Streamlink, and optionally encrypted using AES-256 at rest in an SQLite vault.

Role — Solo developer (primary architect, 304 of 376 commits)
  • Electron 37
  • React 19
  • Express 5
  • Node.js
  • SQLite3
  • Streamlink
  • FFmpeg
  • Vite
  • Tailwind CSS
  • Framer Motion
  • axios

VOD Archiver is a full-stack desktop application that runs locally on Windows (primary target) and allows a single user to automatically capture live Twitch streams as they broadcast. The frontend is a React app bundled with Vite and packaged as an Electron app; the backend is an Express server that manages OAuth authentication, Twitch API integration, stream recording lifecycle, and encrypted archive storage.

The recording pipeline uses Streamlink to capture the live stream (downloaded and managed automatically on first run), spawns FFmpeg to transcode and segment recordings as .mp4 files, and tracks stream metadata (title, viewer count, game) separately for archive context. VODs are stored in a dated folder hierarchy (vods/<username>/<yyyy>/<mm>/) and can be optionally encrypted with a local passphrase using AES-256-CBC with scrypt key derivation.

The app uses Twitch EventSub subscriptions to detect stream.online events in real time, with a configurable stream poller (default 60s) as a fallback in case webhooks fail. Active recordings survive app restarts and resume from where they left off. A 'highlight' system lets users mark moments during live recordings with manual timestamps. The entire data model—user sessions, channels to monitor, highlights, vault passwords, and VOD metadata—is persisted in a single SQLite database with encrypted session storage.

What's notable
  • Automated Twitch stream capture: EventSub webhook subscriptions trigger recordings in real time, with configurable fallback polling every 60 seconds
  • Local encryption vault: finished recordings can be encrypted at rest using AES-256-CBC with scrypt-derived keys and a user-set passphrase
  • Persistent recording state: active recordings are tracked in the database and automatically resumed if the app restarts during a live stream
  • Manual highlight timestamps: users can mark important moments during a live recording from the UI, stored in SQLite with stream metadata
  • Desktop-first architecture: Electron wraps the Express backend so the entire app, including Streamlink binary, is self-contained and ships as a single NSIS installer