Personal media tracker for movies, TV, anime, games, and music with a unified search experience and a stats-heavy dashboard.
- Unified search across TMDB (movies/TV), AniList (anime), IGDB (games), and Spotify (tracks/albums)
- Dashboard with activity, timeline, recent additions, and category stats
- Lists, ratings, notes, and progress tracking for each entry
- Rich media detail pages with metadata, credits, and external links
- Demo mode when logged out so the UI stays fully interactive
- Supabase-backed auth and persistence with row-level security
- Next.js App Router (React 19)
- Tailwind CSS + Radix UI primitives
- Supabase (Auth + Postgres)
- External data providers: TMDB, AniList, IGDB, Spotify
web/: Next.js app (UI + API routes underweb/src/app/api)supabase/schema.sql: database schema and RLS policiesdocs/supabase-setup.md: Supabase setup steps and migration notes
- Install dependencies:
cd web npm install - Create
web/.env.localwith the required environment variables (see below). - Start the dev server:
npm run dev
Create web/.env.local and add:
# Supabase
SUPABASE_URL=...
SUPABASE_ANON_KEY=...
SUPABASE_SERVICE_ROLE_KEY=...
NEXT_PUBLIC_SUPABASE_URL=...
NEXT_PUBLIC_SUPABASE_ANON_KEY=...
# TMDB (movies/TV)
TMDB_API_KEY=...
# Spotify (tracks/albums)
SPOTIFY_CLIENT_ID=...
SPOTIFY_CLIENT_SECRET=...
# IGDB (games)
IGDB_CLIENT_ID=...
IGDB_CLIENT_SECRET=...
Notes:
SUPABASE_SERVICE_ROLE_KEYis server-only; never expose it to the browser.- AniList uses public GraphQL, no key required.
- If IGDB credentials are missing, game search will return an error.
- Create a Supabase project.
- Run the SQL in
supabase/schema.sql. - Configure Supabase Auth (email + password).
- Follow
docs/supabase-setup.mdfor migration notes and env setup.
From web/:
npm run dev- run the local dev servernpm run build- build the production appnpm run start- start the production buildnpm run lint- run eslint