From dfefc26aeae1e24840970426ad08adbc5f675330 Mon Sep 17 00:00:00 2001 From: lemma <> Date: Wed, 10 Jun 2026 00:46:18 -0500 Subject: [PATCH] Show author handle on publication cards. Store resolvedHandle on publication DynamoDB records (indexer, backfill, API createPublication) and return it from listPublications and listSuggestions --- app/components/PublicationCard.tsx | 6 ++++-- app/lib/api-client.ts | 4 +++- app/routes/suggestions.tsx | 4 ++-- infra/api/src/index.ts | 8 ++++++-- infra/backfill/src/index.ts | 7 +++++-- infra/indexer/src/index.ts | 2 ++ 6 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/components/PublicationCard.tsx b/app/components/PublicationCard.tsx index 66c7951..47c2338 100644 --- a/app/components/PublicationCard.tsx +++ b/app/components/PublicationCard.tsx @@ -3,7 +3,7 @@ import { Link } from 'react-router' import { RssIcon } from '@heroicons/react/24/outline' interface Props { - pub: { atUri: string; name: string; url: string; description?: string } + pub: { atUri: string; name: string; url: string; description?: string; authorHandle?: string } action?: React.ReactNode } @@ -28,7 +28,9 @@ export default function PublicationCard({ pub, action }: Props) { ) : ( {pub.name} )} -

{new URL(pub.url).host}

+

+ {new URL(pub.url).host}{pub.authorHandle && ` ยท @${pub.authorHandle}`} +

{pub.description && (

{pub.description}

)} diff --git a/app/lib/api-client.ts b/app/lib/api-client.ts index 8572326..22c544e 100644 --- a/app/lib/api-client.ts +++ b/app/lib/api-client.ts @@ -28,6 +28,7 @@ export type Publication = { url: string name: string description?: string + authorHandle?: string preferences: { showInDiscover: boolean } } @@ -102,6 +103,7 @@ export type SuggestionItem = { pubName: string pubUrl: string pubDescription?: string + authorHandle?: string } export type TimelineItem = { @@ -1386,7 +1388,7 @@ export async function listSuggestions(session: OAuthSession): Promise, + pubs: Array<{ pubAtUri: string; rkey: string; authorDid: string; pubName: string; pubUrl: string; pubDescription?: string; authorHandle?: string }>, ): Promise<{ added: number }> { const pdsUrl = await resolvePdsUrl(session.sub) const token = await getServiceToken(session, pdsUrl) diff --git a/app/routes/suggestions.tsx b/app/routes/suggestions.tsx index 0ae71a0..d6859a1 100644 --- a/app/routes/suggestions.tsx +++ b/app/routes/suggestions.tsx @@ -104,7 +104,7 @@ export default function Suggestions() { const authorDid = pub.atUri.slice('at://'.length).split('/')[0] if (!rkey || authorDid === session.sub) continue if (subscriptions?.some((s) => s.publicationAtUri === pub.atUri)) continue - candidates.push({ pubAtUri: pub.atUri, rkey, authorDid, pubName: pub.name, pubUrl: pub.url, pubDescription: pub.description }) + candidates.push({ pubAtUri: pub.atUri, rkey, authorDid, pubName: pub.name, pubUrl: pub.url, pubDescription: pub.description, authorHandle: pub.authorHandle }) } } } @@ -233,7 +233,7 @@ export default function Suggestions() { return (