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
96 lines
3.4 KiB
TypeScript
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} />
|
|
}
|