A private Letterboxd · for one

The watchlist that's actually yours.

Track everything you want to watch, are watching, and have loved. One fast app. No social network, no algorithm. Just your shelf, on your machine.

MIT licensed · Docker or Vercel · Your data never leaves your box.

Read the case study

Why slate

Everything Letterboxd does well, without the social part.

Slate is a single-user app. It optimizes for one thing: helping you decide what to watch tonight, and remembering what you thought of it tomorrow.

  1. 01

    Command palette

    Add anything in one keystroke.

    Press ⌘K, search the entire TMDB catalog, hit enter. Films, shows, episodes, all in your library before the keystroke fades.

  2. 02

    AI search

    Type the vibe, not the title.

    “Cozy autumn mysteries.” “A24 horror after 2020.” “Nolan thrillers.” Powered by Llama 3.3, Claude, or whatever endpoint you point it at.

  3. 03

    Critic scores

    IMDb and Rotten Tomatoes, baked in.

    Every saved title carries an IMDb rating and a Tomatometer (with a Metacritic fallback). Fetched once, cached, surfaced everywhere.

  4. 04

    Three states

    Want · Watching · Watched.

    Three clean shelves with Love / Like / Dislike ratings and a private notes field. No followers, no public timeline, no thumbs you don't want.

  5. 05

    One-step import

    Bring your Letterboxd or Trakt history.

    Drop in a CSV. Slate matches every row against TMDB, dedupes against your library, and drops it into the right state with ratings preserved.

  6. 06

    Yours, by default

    No accounts. No tracking. No telemetry.

    Run it on your laptop in Docker, or on Vercel + Supabase. The only outbound calls are to TMDB. Lock the door with a passcode if you want.

Plain-English search

Stop typing titles. Start typing moods.

Flip the “Ask AI” pill in the command palette and type the way you actually think. Slate turns vibes into a real shortlist. Pulled from TMDB, scored on critic data, deduped against what you've already seen.

  • Live suggestions. Real titles surface as you type. No waiting for a full response.
  • Library-aware. Already saved? Slate skips it. Recommendations stay fresh.
  • Bring your own model. Llama, Claude, GPT, or self-hosted via Ollama. One env var.

Defaults to Groq's free tier (Llama 3.3 70B). Bring your own OpenAI-compatible endpoint, or set AI_PROVIDER=anthropic for Claude.

A24 horror after 2020Ask AI
  • Pearl (2022)

    Pearl (2022)

    Slasher · Ti West

  • Talk to Me (2023)

    Talk to Me (2023)

    Supernatural · Philippou

  • Men (2022)

    Men (2022)

    Folk horror · Garland

  • X (2022)

    X (2022)

    Slasher · Ti West

  • I Saw the TV Glow (2024)

    I Saw the TV Glow (2024)

    Surreal · Schoenbrun

5 suggestionsLlama 3.3 · 240ms
Want
Anora

Anora

2024

Conclave

Conclave

2024

Watching
Severance

Severance

S2 · E5

Slow Horses

Slow Horses

S4 · E1

Watched
The Holdovers

The Holdovers

Loved

Past Lives

Past Lives

Liked

Three shelves, no friction

Want, watching, watched. That's the whole app.

Move titles between shelves with a click. Add a private note. Mark it Loved, Liked, or Disliked. Nothing public to maintain, no one to follow. Slate is the opposite of a feed.

WantSaved for later. Sortable by genre, year, rating.
WatchingIn progress. Episodic shows, slow-burn series.
WatchedLoved, Liked, or Disliked. With a private note.

Self-host in five minutes

Your library, your machine, your rules.

Slate is built to be self-hosted. One docker-compose file spins up the whole stack on your box (Postgres, PostgREST, the app) and keeps every byte of your library under your roof.

  • One docker-compose, three services.

    Postgres, PostgREST, and the Next.js app, wired through Caddy so the Supabase client works unchanged.

  • Your data lives in a named volume.

    pg_dump for backups. docker compose down -v to wipe. No vendor lock-in, no cloud egress bills.

  • Passcode-gated by default.

    Set APP_PASSCODE in .env to lock the app behind a shared cookie. Multi-user? Swap in Supabase Auth + RLS.

  • Or one-click on Vercel.

    Same repo. Vercel + Supabase deployment in five minutes. The schema is a single SQL file.

~/slate · zsh
$ git clone github.com/gitshanks/slate.git
$ cd slate
$ cp .env.example .env  # add TMDB + OMDB keys
$ docker compose up -d

[+] Running 4/4
 postgres   Started
 postgrest  Started
 caddy      Started
 slate      Started

# http://localhost:3000, done.

Built on

  • Next.js 16
  • React 19
  • Tailwind CSS v4
  • shadcn/ui
  • Postgres
  • PostgREST
  • TMDB
  • OMDB

Decide what to watch tonight.
Remember it tomorrow.

Try the live demo with seeded data, or pull the repo and have your own copy running before the kettle boils.