Files
wehub-resource-sync d25d482dc2
CI / Migrate Dev DB (push) Has been skipped
CI / Detect Version (push) Has been cancelled
CI / Migrate DB (push) Has been cancelled
CI / Build Dev ECR (./docker/app.Dockerfile, ECR_APP) (push) Has been cancelled
CI / Build Dev ECR (./docker/db.Dockerfile, ECR_MIGRATIONS) (push) Has been cancelled
CI / Build Dev ECR (./docker/pii.Dockerfile, ECR_PII) (push) Has been cancelled
CI / Build Dev ECR (./docker/realtime.Dockerfile, ECR_REALTIME) (push) Has been cancelled
CI / Deploy Trigger.dev (Dev) (push) Has been cancelled
CI / Build AMD64 (./docker/app.Dockerfile, ECR_APP, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build AMD64 (./docker/db.Dockerfile, ECR_MIGRATIONS, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build AMD64 (./docker/pii.Dockerfile, ECR_PII, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build AMD64 (./docker/realtime.Dockerfile, ECR_REALTIME, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/app.Dockerfile, ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/db.Dockerfile, ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/pii.Dockerfile, ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Build ARM64 (GHCR Only) (./docker/realtime.Dockerfile, ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/migrations) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/pii) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/realtime) (push) Has been cancelled
CI / Create GHCR Manifests (ghcr.io/simstudioai/simstudio) (push) Has been cancelled
CI / Check Docs Changes (push) Has been cancelled
CI / Process Docs (push) Has been cancelled
CI / Create GitHub Release (push) Has been cancelled
CI / Test and Build (push) Has been cancelled
Publish CLI Package / publish-npm (push) Has been cancelled
Publish Python SDK / publish-pypi (push) Has been cancelled
Publish TypeScript SDK / publish-npm (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:20:55 +08:00

96 lines
3.4 KiB
TypeScript

import { CREDIT_TIERS } from '@/lib/billing/constants'
import { SITE_URL } from '@/lib/core/utils/urls'
import { JsonLd } from '@/app/(landing)/components/json-ld'
import { COMPARISON_SECTIONS } from '@/app/workspace/[workspaceId]/upgrade/components/comparison-table/comparison-data'
const PAGE_URL = `${SITE_URL}/pricing`
/** Feature list derived from the comparison data the cards render, so it can't drift. */
const FEATURE_LIST = Array.from(
new Set(COMPARISON_SECTIONS.flatMap((section) => section.rows.map((row) => row.label)))
)
const PRICING_JSON_LD = {
'@context': 'https://schema.org',
'@graph': [
{
'@type': 'WebPage',
'@id': `${PAGE_URL}#webpage`,
url: PAGE_URL,
name: 'Pricing | Sim, the AI Workspace',
description:
'Pricing for Sim, the open-source AI workspace where teams build, deploy, and manage AI agents. Compare the Free, Pro, Max, and Enterprise plans.',
isPartOf: { '@id': `${SITE_URL}#website` },
about: { '@id': `${PAGE_URL}#application` },
breadcrumb: { '@id': `${PAGE_URL}#breadcrumb` },
inLanguage: 'en-US',
},
{
'@type': 'BreadcrumbList',
'@id': `${PAGE_URL}#breadcrumb`,
itemListElement: [
{ '@type': 'ListItem', position: 1, name: 'Home', item: SITE_URL },
{ '@type': 'ListItem', position: 2, name: 'Pricing', item: PAGE_URL },
],
},
{
'@type': 'WebApplication',
'@id': `${PAGE_URL}#application`,
name: 'Sim',
description:
'Sim is the open-source AI workspace where teams build, deploy, and manage AI agents, connecting 1,000+ integrations and every major LLM.',
applicationCategory: 'BusinessApplication',
operatingSystem: 'Web',
url: SITE_URL,
featureList: FEATURE_LIST,
offers: [
{
'@type': 'Offer',
name: 'Free',
price: '0',
priceCurrency: 'USD',
description: 'Start building AI agents for free.',
},
{
'@type': 'Offer',
name: 'Pro',
price: String(CREDIT_TIERS[0].dollars),
priceCurrency: 'USD',
description: 'For growing teams. Billed per user/month.',
},
{
'@type': 'Offer',
name: 'Max',
price: String(CREDIT_TIERS[1].dollars),
priceCurrency: 'USD',
description: 'For scaling businesses. Billed per user/month.',
},
{
'@type': 'Offer',
name: 'Enterprise',
priceCurrency: 'USD',
description: 'Custom limits and infrastructure for large organizations.',
},
],
},
],
}
/**
* JSON-LD for the public pricing page - a `WebPage` (about a `WebApplication`),
* a `BreadcrumbList`, and the `WebApplication` (Sim) carrying one `Offer` per
* plan tier. Rendered server-side before any visible content so crawlers and AI
* answer engines read the structured pricing first. Mirrors the platform/
* solutions structured-data shape so the landing family stays consistent.
*
* Everything is derived from the same shared sources that drive the visible cards
* - Pro/Max monthly prices from {@link CREDIT_TIERS} and the `featureList` from
* the shared `COMPARISON_SECTIONS` - so the structured data can never drift from
* the page. Free is `$0`; Enterprise is custom and intentionally ships no price.
*
* Server Component; no client cost.
*/
export function PricingStructuredData() {
return <JsonLd data={PRICING_JSON_LD} />
}