About this project

Loomkeep is a self-hosted media tracking application designed as a TV Time replacement that you fully own. It supports tracking series, movies, anime, games, books, and music, with optional friends, reviews, and comments social features. Catalog data is fetched live from TMDB (movies and series), AniList (anime), IGDB (games), Open Library (books), and MusicBrainz (music). The project is a pnpm monorepo written entirely in TypeScript. The backend uses NestJS, Prisma, and PostgreSQL with JWT authentication and rotating refresh tokens. The frontend is a SvelteKit PWA with an installable dark UI. A shared package contains DTOs and enums used by both sides. A key design choice is that the database acts as an on-demand cache: searches query external catalogs live, and media is persisted only when a user tracks it. Episode watches are stored one row per viewing, making rewatches first-class. Self-hosting is provided through Docker with pre-built images from GHCR. The README documents extensive optional add-ons using docker-compose override files, including public hosting with Caddy and Let's Encrypt, Cloudflare proxying and Turnstile bot protection, observability with Grafana, Loki, Promtail, and Prometheus, Healthchecks.io job monitoring, Portainer for Docker management, GlitchTip for error tracking, Umami for analytics, and Unleash for feature flags. Email via SMTP is optional and silently disabled when unconfigured.