Skip to content

feat: in-app media recommendations (#33)#37

Merged
miicolas merged 2 commits into
feat/person-detailfrom
feat/media-recommendations
Jun 15, 2026
Merged

feat: in-app media recommendations (#33)#37
miicolas merged 2 commits into
feat/person-detailfrom
feat/media-recommendations

Conversation

@miicolas

Copy link
Copy Markdown
Owner

Closes #33. Part of epic #34.

Stacked on #36 (#32), which is stacked on #35 (#31). Base is feat/person-detail; merge #35#36 → this in order (GitHub retargets each as its base merges).

What

From a media detail page you can recommend a movie/show to people you follow, with an optional message. Recipients get a push, find it in a dedicated Received inbox (bell + badge in the profile header), and tap through to the title.

Changes

  • DB: new media_recommendations table — sender/recipient, media snapshot (title, poster), message, read_at, indexed by (recipient, read_at, created_at). Migration 0015_giant_wong.sql.
  • API (/media-recommendations, new module modeled on watch-sessions):
    • POST / — fan-out one row per recipient + a push each. Recipients are filtered to people the sender follows (one-directional, server-enforced).
    • GET /received, POST /:id/read, GET /unread-count, GET /recommendable-friends.
  • Push: new media-recommendation.received type; pushDeepLinkPath routes it to the inbox.
  • Mobile: service handlers + mediaRecommendationKeys + send/received/unread hooks; send sheet (multi-select friends reusing the watch-invite UI + optional message) opened from a media-detail header button; Received inbox that marks entries read on view and opens the title; profile header bell + badge.
  • i18n: recommend.* (EN/FR). What's New: "Recommend to Friends".

⚠️ Migration

Run bun run db:migrate against the target DB to create media_recommendations (not run here — no DB in the working environment).

Naming

Deliberately media-recommendations everywhere to avoid colliding with the existing TMDB-feed recommendations module.

Verification

  • bun run typecheck, bun run lint, bun run format:check pass.
  • Manual (two accounts, device for push): send to several followed users with a message → rows created; recipient gets push → taps to Received inbox → sees sender/title/message, badge clears on view, tapping opens the title.

🤖 Generated with Claude Code

miicolas and others added 2 commits June 15, 2026 10:48
Recommend a movie or show to people you follow, with an optional note.
Recipients get a push, find it in a dedicated "Received" inbox (with a
bell + badge in the profile header), and tap through to the title.

- db: new media_recommendations table (sender, recipient, media snapshot,
  message, readAt) + migration 0015
- api: new /media-recommendations module (send fan-out + per-recipient
  push, received inbox, mark-read, unread-count, recommendable-friends =
  people you follow, one-directional)
- push: media-recommendation.received type + deep-link to the inbox
- mobile: service handlers, query-key factory, send/received/unread hooks
- mobile: send sheet (multi-select friends + optional message) opened from
  a media-detail header button; "Received" inbox marks entries read on
  view and opens the title; profile header bell + badge
- i18n: recommend.* (EN/FR)
- whats-new: "Recommend to Friends" release

Run `bun run db:migrate` to apply the new table.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@miicolas miicolas merged commit 97af673 into feat/person-detail Jun 15, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant