feat: group movie recommendation engine ("Movie Checker") #17

Open
opened 2026-07-10 20:16:01 +00:00 by GKaszewski · 0 comments
Owner

When a group of friends wants to watch a movie together but can't decide, the app should suggest the most compatible movies for that specific group based on their viewing history and taste profiles.

Concept

Given N users, find movies that maximize group satisfaction — optimize for minimum unhappiness (nobody hates the pick) rather than maximum average rating.

Approach: Hybrid (local catalog + TMDb discovery)

1. Taste profile per user

Build a preference vector from each user's review history:

  • Genre weights (derived from ratings — a 5★ Action movie contributes more than a 2★ one)
  • Director/actor affinity scores
  • Rating distribution tendencies (some users rate high, some low — normalize)
  • Preferred decades, languages, runtime ranges
  • Watch medium preferences (optional signal)

2. Group scoring

For a set of users, score candidate movies by:

  • Predicted rating per user (collaborative filtering or content-based)
  • Minimize variance across the group (fairness constraint)
  • Exclude movies anyone in the group has already watched
  • Bonus for movies in genres where the group overlaps

3. Candidate sources (hybrid)

Tier 1 — Local catalog (fast, high confidence):

  • Movies in the DB that none of the group members have watched
  • Scored using real ratings from other users on the instance
  • Presented as "From your community"

Tier 2 — TMDb discovery (broader, predicted ratings only):

  • Query TMDb Discover API with filters derived from group taste overlap (shared top genres, preferred decades, favorite directors/actors)
  • Score results against each user's preference vector
  • Movies don't need to exist in the DB — pull metadata on-demand
  • Presented as "You might all enjoy"

Implementation considerations

  • New domain model: GroupSession (temporary, contains user IDs + generated recommendations)
  • New port: RecommendationEngine with recommend_for_group(user_ids) -> Vec<Recommendation>
  • TMDb Discover API integration (already have TMDb client infra in tmdb-enrichment adapter)
  • API: POST /api/v1/recommendations/group with { user_ids: [uuid] }
  • SPA: "Group Pick" flow — select friends from followers, get ranked suggestions with match percentage
  • Could run as a background computation for larger groups
  • Consider caching taste profiles and invalidating on new reviews

Open questions

  • Algorithm choice: collaborative filtering vs content-based vs hybrid scoring
  • How to handle users with very few reviews (cold start within the group)
  • Should group sessions persist or be ephemeral?
  • Integration with watchlists (prioritize movies on someone's watchlist?)
When a group of friends wants to watch a movie together but can't decide, the app should suggest the most compatible movies for that specific group based on their viewing history and taste profiles. ## Concept Given N users, find movies that maximize group satisfaction — optimize for minimum unhappiness (nobody hates the pick) rather than maximum average rating. ## Approach: Hybrid (local catalog + TMDb discovery) ### 1. Taste profile per user Build a preference vector from each user's review history: - Genre weights (derived from ratings — a 5★ Action movie contributes more than a 2★ one) - Director/actor affinity scores - Rating distribution tendencies (some users rate high, some low — normalize) - Preferred decades, languages, runtime ranges - Watch medium preferences (optional signal) ### 2. Group scoring For a set of users, score candidate movies by: - Predicted rating per user (collaborative filtering or content-based) - Minimize variance across the group (fairness constraint) - Exclude movies anyone in the group has already watched - Bonus for movies in genres where the group overlaps ### 3. Candidate sources (hybrid) **Tier 1 — Local catalog** (fast, high confidence): - Movies in the DB that none of the group members have watched - Scored using real ratings from other users on the instance - Presented as "From your community" **Tier 2 — TMDb discovery** (broader, predicted ratings only): - Query TMDb Discover API with filters derived from group taste overlap (shared top genres, preferred decades, favorite directors/actors) - Score results against each user's preference vector - Movies don't need to exist in the DB — pull metadata on-demand - Presented as "You might all enjoy" ## Implementation considerations - New domain model: `GroupSession` (temporary, contains user IDs + generated recommendations) - New port: `RecommendationEngine` with `recommend_for_group(user_ids) -> Vec<Recommendation>` - TMDb Discover API integration (already have TMDb client infra in `tmdb-enrichment` adapter) - API: `POST /api/v1/recommendations/group` with `{ user_ids: [uuid] }` - SPA: "Group Pick" flow — select friends from followers, get ranked suggestions with match percentage - Could run as a background computation for larger groups - Consider caching taste profiles and invalidating on new reviews ## Open questions - Algorithm choice: collaborative filtering vs content-based vs hybrid scoring - How to handle users with very few reviews (cold start within the group) - Should group sessions persist or be ephemeral? - Integration with watchlists (prioritize movies on someone's watchlist?)
GKaszewski added the backendbigfeature labels 2026-07-10 20:17:43 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: GKaszewski/movies-diary#17