CineMatch

Two-stage engine/pgvector + LambdaMART

Recommendations that learn your taste.

Not another row of what is trending. CineMatch builds a profile from what you watch, retrieves the closest titles with a pgvector index, and re-ranks them with a learned model so the next pick fits you, not the crowd.

01. Profileyour taste
$ taste = embed(your_likes)
02. Retrievepgvector kNN
$ candidates = pgvector.knn(taste, k=50)
03. Re-ranklambdaMART
$ picks = lambdaMART.rank(candidates)

See it in action

$ cinematch recommend --for "slow-burn sci-fi"
matching 1,510 titles in the catalog
1  Arrival              98% match
2  Blade Runner 2049    96% match
3  Annihilation         94% match
ranked by your taste, not the box office
cinematch
1
2
3
4
5
ranked by your taste, not the box office
CineMatch

Why it works

Movies and TV

815 films and 695 series, embedded and refreshed weekly from TMDB.

Built on your taste

A 1536-dim embedding per title. Your likes steer both retrieval and ranking.

Ranks in milliseconds

A LambdaMART model re-orders the 50 candidates with p95 latency near 0.9 ms.

Honest metrics

NDCG@10 0.81 on held-out users, a 14% lift over a popularity baseline.

The catalog

Trending Now

See all

Top Rated

See all

New Releases

See all

Find your next favorite.

One tap to sign in, no passwords. Your taste profile builds as you go.

Start matching
CineMatch
NDCG@10 0.81 · ~0.9 ms re-rank
Next.js · Go · pgvector · 2026