Jainulabudeen
ai lab · intervention
← all of the ai labProduct2026industry

What to Watch: Recommend From My Own History

Every recommender pitches you the same twenty titles it pitches everyone. This one starts from the two thousand titles I already got through, the handful I cared enough to rate, and what I said about them afterwards.

role
Solo build: the taste model, the three-source importer, and the interview-before-recommending rule
stack
Claude skill · Recommender · Personal data · Published on npm
status
shipped · in use
read the source

How I got here

I have watched a lot of films and I still lose twenty minutes a night scrolling. Every service I use is recommending from what is trending, which is another way of saying it is recommending the same thing to everyone. The one dataset that would actually help, which is the two thousand titles I have already been through, sits in an app that does nothing with it.

How I thought about it

Do not create a second ledger. This was the constraint that shaped everything, and it is where most personal tools go wrong. If the tool needs you to maintain a list, you will maintain it for three weeks and then stop, and now you have a stale list and a guilty feeling.

So the library is derived, not kept. Importers pull from the tracker you already use, and re-running merges rather than duplicates, so a second source is safe to add later. Nothing asks you to re-enter anything you have already logged somewhere else.

An unrated title means nothing. In a real library under five percent of titles carry a rating, and the ones that do are the strongest loves and hates only. Reading an unrated title as a dislike would throw away most of the data. That rule is written into the skill because it is exactly the shortcut a model takes if you let it.

Interview before recommending. "A thriller" is not enough to pick on. Recommending straight off a one-liner reads as random and wastes the evening you were trying to save, so it asks two to four focused questions first: the specific vibe, the intensity you want tonight, the language lane, the time you actually have.

Reason on the film, not on the people. No pitching "stars X" or "from the director of Y" unless the taste profile names that person as a genuine signal. Most people do not pick by cast. They just recognise cast names when you say them, which is not the same thing.

What I actually did

Two skills and a three-source importer. One picks something to watch, vets a title you are unsure about, finds something genuinely new, or sorts a wishlist that has become a graveyard. The other captures your reaction afterwards in your own words, which turns out to be the highest signal input in the whole system and is weighted above everything else.

Importers cover Letterboxd, MUST and Trakt. I verified the chain on my own data rather than on fixtures: 2,103 titles pulled, 2,094 after dedup, 102 of them rated. That last number is the honest one. It is why the skill is built to reason from a sparse ratings layer instead of pretending it has a dense one.

Anything it suggests from outside your history is marked clearly as unverified. A guess and a known quantity must never look alike in the output.

Where it's heading

The wishlist grooming is the part I use most and the part I built last, which usually means it was the real problem all along. A wishlist of three hundred items is a graveyard until somebody sorts it.