Keep track of your TV series — and never miss a new episode.
A small, self-hosted web app to follow shows, mark episodes and seasons as watched, and see at a glance which series have new episodes waiting.
Series and episode data comes from TMDB.
This product uses the TMDB API but is not endorsed or certified by TMDB.
- Follow series and track watched episodes per user
- Dashboard sorted by progress, with a badge for unseen aired episodes
- Mark single episodes, whole seasons, or a series as watched — including a one-click "watched" action right on the dashboard card
- Defer series you want to keep but watch later ("on hold")
- Add series via TMDB search; bulk import from an IMDb CSV export
- Personal statistics page: your collection by follow and production status, plus total time watched, remaining backlog, top series by time, and weekly viewing activity
- Multilingual content and interface (English, German, French, Spanish,
Italian) with per-user language; the UI language is easy to extend via flat
JSON catalogs in
lang/ - Admin-managed accounts with forced first-login password change and brute-force protection on the login
- Daily background refresh of new episodes via cron
- PHP 8.3+ (extensions:
pdo_mysql,curl) - MySQL / MariaDB
- Apache with
mod_rewrite - A TMDB API key (v4 read access token or v3 API key)
- Dependencies: run
composer install. - Database: create an empty database and a user for it — the exact
CREATE DATABASE/CREATE USER/GRANTstatements are in the header ofsql/schema.sql. - Guided setup: run
php bin/setup.php. It asks for the database and TMDB credentials, writesconfig/config.php, loads the schema and creates the first admin account — all options are documented inconfig/config.sample.php. - Web server & cron: point the web root at
html/and set up the daily update cron. A full walkthrough is indeploy/SETUP.md.
Updating: after pulling a new version, apply pending schema changes with
php bin/migrate.php (idempotent; see
sql/migrations/README.md).
UI translations are flat JSON files in lang/ (English is the source
language and needs no file). To add a language, copy lang/de.json to
lang/<code>.json, set its "__language__" label, and translate the values;
it appears in the settings automatically. Check completeness with
php bin/check_translations.php. See lang/README.md.
Catenvis is free software, licensed under the GNU General Public License v3.0.
