Portfolio / What to Watch

Hybrid recommender

What to Watch

Choose your media mode, rate titles, get explainable recommendations, and save to your watchlist.

Experience in 60 seconds

  • Single-tile rater: swipe-first on mobile (TikTok style) and lightning-fast keyboard shortcuts on desktop.
  • Media mode switch filters ingestion, watchlists, and stats across movies, TV, or both.
  • Hybrid engine blends pgvector search, MovieLens CF, and a mini knowledge graph with explainable chips.
Role Full-stack + data infra
Pilot result Unlock recs after 10 ratings
Ideal for Film & TV discovery teams

How it works

Three beats keep the hybrid recommendation loop fast and explainable.

1. Ingest & enrich

Async FastAPI CLI pulls TMDB popular lists (`--media-type movie|tv`), builds multi-facet embeddings, and stores provider data plus graph edges in Postgres/pgvector.

2. Blend signals

MovieLens CF, FAISS similarity, and graph walks feed a weighted blender with per-source confidence gates, MMR diversity, and content-type filters.

3. Explain & act

Next.js renders rationale chips, watch provider callouts, media badges, and keyboard actions that keep stats, watchlists, and rec queues in sync with the selected mode.

Why it matters

Media teams can reason about catalogue coverage while fans enjoy approachable UX.

Users & curators

  • Media-mode switch personalises the catalogue without splitting sessions.
  • Movie/TV badges, watchlist filters, and stats mirror every mode change.

Data & ML teams

  • Shared ingestion + schema reduce duplication between film and series.
  • Logs capture blend weights, candidate counts, and diversity penalties per request.

Product & leadership

  • Hero onboarding showcases speed-to-value and the "Change Mode" safety net.
  • Watch providers, CF sliders, and rationale chips make the tech legible.

Want to dig deeper?

Kick the tires or read through the operational notes.

Try the flow

Spin up the sample workspace, rate a few films, and flip into TV mode to see the blended queue adjust.

Launch demo

Architecture deep dive

Notes, diagrams, and roadmap highlights for fellow builders.

Inside the workflow
  • Unified schema stores `content_type`, watch provider availability, embeddings (plot/keywords/cast/context/title), and knowledge graph edges.
  • Recommendation service filters ratings by media mode before building CF anchors or vector profiles.
  • MMR rerank plus fallback seeds guarantee coverage even when CF is suppressed for TV-only sessions.
Experience specifics
  • Media-mode landing step with persistent local storage and a dedicated “Change Mode” tab.
  • Collaborative filtering slider auto-disables for TV mode while remaining sliders stay live.
  • Watchlist, stats, and progress bars all reflect the active content filter.
Stack & tooling

Backend

  • FastAPI, SQLAlchemy, and Alembic manage APIs, ingestion, and migrations.
  • FAISS + pgvector deliver sub-200ms similarity search over shared embeddings.

Frontend

  • Next.js App Router, dynamic imports, and Suspense keep the workspace responsive.
  • Tailwind + handcrafted components for the single-tile rating flow, watchlist, and stats panels.

DevOps

  • Docker Compose orchestrates API, UI, Postgres/pgvector, and Redis caches.
  • CLI commands fetch TMDB movies/series, encode embeddings, and rebuild FAISS indexes.
Architecture map
What to Watch system architecture Flow from the user’s media-mode selection through the Next.js UI into FastAPI services, ingestion workers, and the recommendation stack. User Next.js UIMedia modes + workspace FastAPIIngestion + recs TMDB APIMovies + TV MovieLens dataCF similarity Postgres + pgvectorMetadata & embeddings FAISS indicesPlot/keywords/cast Redis cacheSession & skips MonitoringLogs & rec stats
FastAPI coordinates ingestion, blending, and logs while the Next.js UI streams rating, recommendation, and watchlist updates.
Delivery notes & roadmap
  • CLI parity for `--media-type movie|tv` keeps ingestion, embeddings, and FAISS indexes aligned.
  • Log records capture media mode, blend weights, and diversity penalties for every recommendation run.
  • Next steps: add voice input to the single-tile rater and expose public API keys for partner integrations.

Want to ship something similar?

Let’s talk hybrid recommenders, explainable UX, and ingestion pipelines that won’t crumble when you add the next media vertical.