From 2c7ef8f9006718f30cce4d5f4f9fea28f91bb310 Mon Sep 17 00:00:00 2001 From: Raymond Jacobson Date: Tue, 23 Dec 2025 16:52:35 -0800 Subject: [PATCH] Implement general admission tags/routes in web SSR --- .../trending-challenge-rewards/src/main.ts | 2 +- .../web/src/components/meta-tags/MetaTags.tsx | 87 +++++- packages/web/src/ssr/audio/+Page.tsx | 5 + .../web/src/ssr/audio/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/audio/+onRenderHtml.tsx | 40 +++ packages/web/src/ssr/audio/+route.ts | 4 + packages/web/src/ssr/cash/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/cash/+onRenderHtml.tsx | 2 +- .../web/src/ssr/coins/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/coins/+onRenderHtml.tsx | 2 +- .../web/src/ssr/collection/+onRenderHtml.tsx | 19 +- packages/web/src/ssr/dashboard/+Page.tsx | 5 + .../web/src/ssr/dashboard/+onRenderClient.tsx | 28 ++ .../web/src/ssr/dashboard/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/dashboard/+route.ts | 4 + packages/web/src/ssr/download/+Page.tsx | 5 + .../web/src/ssr/download/+onRenderClient.tsx | 28 ++ .../web/src/ssr/download/+onRenderHtml.tsx | 40 +++ packages/web/src/ssr/download/+route.ts | 4 + packages/web/src/ssr/explore/+Page.tsx | 5 + .../web/src/ssr/explore/+onRenderClient.tsx | 28 ++ .../web/src/ssr/explore/+onRenderHtml.tsx | 56 ++++ packages/web/src/ssr/explore/+route.ts | 7 + packages/web/src/ssr/feed/+Page.tsx | 5 + packages/web/src/ssr/feed/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/feed/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/feed/+route.ts | 4 + packages/web/src/ssr/history/+Page.tsx | 5 + .../web/src/ssr/history/+onRenderClient.tsx | 28 ++ .../web/src/ssr/history/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/history/+route.ts | 4 + .../web/src/ssr/index/+onRenderClient.tsx | 2 +- packages/web/src/ssr/index/+onRenderHtml.tsx | 2 +- packages/web/src/ssr/library/+Page.tsx | 5 + .../web/src/ssr/library/+onRenderClient.tsx | 28 ++ .../web/src/ssr/library/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/library/+route.ts | 4 + packages/web/src/ssr/messages/+Page.tsx | 5 + .../web/src/ssr/messages/+onRenderClient.tsx | 28 ++ .../web/src/ssr/messages/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/messages/+route.ts | 4 + packages/web/src/ssr/metaTags.ts | 266 ++++++++++++++++++ packages/web/src/ssr/notifications/+Page.tsx | 5 + .../src/ssr/notifications/+onRenderClient.tsx | 28 ++ .../src/ssr/notifications/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/notifications/+route.ts | 4 + .../web/src/ssr/profile/+onRenderHtml.tsx | 7 +- packages/web/src/ssr/remixes/+Page.tsx | 5 + .../web/src/ssr/remixes/+onBeforeRender.tsx | 59 ++++ .../web/src/ssr/remixes/+onRenderHtml.tsx | 63 +++++ packages/web/src/ssr/remixes/+route.ts | 4 + packages/web/src/ssr/rewards/+Page.tsx | 5 + .../web/src/ssr/rewards/+onRenderClient.tsx | 27 ++ .../web/src/ssr/rewards/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/rewards/+route.ts | 4 + packages/web/src/ssr/search/+Page.tsx | 5 + .../web/src/ssr/search/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/search/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/search/+route.ts | 7 + packages/web/src/ssr/settings/+Page.tsx | 5 + .../web/src/ssr/settings/+onRenderClient.tsx | 28 ++ .../web/src/ssr/settings/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/settings/+route.ts | 4 + packages/web/src/ssr/signup/+Page.tsx | 5 + .../web/src/ssr/signup/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/signup/+onRenderHtml.tsx | 55 ++++ packages/web/src/ssr/signup/+route.ts | 4 + .../web/src/ssr/track/+onBeforeRender.tsx | 48 +++- packages/web/src/ssr/track/+onRenderHtml.tsx | 66 ++++- packages/web/src/ssr/trending/+Page.tsx | 5 + .../web/src/ssr/trending/+onRenderClient.tsx | 28 ++ .../web/src/ssr/trending/+onRenderHtml.tsx | 41 +++ packages/web/src/ssr/trending/+route.ts | 4 + packages/web/src/ssr/upload/+Page.tsx | 5 + .../web/src/ssr/upload/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/upload/+onRenderHtml.tsx | 40 +++ packages/web/src/ssr/upload/+route.ts | 4 + packages/web/src/ssr/util.ts | 73 ++--- .../web/src/ssr/wallet/+onRenderClient.tsx | 28 ++ packages/web/src/ssr/wallet/+onRenderHtml.tsx | 2 +- 80 files changed, 1937 insertions(+), 57 deletions(-) create mode 100644 packages/web/src/ssr/audio/+Page.tsx create mode 100644 packages/web/src/ssr/audio/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/audio/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/audio/+route.ts create mode 100644 packages/web/src/ssr/cash/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/coins/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/dashboard/+Page.tsx create mode 100644 packages/web/src/ssr/dashboard/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/dashboard/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/dashboard/+route.ts create mode 100644 packages/web/src/ssr/download/+Page.tsx create mode 100644 packages/web/src/ssr/download/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/download/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/download/+route.ts create mode 100644 packages/web/src/ssr/explore/+Page.tsx create mode 100644 packages/web/src/ssr/explore/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/explore/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/explore/+route.ts create mode 100644 packages/web/src/ssr/feed/+Page.tsx create mode 100644 packages/web/src/ssr/feed/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/feed/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/feed/+route.ts create mode 100644 packages/web/src/ssr/history/+Page.tsx create mode 100644 packages/web/src/ssr/history/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/history/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/history/+route.ts create mode 100644 packages/web/src/ssr/library/+Page.tsx create mode 100644 packages/web/src/ssr/library/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/library/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/library/+route.ts create mode 100644 packages/web/src/ssr/messages/+Page.tsx create mode 100644 packages/web/src/ssr/messages/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/messages/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/messages/+route.ts create mode 100644 packages/web/src/ssr/metaTags.ts create mode 100644 packages/web/src/ssr/notifications/+Page.tsx create mode 100644 packages/web/src/ssr/notifications/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/notifications/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/notifications/+route.ts create mode 100644 packages/web/src/ssr/remixes/+Page.tsx create mode 100644 packages/web/src/ssr/remixes/+onBeforeRender.tsx create mode 100644 packages/web/src/ssr/remixes/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/remixes/+route.ts create mode 100644 packages/web/src/ssr/rewards/+Page.tsx create mode 100644 packages/web/src/ssr/rewards/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/rewards/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/rewards/+route.ts create mode 100644 packages/web/src/ssr/search/+Page.tsx create mode 100644 packages/web/src/ssr/search/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/search/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/search/+route.ts create mode 100644 packages/web/src/ssr/settings/+Page.tsx create mode 100644 packages/web/src/ssr/settings/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/settings/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/settings/+route.ts create mode 100644 packages/web/src/ssr/signup/+Page.tsx create mode 100644 packages/web/src/ssr/signup/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/signup/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/signup/+route.ts create mode 100644 packages/web/src/ssr/trending/+Page.tsx create mode 100644 packages/web/src/ssr/trending/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/trending/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/trending/+route.ts create mode 100644 packages/web/src/ssr/upload/+Page.tsx create mode 100644 packages/web/src/ssr/upload/+onRenderClient.tsx create mode 100644 packages/web/src/ssr/upload/+onRenderHtml.tsx create mode 100644 packages/web/src/ssr/upload/+route.ts create mode 100644 packages/web/src/ssr/wallet/+onRenderClient.tsx diff --git a/packages/discovery-provider/plugins/pedalboard/apps/trending-challenge-rewards/src/main.ts b/packages/discovery-provider/plugins/pedalboard/apps/trending-challenge-rewards/src/main.ts index bdd1f3f0083..c29667e3369 100644 --- a/packages/discovery-provider/plugins/pedalboard/apps/trending-challenge-rewards/src/main.ts +++ b/packages/discovery-provider/plugins/pedalboard/apps/trending-challenge-rewards/src/main.ts @@ -10,7 +10,7 @@ const onDemandRun = async (app: App) => { const { runNow } = app.viewAppData() if (runNow) { // Uncomment to also announce to slack - // await announceTopFiveTrending(app) + await announceTopFiveTrending(app) await disburseTrendingRewards(app) } } diff --git a/packages/web/src/components/meta-tags/MetaTags.tsx b/packages/web/src/components/meta-tags/MetaTags.tsx index f9404845451..b59e115cb57 100644 --- a/packages/web/src/components/meta-tags/MetaTags.tsx +++ b/packages/web/src/components/meta-tags/MetaTags.tsx @@ -30,6 +30,27 @@ export type MetaTagsProps = { * Hash ID for OG URL generation (id field from entities) */ hashId?: string + /** + * Whether to show embed player (for Twitter/Discord) + */ + embed?: boolean + /** + * URL to the embed player (e.g. /embed/track/xyz?flavor=card&twitter=true) + */ + embedUrl?: string + /** + * Deep link URL for mobile apps (e.g. audius://track/xyz) + */ + appUrl?: string + /** + * Web URL for the current page (e.g. https://audius.co/track/xyz) + */ + webUrl?: string + /** + * Whether the image shows as a small thumbnail version. + * Controls twitter:card type (summary vs summary_large_image) + */ + thumbnail?: boolean } /** @@ -70,7 +91,12 @@ export const MetaTags = (props: MetaTagsProps) => { structuredData, noIndex = false, entityType, - hashId + hashId, + embed = false, + embedUrl, + appUrl, + webUrl, + thumbnail = true } = props const formattedTitle = title @@ -80,6 +106,13 @@ export const MetaTags = (props: MetaTagsProps) => { // Generate OG URL if entity type and hash ID are provided const ogUrl = generateOgUrl(entityType, hashId) + // Determine twitter card type based on thumbnail and embed settings + const getTwitterCardType = () => { + if (thumbnail) return 'summary' + if (embed && embedUrl) return 'player' + return 'summary_large_image' + } + return ( <> {/* noIndex */} @@ -127,6 +160,14 @@ export const MetaTags = (props: MetaTagsProps) => { ) : null} + {/* Image dimensions for non-thumbnail images */} + {image && !thumbnail ? ( + + + + + ) : null} + {imageAlt ? ( @@ -134,11 +175,53 @@ export const MetaTags = (props: MetaTagsProps) => { ) : null} + {/* OG Type and Twitter Card */} - + + {/* Twitter Player (for embeds) */} + {embed && embedUrl ? ( + + + + + + ) : null} + + {/* Twitter App Links */} + {appUrl ? ( + + + + + + + + + + + + ) : null} + + {/* Farcaster Frame */} + {webUrl ? ( + + + + + + + + ) : null} + + {webUrl && image ? ( + + + + ) : null} + {structuredData ? (