Inspiration

I watch a lot of movies and TV shows. A LOT. My biggest pet peeve is figuring out what to watch next.

Using an LLM for inspiration can be helpful, but it usually requires a lot of unnecessary back and forth. Even after all that, I sometimes end up not liking any of its recommendations.

I wanted a way to discover movies and shows with an agent while staying in control, actively making choices and telling it what interests me and what doesn’t. I also wanted an immersive visual experience where I could explore a title, watch its trailer, check where it is streaming, and save it to my watchlist. Then I wanted to take it one step further: planning entire weekends around everything I wanted to bingewatch. When I explored WebMCP, I realized that I could now collaborate with an agent instead of delegating the whole task to it. I could stay in complete control while letting an agent do the grunt work for me.

That’s how I came up with BingeWatcher.

What it does

BingeWatcher is a movie and TV discovery app built for people and their WebMCP agents to use together.

You can explore trending titles, search for something specific, combine filters such as genre, language, release year, runtime, and streaming provider, and open detailed pages containing trailers, recommendations, ratings, seasons, episodes, and streaming availability.

Titles can be saved to a personal watchlist or added to an ordered lineup for a movie night, themed marathon, or entire weekend.

The most important part is how those lineups evolve. An agent can create and maintain a lineup, but the person remains in control. You can:

  • Lock a title that must stay
  • Mark another as Not for me and (optionally) explain why
  • Reorder the lineup yourself
  • Change its preferences
  • Ask the agent to rebuild only the remaining picks

The agent works around those decisions instead of replacing them. BingeWatcher also tracks movie-level and episode-level progress, supports lightweight reactions, and keeps a history of changes made to each lineup.

Everything remains fully usable without an agent.

How I built it

I built BingeWatcher as a single application using Next.js 16, React 19, TypeScript, Tailwind, and Bun.

Movie and TV metadata comes from TMDB, including search results, posters, genres, recommendations, trailers, seasons, episodes, ratings, and regional watch providers. I also integrated the Streaming Availability API for direct provider links where available.

The app uses SQLite for persistent data. Anonymous visitors receive a secure, HTTP-only browser session, so their watchlist, progress, reactions, and lineups remain available when they return. Lineups also have separate secure edit/resume links and read-only sharing links.

I exposed the application through WebMCP using the imperative document.modelContext.registerTool() API. The tools cover discovery, title details, recommendations, watchlists, progress, reactions, and complete lineup management.

Most importantly, the WebMCP tools do not operate on a separate agent-only system. They call the same backend operations used by the human interface, which means both sides share the same data, validation rules, locks, vetoes, and revision checks. Agent actions such as searching, opening a watchlist, or creating a lineup also navigate and update the visible interface.

The production application runs in a Docker container on Render with SQLite stored on a persistent disk.

Challenges I ran into

The hardest challenge was deciding how much control the agent should have.

Letting an agent replace an entire lineup would have been easy, but it would also make human decisions feel temporary. I had to design the system so that locks, vetoes, ordering, preferences, and concurrent edits were treated as durable constraints.

Supporting movies, complete TV series, and individual seasons inside the same lineup introduced another layer of complexity. Progress also needed different behavior: movies are tracked at the title level, while TV progress is tracked by episode so that season and series completion can be derived correctly.

Another challenge was making WebMCP actions feel visible. A tool technically succeeding in the background was not enough. If an agent searched for a title or opened a newly created lineup, the interface needed to visibly follow that action so the person could immediately inspect and continue the work.

External media APIs introduced their own complications. Search and discovery are separate operations in TMDB, so combining text searches with detailed filters required carefully joining and validating the available metadata. Streaming data also varies by region and provider.

Accomplishments that I’m proud of

I’m most proud that BingeWatcher feels like a complete product even when no agent is connected. In my opinion, that's how products are meant to be in the age of agent <-> human collaboration.

The human interface is a beautiful (if I may say so myself) website designed to deliver a premium discovery and planning experience to its target audience: cinephiles and TV buffs. It includes rich discovery, detailed title and season pages, ordered lineups, watchlists, progress tracking, reactions, drag-and-drop reordering, trailers, preferences, history, secure sharing, and much more.

At the same time, the agent can work across nearly the entire product through WebMCP. It can discover titles, understand live lineup state, respect locked picks and vetoes, make precise changes, validate the result, and leave the final decisions to the person.

I’m also proud of the core collaboration loop: an agent can build a lineup, a person can lock one pick, reject another, change the order, and ask the agent to rebuild only what remains. That interaction captures what I wanted BingeWatcher to be- AI agents helping someone express their taste instead of replacing it.

What I learned

The biggest thing I learned is how WebMCP, once standardized and widely adopted, can become the go-to way for websites to enable human <-> agent collaboration. This is where I believe all software will converge over the coming years.

The best experience came from making the normal application excellent first, then giving the agent access to the same meaningful actions. WebMCP became much more useful when its tools represented real product capabilities rather than isolated technical endpoints.

I also learned how important tool descriptions and schemas are. They do more than document an API. They establish the boundaries of the collaboration. A clear description can tell an agent when to stop, what it may change, and which human decisions it must preserve. All the while keepig context bloat to a minimum.

Finally, I learned that visible state matters. People trust an agent more when they can see what it opened, what it changed, and what it deliberately left alone.

What’s next for BingeWatcher

The next step is permanent accounts for people who want cross-device access, using email magic links, Google, or passkeys while preserving the anonymous-first experience.

I would also move production persistence to a network database before supporting multiple application instances, add real-time collaborative editing, and continue improving personalized discovery using watch history, reactions, watchlists, and explicit preferences. I also want to add multiplayer (more humans) lineups and watchlists for planning movie nights and weekends with friends.

Longer term, I want BingeWatcher to become a shared home for planning more kinds of entertainment, with richer group planning, better provider-aware recommendations, and perhaps even support for books.

Built With

Share this project:

Updates

Submission history