$ show sct/overseerr
Overseerr is a full-stack self-hosted web application for managing media requests in a Plex ecosystem. Users can search for movies and TV shows via TMDB, submit requests (including 4K variants), and have those requests automatically pushed to Radarr/Sonarr for download. The application also tracks media availability by scanning Plex libraries, syncs Plex watchlists, and provides a comprehensive notification subsystem supporting Discord, Telegram, Slack, email, webhooks, and web push. It includes user management with granular permissions, quota enforcement, issue reporting, and a highly customizable discovery page built from TMDB-driven sliders, genres, networks, and studios. The frontend is Next.js (React) with Tailwind CSS, SWR, Formik, and react-intl i18n; the backend is Express with TypeORM on SQLite. The project is feature-rich and has been widely adopted, but the README states it is superseded by the Seerr community fork, and the codebase relies on several aging dependencies (Next.js 12, React 18, Tailwind 3) and a hardcoded TMDB API key. Despite this, the code is well-organized with clear separation between API clients, entities, routes, and UI components, and many parts are written with solid engineering patterns such as a base external API client with caching/rate limiting, a template-method scanner base class, and a clean notification agent interface.
The LLM identified 5 files worth highlighting for reuse:
A generic HTTP client wrapper built on axios that adds per-instance NodeCache caching, token-bucket rate limiting, rolling cache refresh, and serialized cache keys. It is self-contained and can be extracted into any Node.js project requiring resilient, cached outbound API calls.
A minimal promise-based async mutex/lock utility that serializes critical sections across concurrent asynchronous operations. It is dependency-free, isolated, and directly reusable in any TypeScript project needing to prevent race conditions around shared resources.
Defines the NotificationAgent interface and a BaseAgent abstract class that standardizes how notification agents (Discord, Telegram, Slack, etc.) are built, including settings retrieval, shouldSend checks, and send methods. This contract is cleanly abstracted and can be lifted into any multi-channel notification system.
Implements a base scanner class that encapsulates the lifecycle of batch media scanning: batched item processing, progress tracking, cancellation, and lock handling. It provides a stable skeleton for any ETL-like read-and-sync job and can be adapted to sync sources other than Plex/Radarr/Sonarr with minimal changes.
A typed permission bitmask system using TypeScript enums and helper functions to check, combine, and manage granular user abilities. It is framework-agnostic and easily reusable in any backend or frontend that needs integer-based role/permission checks.