Reel Faves:
Personalized Movie Discovery

The Discovery Problem
Streaming killed the video store but created a new problem. Thousands of options across Netflix, Hulu, Max, Disney+, Apple TV — and no way to find what you'd actually enjoy. Every platform recommends what keeps you on their platform, not what you'd genuinely love.
I wanted to build a discovery experience that worked across all of them. One place to browse, search, save favorites, and get recommendations based on your actual taste — not what an algorithm wants you to watch next because they paid for the license.
The product vision was straightforward: you tell us what you love, and we tell you what you'll love next — with a clear explanation of why.

The discovery grid pulls trending and top-rated content from TMDB, presented in a dark, immersive layout designed for browsing.
Four APIs. One Data Model.
The core architectural challenge was that no single data source had everything. TMDB had the best metadata — titles, genres, ratings, release dates, poster art. YouTube had trailers and featurettes. OpenAI could analyze taste patterns and generate recommendations. Firebase handled user accounts and persistent data.
Each API returns data in a different format, has different rate limits, and fails differently. The architectural decision that made everything else possible was building a normalization layer between the APIs and the frontend. Every piece of data gets transformed into a single, consistent schema before it reaches a React component. The frontend never knows which API the data came from — it just consumes a clean, unified model.
This meant the frontend code stays simple. No provider-specific parsing logic scattered across components. No conditional rendering based on which API responded. One data shape, everywhere.
Data Flow Architecture
4-API OrchestrationFour APIs, one normalization layer, one data model. The frontend never touches provider-specific data.

Movie detail pages combine TMDB metadata (ratings, genres, runtime) with YouTube video content (trailers, featurettes) in a single view. The user sees one experience; the architecture manages two API integrations behind it.
Recommendations that Explain Themselves
Most recommendation engines are black boxes. They tell you what to watch but not why. That makes them easy to ignore — if you don't understand the reasoning, you don't trust the suggestion.
Reel Faves takes a different approach. When a user builds a favorites list, the system analyzes the full collection through OpenAI — not just matching genres, but identifying patterns across themes, narrative structure, tone, and era. Each recommendation comes back with three pieces of information: the title, a match score, and a reasoning paragraph that explains specifically why this film connects to something the user already loves.
That transparency changes user behavior. When someone reads why a recommendation was made, they're more likely to try it. And when the reasoning is good, they trust the system to surface films they'd never have found on their own.

Each recommendation shows which favorite it's similar to, a match score, and a reasoning paragraph explaining the connection. The AI's thinking is visible, not hidden.
Pattern analysis
OpenAI analyzes the full favorites collection — not individual films in isolation. Recommendations emerge from the relationships between favorites, not from genre matching alone.
Living recommendations
Recommendations regenerate as the favorites list evolves. Add a new film and the entire analysis updates — new patterns, new suggestions, new reasoning.
The Complete Experience
Reel Faves shipped as a full product — not a prototype, not a demo. Users create an account, browse trending and top-rated content across film and television, search TMDB's full catalog, save favorites, watch trailers and featurettes inline, and receive AI-powered recommendations that explain their reasoning.
The product runs on Next.js with server-side rendering for fast initial loads. Tailwind CSS handles the dark, immersive visual design. React Context manages global state for user data, favorites, and recommendations. Firebase handles authentication and persistent storage. Every page is responsive across desktop and mobile.

The favorites list — every film here feeds the recommendation engine.

Show detail pages pull metadata, episode information, and video content into a single view.
What Shipped
Auth, search, favorites, recommendations, detail pages, embedded video, responsive design — a complete product, not a prototype.