Back to projects

AI / MLPrototype2026

ReelMind

A Netflix-style movie app whose recommendations come from TypeSafe's Jev: three typed requests rank a catalogue in about 400 ms for $0.0006, and every pick explains itself.

382 ms
Median time per recommendation, measured
$0.0006
Cost per recommendation
25
Typed questions across 3 Jev calls

Timeline

Oct 2026

Role

Design, recommendation pipeline and front end

Team

Solo

Domain

Streaming and media · Recommendation systems

Status

Prototype

Stack

Next.js 16React 19TypeScriptJev (TypeSafe)Tailwind CSS 4Framer Motion

Source

Section 01

Overview

The obvious way to build an AI recommender is to paste the whole catalogue and the viewer's history into one LLM prompt and ask for a ranked list with reasons. That is slow, priced at frontier-model rates, and returns prose you have to parse and cannot calibrate.

ReelMind takes a different route. It asks Jev, TypeSafe's decision model, narrow typed questions one level at a time, and lets plain code do the filtering in between. Jev does not generate text: it answers yes/no, multiple-choice and scale questions with a probability for every option, and those probabilities become the ranking.

For You: Jev's top pick
ReelMind home with Avengers: Endgame as Jev's number one pick for the viewer, with its probability

Section 02

Four Stages, Three Calls

1. Taste profile. One request asks 17 questions about the last 25 titles watched: a separate yes/no affinity for each of 11 genres (so a viewer can love several), preferred language, tone, era, and whether they are multilingual, acclaim-driven or watching as a family.

2. Narrowing, in code. Keep the strongest genres, the languages that cover 85% of the probability, apply a family-safe rule, relax the filters if fewer than 8 titles survive, and cap the shortlist at 30. This step costs 0 tokens and about 1 ms.

3. Rank. One multiple-choice question across the shortlist. Jev's probability distribution is the ranking.

4. Explain. One request links each top-5 pick to the film in the viewer's history it most resembles ("Because you watched...") and builds two more rows from titles outside the Top 10, so rows never repeat.

Replay: narrowing in code
How Jev Picks replay showing filters narrowing 88 titles to a 30-title shortlist
Ranking and explanations
Ranked shortlist with Jev probabilities beside the Because you watched links
The exact typed request
JSON of the ranking request sent to the Jev API

Section 03

The Product

The catalogue has 88 streaming titles plus 132 archive titles that make up six viewer histories, from a Marvel fan to a family. Every title opens with Jev's verdict: its rank among the candidates, its probability, and the film in your history behind it, or which stage filtered it out.

Watching a film adds it to your history and re-ranks the whole page, measured at 482 ms in the browser. A new viewer picks three films and that is enough for a first profile.

Top 10 and Because-you-watched rows
Top 10 row and a Because you watched Iron Man row of posters
Jev's verdict on a title
Title modal showing its rank of 30 candidates, probability and the history title behind it
New viewer onboarding
Pick three films you love onboarding screen with three posters selected
Re-ranked after a watch
Home page re-ranked after watching a film, with a new Because you watched row
ReelMind on a phone with Hereditary as the top pick for a horror fan
For You on a phone

Section 04

Measured Results

Measured over 18 runs across all six viewers against the live API, a full recommendation takes a median 382 ms (306 to 600 ms), about 14,200 input tokens and $0.0006. The number-one pick was identical across all three rounds for every viewer; lower ranks shuffle slightly between runs.

One honest finding: only the ranking step is capped. The explanation step lists every unwatched title outside the Top 10, so it accounts for 72% of tokens and grows with the catalogue. The next version would cap that step too.

The numbers behind one run
Dashboard with 403 ms, $0.000602, 14,335 input tokens and 3 Jev calls with 25 questions