From 7c83e420015fc192aed7680f705359f554e05306 Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Sun, 15 Mar 2026 02:39:19 -0500 Subject: [PATCH] De-emphasize author on list/follow-pack cards in feeds and embeds For kind 30000 (lists) and 39089 (starter packs), replace the prominent avatar + bold name header with a content-first layout: the list title, description, and member avatars are shown as the hero, followed by a subtle small author attribution line (tiny avatar, muted text, timestamp). This applies to both normal and threaded layouts, as well as compact/embed mode used in quote posts and inline embeds. --- src/components/NoteCard.tsx | 157 ++++++++++++++++++++++++++---------- 1 file changed, 115 insertions(+), 42 deletions(-) diff --git a/src/components/NoteCard.tsx b/src/components/NoteCard.tsx index 33b087e6..fb23f425 100644 --- a/src/components/NoteCard.tsx +++ b/src/components/NoteCard.tsx @@ -783,29 +783,39 @@ export function NoteCard({ onClick={handleCardClick} onAuxClick={handleAuxClick} > -
-
- {avatarElement} - {threaded && ( -
- )} -
-
- {authorInfo} + {isFollowPack ? ( +
{contentBlock} + {actionButtons} - - + +
-
+ ) : ( +
+
+ {avatarElement} + {threaded && ( +
+ )} +
+
+ {authorInfo} + {contentBlock} + {actionButtons} + + +
+
+ )} ); } @@ -857,29 +867,46 @@ export function NoteCard({ })() )} - {/* Header: avatar + name/handle stacked */} -
- {avatarElement} - {authorInfo} - {isColor && } -
- - {contentBlock} - - {/* Action buttons — hidden in compact/embed mode */} - {!compact && ( + {/* For follow packs / lists: content-first layout with subtle author attribution */} + {isFollowPack ? ( <> - {actionButtons} - - + {contentBlock} + + {!compact && ( + <> + {actionButtons} + + + + )} + + ) : ( + <> + {/* Header: avatar + name/handle stacked */} +
+ {avatarElement} + {authorInfo} + {isColor && } +
+ + {contentBlock} + + {/* Action buttons — hidden in compact/embed mode */} + {!compact && ( + <> + {actionButtons} + + + + )} )} @@ -1399,6 +1426,52 @@ function StreamContent({ event }: { event: NostrEvent }) { ); } +/** Subtle author attribution line for follow pack / list cards. */ +function FollowPackAuthorLine({ pubkey, createdAt }: { pubkey: string; createdAt: number }) { + const author = useAuthor(pubkey); + const metadata = author.data?.metadata; + const avatarShape = getAvatarShape(metadata); + const displayName = getDisplayName(metadata, pubkey); + const profileUrl = useProfileUrl(pubkey, metadata); + + return ( +
+ {author.isLoading ? ( + <> + + + + ) : ( + <> + + e.stopPropagation()}> + + + + {displayName[0]?.toUpperCase()} + + + + + + e.stopPropagation()} + > + {author.data?.event ? ( + {displayName} + ) : displayName} + + + · + {timeAgo(createdAt)} + + )} +
+ ); +} + interface EventActionHeaderProps { /** Pubkey of the person performing the action. */ pubkey: string;