Behind a passcode, so there’s no public link — a 60–90s demo video stands in for live access (link appears above once it’s recorded).
The problem
Two people, one watchlist, and the same stalemate every night. Streaming catalogs are enormous, each partner’s taste pulls in a different direction, and the hardest thing to find is the overlap — the show you’ll both actually enjoy. Recommenders are built for one viewer, not for two people deciding together.
Who it’s for
A two-person household that watches both together and separately, and wants the decision made for them instead of doom-scrolling for twenty minutes.
What I built
A web app that tracks what each partner has watched, is watching, dropped, or wants to watch, then generates three ranked recommendation lists with Claude:
- Co-watch — shows both partners would likely enjoy together
- Corey’s Picks — personalized for one partner
- Jaimie’s Picks — personalized for the other
Lists cover both new shows and continuations of in-progress series. Each partner votes Agree / Disagree / Maybe on every pick; votes are visible to the other partner and feed back into the next round of rankings. Every recommendation comes with a short why — not just what.
How it works
The model reasons over each partner’s watch history and ratings, in-progress shows, active streaming subscriptions, regional availability, TMDb community ratings, and episode counts — then produces ranked, explained picks. The “co-watch” list is the interesting part: it optimizes for joint enjoyment, which is a different objective than “what would this one person like.”
Stack & architecture
Next.js 16 (App Router, React Server Components, Server Actions) with Prisma (SQLite locally, Postgres in prod), passcode auth via iron-session, the Anthropic SDK for generation, and the TMDb API for metadata, posters, and streaming providers. UI in Tailwind v4 + Radix. Built and deployed solo.
How I measure success
The app instruments its own feedback loop, so success is observable rather than guessed. The signals I watch:
- Agreement rate — share of recommendations voted “Agree” (built-in voting).
- Watch-through rate — how often a recommended pick actually got watched.
- Time-to-decide — minutes from opening the app to choosing something; the whole point was killing the twenty-minute scroll.
- Repeat usage — do we actually come back to it each week.
Product takeaways
- Recommending for a pair is a genuinely different problem than recommending for an individual — the win is in the overlap, and optimizing for it changes both the data you collect and how you rank.
- The explanation (“why this show”) did more for trust than ranking quality did; people accepted picks they could understand.
- Closing the loop with lightweight voting turned a static suggestion list into something that improves with use, for almost no added UI complexity.