Skip to content

Feat: Music Compatibility Scores #2

@kellenGary

Description

@kellenGary

Summary

Implement music compatibility scores that show how similar two users' music tastes are when viewing a profile.

Background

  • When viewing another user's profile, there should be a section showing a compatibility/similarity score with the current user.
  • The score can be derived from overlapping listening history, shared song streaks, liked albums in common, followed artists in common, and genre overlap.
  • This is a core social feature that encourages discovery and connection between users.

Scope

Backend (C# API)

  • Design and implement a compatibility scoring algorithm that considers:
    • Overlapping listening history (shared tracks)
    • Shared song streaks
    • Liked albums in common
    • Followed artists in common
    • Genre overlap from top artists
  • Create an API endpoint: GET /users/{userId}/compatibility that returns the score and a breakdown of contributing factors.
  • Optimize the query for performance — this needs to be fast enough for profile page loads.

Frontend (React Native)

  • Add a "Music Compatibility" section to the user profile page.
  • Display the overall score (e.g., percentage or visual meter).
  • Show a breakdown of what contributes to the score (e.g., "12 artists in common," "8 shared tracks").
  • Design the component to be visually engaging and consistent with the app's design system.

Definition of Done

  • Algorithm implemented: A scoring algorithm exists that computes compatibility based on overlapping listening history, streaks, liked albums, followed artists, and genres.
  • API endpoint created: GET /users/{userId}/compatibility returns a score and factor breakdown for the authenticated user vs. the target user.
  • Profile UI added: The user profile page shows a "Music Compatibility" section with the score.
  • Breakdown displayed: The UI shows contributing factors (e.g., "X artists in common," "Y shared tracks").
  • Performance acceptable: The compatibility score loads within a reasonable time (< 2 seconds) on a profile page.
  • Score range defined: The score uses a clear, understandable scale (e.g., 0–100%).
  • Edge cases handled: If there is insufficient data to compute a score (new user, no overlap), an appropriate message is shown instead of 0% or a broken state.
  • Self-profile: The compatibility section is hidden or shows a special state on the user's own profile.
  • Build passes: Both the C# API and the frontend compile without errors.
  • Verified with test data: Tested with users who have overlapping and non-overlapping listening data to confirm the score behaves correctly.

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions