From 3903d32b1282bb1f94576be9cac197d8a0027396 Mon Sep 17 00:00:00 2001 From: Gnanaguru Sattanathan <32893938+avoguru@users.noreply.github.com> Date: Thu, 6 Aug 2026 10:43:32 -0700 Subject: [PATCH] fix(integrations): derive "coming soon" from whether a page exists The index took `isComingSoon` from the design-system catalog, a hand-maintained constant in a published package. It goes stale the moment a toolkit ships, so a live toolkit keeps rendering as an unavailable card. Snowflake is in that state now: its docs generated and merged in #1114, but the tile still reads "Coming soon". Resolve the flag in `resolveIndexToolkits` from `hasPage` instead. The badge means "there is nothing to read yet", which is exactly what `hasPage` already answers, and the value no longer depends on a package release. This also makes the badge and the sort order agree. `use-toolkit-filters` sorted on the raw design-system flag while the card rendered on `isComingSoon || !hasPage`, so seven toolkits (CloseIO, Discord, GoogleForms, Notion, Obsidian, Twilio, Twitch) showed a "Coming soon" badge while sorting among the available ones. They now sort with the other unavailable toolkits. Co-Authored-By: Claude Opus 5 --- app/_lib/integration-index.ts | 10 +++++++++- .../integrations/components/toolkits-client.tsx | 10 ++++------ 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/app/_lib/integration-index.ts b/app/_lib/integration-index.ts index 036d7f3d9..cee33913d 100644 --- a/app/_lib/integration-index.ts +++ b/app/_lib/integration-index.ts @@ -66,7 +66,15 @@ export function resolveIndexToolkits( } seen.add(link); } - resolved.push({ ...toolkit, hasPage }); + + // "Coming soon" means there is nothing to read yet, so derive it from + // whether a page exists rather than trusting the design-system flag. That + // flag is a hand-maintained constant in a published package, so it goes + // stale the moment a toolkit ships and keeps a live toolkit looking + // unavailable. Deriving it here also keeps the badge and the sort order + // (`use-toolkit-filters`) reading the same value, which they previously + // did not. + resolved.push({ ...toolkit, hasPage, isComingSoon: !hasPage }); } return resolved; diff --git a/app/en/resources/integrations/components/toolkits-client.tsx b/app/en/resources/integrations/components/toolkits-client.tsx index 5f5b8e756..44f98a288 100644 --- a/app/en/resources/integrations/components/toolkits-client.tsx +++ b/app/en/resources/integrations/components/toolkits-client.tsx @@ -182,12 +182,10 @@ export default function ToolkitsClient({ toolkits }: ToolkitsClientProps) { icon={IconComponent} iconUrl={iconUrl} isByoc={toolkit.isBYOC} - // Doc-less toolkits have no page; render them as - // non-clickable (coming-soon) cards instead of links to - // a 404. - isComingSoon={ - toolkit.isComingSoon || toolkit.hasPage === false - } + // Resolved in `resolveIndexToolkits` from whether a page + // exists, so doc-less toolkits still render as + // non-clickable cards instead of links to a 404. + isComingSoon={toolkit.isComingSoon} isPartner={toolkit.isPartner} isPro={toolkit.isPro} key={toolkit.id}