Emoji reactions on songs
CI / check (push) Canceled after 0s

React to a friend's current song or any of their recent plays: tap an
emoji to add yours (or take it back), "☺+" for the quick six, and a full
picker with search and categories (Unicode emoji up to 13.1, generated
into the shared package so web and mobile match). One reaction per person
per play; a new one replaces the old. Chips show counts and, on hover/
long label, who reacted; yours is highlighted. Listeners and followers get
the update live. Not on your own plays, not across a block (blocking also
clears reactions between the two people).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MzFywujuH9TiuXbr9vjoX8
This commit is contained in:
2026-10-06 13:39:26 -04:00
co-authored by Claude Opus 5.5
parent edc0c7b999
commit d2edad4b0d
28 changed files with 2200 additions and 30 deletions
+12
View File
@@ -35,6 +35,13 @@ export interface MeDTO extends UserSummaryDTO {
entitlements: Entitlements;
}
/** One emoji on a play, and who left it (newest first). */
export interface ReactionDTO {
emoji: string;
count: number;
users: UserSummaryDTO[];
}
export interface NowPlayingDTO {
user: UserSummaryDTO;
track: TrackDTO;
@@ -46,6 +53,9 @@ export interface NowPlayingDTO {
sourceUrl: string | null;
progressMs: number | null;
updatedAt: string;
/** The play this is, for reactions (null for very old rows). */
listenId: string | null;
reactions: ReactionDTO[];
}
/** A feed entry. pinnedAt is set when the viewer pinned this friend. */
@@ -71,9 +81,11 @@ export interface FeaturedSongDTO {
}
export interface RecentPlayDTO {
listenId: string;
track: TrackDTO;
source: NowPlayingProvider;
playedAt: string;
reactions: ReactionDTO[];
}
export interface ProfileDTO {