+ The same models served through cloud platforms and inference hosts, each with
+ its own pricing and model IDs.
+
+
+
+
+
+ >
+ )}
+
provider.models.length > 0 && !provider.isReseller
)
+/** Cloud platforms and inference hosts that serve other providers' models, each with its own page. */
+export const MODEL_RESELLER_PROVIDERS = MODEL_PROVIDERS_WITH_MODELS.filter(
+ (provider) => provider.isReseller
+)
export const MODEL_PROVIDERS_WITH_DYNAMIC_CATALOGS = MODEL_CATALOG_PROVIDERS.filter(
(provider) => provider.models.length === 0
)
diff --git a/apps/sim/lib/landing/seo.ts b/apps/sim/lib/landing/seo.ts
index be3aa0a1490..f2ca22c447a 100644
--- a/apps/sim/lib/landing/seo.ts
+++ b/apps/sim/lib/landing/seo.ts
@@ -23,6 +23,12 @@ interface LandingMetadataInput {
twitterImageAlt?: string
/** RSS feed path advertised through ``, e.g. "/changelog.xml". */
feedPath?: string
+ /**
+ * The route renders its own card from a sibling `opengraph-image`. The shared
+ * image is then left out, because an explicit `images` entry would replace the
+ * route's card on X and Slack, where `twitter:image` falls back to it.
+ */
+ routeImage?: boolean
}
/**
@@ -31,9 +37,10 @@ interface LandingMetadataInput {
* landing family, so per-page files declare only what actually varies (title,
* description, keywords, path, and any non-default image alt).
*
- * Note: dynamic and image-bearing routes that resolve their card from a sibling
- * `opengraph-image` (integrations, models) and the blog family (`buildPostMetadata`
- * in `lib/blog/seo`) intentionally do not use this helper.
+ * Note: the integration and model routes, which resolve their card from a sibling
+ * `opengraph-image`, and the blog family (`buildPostMetadata` in `lib/blog/seo`)
+ * intentionally do not use this helper. A route that otherwise fits it but has its
+ * own card passes `routeImage`.
*/
export function buildLandingMetadata({
title,
@@ -43,6 +50,7 @@ export function buildLandingMetadata({
imageAlt,
twitterImageAlt,
feedPath,
+ routeImage = false,
}: LandingMetadataInput): Metadata {
const url = `${SITE_URL}${path}`
const ogAlt = imageAlt ?? title
@@ -63,12 +71,7 @@ export function buildLandingMetadata({
url,
siteName: 'Sim',
locale: 'en_US',
- images: [
- {
- ...LANDING_SOCIAL_IMAGE,
- alt: ogAlt,
- },
- ],
+ ...(routeImage ? {} : { images: [{ ...LANDING_SOCIAL_IMAGE, alt: ogAlt }] }),
},
twitter: {
card: 'summary_large_image',
@@ -76,7 +79,7 @@ export function buildLandingMetadata({
creator: '@simdotai',
title,
description,
- images: { url: LANDING_SOCIAL_IMAGE.url, alt: twitterAlt },
+ ...(routeImage ? {} : { images: { url: LANDING_SOCIAL_IMAGE.url, alt: twitterAlt } }),
},
alternates: {
canonical: url,