From 847a75fde1150118638e12f99c609891b322b99e Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 14:50:44 -0700 Subject: [PATCH 1/8] fix(marketing): correct platform, CLI, and remote-workspace plan claims --- apps/marketing/src/app/components/FeaturesSection/constants.ts | 2 +- apps/marketing/src/app/pricing/constants.ts | 2 +- apps/marketing/src/components/JsonLd/JsonLd.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/marketing/src/app/components/FeaturesSection/constants.ts b/apps/marketing/src/app/components/FeaturesSection/constants.ts index 0027fd6ce73..5a4df472897 100644 --- a/apps/marketing/src/app/components/FeaturesSection/constants.ts +++ b/apps/marketing/src/app/components/FeaturesSection/constants.ts @@ -39,7 +39,7 @@ export const FEATURES: Feature[] = [ tag: "Remote Workspaces", title: "Run workspaces anywhere", description: - "Add any machine as a host, on every plan. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", + "Add any machine as a host. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", }, { tag: "CLI & SDK", diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index c1dfc59626c..8b400517f78 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -36,7 +36,7 @@ export const PRICING_TIERS: PricingTier[] = [ "Local workspaces", "Desktop app", "GitHub integration", - "CLI (coming soon)", + "CLI", ], cta: { label: "Download app", diff --git a/apps/marketing/src/components/JsonLd/JsonLd.tsx b/apps/marketing/src/components/JsonLd/JsonLd.tsx index f56b933ab19..f1598644e8c 100644 --- a/apps/marketing/src/components/JsonLd/JsonLd.tsx +++ b/apps/marketing/src/components/JsonLd/JsonLd.tsx @@ -69,7 +69,7 @@ export function SoftwareApplicationJsonLd() { "@context": "https://schema.org", "@type": "SoftwareApplication", name: COMPANY.NAME, - operatingSystem: "macOS, Windows, Linux", + operatingSystem: "macOS", applicationCategory: "DeveloperApplication", applicationSubCategory: "Developer Tools", offers: { From ab4b285565b397968fb4aecd9afa82c3df8b3cca Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 14:57:44 -0700 Subject: [PATCH 2/8] fix(marketing): remote workspaces and CLI are on every plan --- .../src/app/components/FeaturesSection/constants.ts | 2 +- apps/marketing/src/app/pricing/constants.ts | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/apps/marketing/src/app/components/FeaturesSection/constants.ts b/apps/marketing/src/app/components/FeaturesSection/constants.ts index 5a4df472897..0027fd6ce73 100644 --- a/apps/marketing/src/app/components/FeaturesSection/constants.ts +++ b/apps/marketing/src/app/components/FeaturesSection/constants.ts @@ -39,7 +39,7 @@ export const FEATURES: Feature[] = [ tag: "Remote Workspaces", title: "Run workspaces anywhere", description: - "Add any machine as a host. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", + "Add any machine as a host, on every plan. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", }, { tag: "CLI & SDK", diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index 8b400517f78..4558e070a73 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -34,6 +34,7 @@ export const PRICING_TIERS: PricingTier[] = [ features: [ "1 user", "Local workspaces", + "Remote workspaces", "Desktop app", "GitHub integration", "CLI", @@ -64,8 +65,8 @@ export const PRICING_TIERS: PricingTier[] = [ features: [ "Everything in Free", "Unlimited users", - "Remote workspaces", "Linear integration", + "Slack integration", "Mobile (coming soon)", ], cta: { @@ -133,7 +134,7 @@ export const COMPARISON_SECTIONS: ComparisonSection[] = [ { label: "Local workspaces", values: [true, true, true] }, { label: "Remote workspaces", - values: [null, true, true], + values: [true, true, true], badge: { label: "Beta", variant: "default" }, }, { label: "Automations", values: [true, true, true] }, @@ -171,7 +172,7 @@ export const PRICING_FAQ_ITEMS: FAQItem[] = [ { question: "Is there a free plan?", answer: - "Yes. Free covers individuals with 1 user, local workspaces, the desktop app, and GitHub integration. No credit card required.", + "Yes. Free covers individuals with 1 user, local and remote workspaces, the desktop app, the CLI, and GitHub integration. No credit card required.", }, { question: "How does Pro pricing work?", From 2c10c8d4f11222cbe886c00052579644ee7bf271 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:02:49 -0700 Subject: [PATCH 3/8] fix(marketing): drop plan mention from remote workspaces card --- apps/marketing/src/app/components/FeaturesSection/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/marketing/src/app/components/FeaturesSection/constants.ts b/apps/marketing/src/app/components/FeaturesSection/constants.ts index 0027fd6ce73..5a4df472897 100644 --- a/apps/marketing/src/app/components/FeaturesSection/constants.ts +++ b/apps/marketing/src/app/components/FeaturesSection/constants.ts @@ -39,7 +39,7 @@ export const FEATURES: Feature[] = [ tag: "Remote Workspaces", title: "Run workspaces anywhere", description: - "Add any machine as a host, on every plan. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", + "Add any machine as a host. Workspaces keep running when your laptop sleeps, and you can check in from wherever you are.", }, { tag: "CLI & SDK", From 4d997e92e0dbe27a74c37e3b6bfa67f8d8964884 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:14:39 -0700 Subject: [PATCH 4/8] feat(marketing): pricing page trust, enterprise tokens, and sticky compare table --- .../ComparisonTable/ComparisonTable.tsx | 27 +++++++--- .../components/PricingCard/PricingCard.tsx | 42 +++++++++++---- .../components/TrustStrip/TrustStrip.tsx | 52 +++++++++++++++++++ .../pricing/components/TrustStrip/index.ts | 1 + apps/marketing/src/app/pricing/constants.ts | 20 +++++-- apps/marketing/src/app/pricing/page.tsx | 7 +++ 6 files changed, 130 insertions(+), 19 deletions(-) create mode 100644 apps/marketing/src/app/pricing/components/TrustStrip/TrustStrip.tsx create mode 100644 apps/marketing/src/app/pricing/components/TrustStrip/index.ts diff --git a/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx b/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx index 74bc5e99675..42ab2cacfc4 100644 --- a/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx +++ b/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx @@ -30,18 +30,21 @@ export function ComparisonTable() { function DesktopTable() { return (
- +
- - + {PRICING_TIERS.map((tier) => ( ))} @@ -60,6 +63,16 @@ function DesktopTable() { ); } +function tierPriceLabel(tier: (typeof PRICING_TIERS)[number]): string { + if (tier.price.kind === "fixed") { + return tier.price.display; + } + if (tier.price.kind === "variable") { + return `${tier.price.yearly.display}/user/mo`; + } + return "Custom"; +} + function DesktopSectionGroup({ title, children, @@ -84,8 +97,8 @@ function DesktopSectionGroup({ function DesktopRow({ row }: { row: ComparisonRow }) { return ( - - + diff --git a/apps/marketing/src/app/pricing/components/PricingTiers/components/PricingCard/PricingCard.tsx b/apps/marketing/src/app/pricing/components/PricingTiers/components/PricingCard/PricingCard.tsx index 032a243faa9..d95cd57a3d6 100644 --- a/apps/marketing/src/app/pricing/components/PricingTiers/components/PricingCard/PricingCard.tsx +++ b/apps/marketing/src/app/pricing/components/PricingTiers/components/PricingCard/PricingCard.tsx @@ -55,15 +55,18 @@ export function PricingCard({ tier, isYearly }: PricingCardProps) { {cadence &&

{cadence}

} - +
+ + +
    {tier.features.map((feature) => ( @@ -80,6 +83,27 @@ export function PricingCard({ tier, isYearly }: PricingCardProps) { ); } +function CtaNote({ note }: { note: PricingTier["ctaNote"] }) { + if (!note) { + return

    {note.label}

    + ); +} + function resolvePrice(tier: PricingTier, isYearly: boolean) { if (tier.price.kind === "fixed") { return { diff --git a/apps/marketing/src/app/pricing/components/TrustStrip/TrustStrip.tsx b/apps/marketing/src/app/pricing/components/TrustStrip/TrustStrip.tsx new file mode 100644 index 00000000000..c54d3ecbc8b --- /dev/null +++ b/apps/marketing/src/app/pricing/components/TrustStrip/TrustStrip.tsx @@ -0,0 +1,52 @@ +import Image from "next/image"; + +const STRIP_LOGOS = [ + { + name: "microsoft", + label: "Microsoft", + logo: "/logos/microsoft-wordmark.svg", + height: 18, + }, + { + name: "openai", + label: "OpenAI", + logo: "/logos/openai-wordmark.svg", + height: 18, + }, + { name: "google", label: "Google", logo: "/logos/google.svg", height: 22 }, + { + name: "vercel", + label: "Vercel", + logo: "/logos/vercel-wordmark.svg", + height: 34, + }, + { + name: "datadog", + label: "Datadog", + logo: "/logos/datadog-wordmark.svg", + height: 38, + }, + { name: "amazon", label: "Amazon", logo: "/logos/amazon.png", height: 20 }, +]; + +export function TrustStrip() { + return ( +
    +

    Trusted by builders from

    +
    + {STRIP_LOGOS.map((client) => ( + + ))} +
    +
    + ); +} diff --git a/apps/marketing/src/app/pricing/components/TrustStrip/index.ts b/apps/marketing/src/app/pricing/components/TrustStrip/index.ts new file mode 100644 index 00000000000..4f7db3278c0 --- /dev/null +++ b/apps/marketing/src/app/pricing/components/TrustStrip/index.ts @@ -0,0 +1 @@ +export { TrustStrip } from "./TrustStrip"; diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index 4558e070a73..8a6a6459484 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -1,3 +1,4 @@ +import { COMPANY } from "@superset/shared/constants"; import type { FAQItem } from "@/app/components/FAQSection"; export type TierId = "free" | "pro" | "enterprise"; @@ -22,6 +23,7 @@ export interface PricingTier { variant: "default" | "outline" | "secondary"; external?: boolean; }; + ctaNote?: { label: string; href?: string }; highlight?: boolean; } @@ -44,6 +46,7 @@ export const PRICING_TIERS: PricingTier[] = [ href: "/download", variant: "outline", }, + ctaNote: { label: "No credit card required. Free forever." }, }, { id: "pro", @@ -59,7 +62,7 @@ export const PRICING_TIERS: PricingTier[] = [ yearly: { display: "$15", note: "per user/month", - cadence: "Billed yearly", + cadence: "$180 per user, billed yearly", }, }, features: [ @@ -87,9 +90,9 @@ export const PRICING_TIERS: PricingTier[] = [ }, features: [ "Everything in Pro", - "SSO & advanced security", + "SAML SSO & SCIM provisioning", "Audit logs", - "SLA & dedicated support", + "Uptime SLA & dedicated support", "Custom integrations", ], cta: { @@ -97,6 +100,7 @@ export const PRICING_TIERS: PricingTier[] = [ href: "/enterprise", variant: "outline", }, + ctaNote: { label: "Review our security", href: COMPANY.TRUST_URL }, }, ]; @@ -189,4 +193,14 @@ export const PRICING_FAQ_ITEMS: FAQItem[] = [ answer: "Everything in Pro plus SSO & SAML, SCIM provisioning, IP restrictions, audit logs, a custom SLA, dedicated support, and custom contracts. Pricing is tailored to your organization. Get in touch and we'll scope something that fits.", }, + { + question: "Where does my code run?", + answer: + "On your machine. Repos, worktrees, terminal output, and agent sessions stay local by default; cloud sync covers account and organization metadata only. Superset doesn't proxy any API calls.", + }, + { + question: "Do I need my own coding agent subscriptions?", + answer: + "Yes. Superset is the workspace your agents run in, not a model provider. Bring Claude Code, Codex, OpenCode, or any CLI agent, and use your existing accounts or API keys on every plan.", + }, ]; diff --git a/apps/marketing/src/app/pricing/page.tsx b/apps/marketing/src/app/pricing/page.tsx index 8c1b50294b6..e4545e5064e 100644 --- a/apps/marketing/src/app/pricing/page.tsx +++ b/apps/marketing/src/app/pricing/page.tsx @@ -4,6 +4,7 @@ import { ComparisonTable } from "./components/ComparisonTable"; import { PricingFAQ } from "./components/PricingFAQ"; import { PricingHero } from "./components/PricingHero"; import { PricingTiers } from "./components/PricingTiers"; +import { TrustStrip } from "./components/TrustStrip"; export const metadata: Metadata = { title: "Pricing", @@ -24,6 +25,12 @@ export default function PricingPage() { +
    +
    + +
    +
    +
    From efbe259856ee832263bdbd8992d011b26615102a Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:19:24 -0700 Subject: [PATCH 5/8] feat(marketing): pricing FAQ structured data + enterprise billing copy --- apps/marketing/src/app/pricing/constants.ts | 2 +- apps/marketing/src/app/pricing/page.tsx | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index 8a6a6459484..119b645859a 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -86,7 +86,7 @@ export const PRICING_TIERS: PricingTier[] = [ price: { kind: "custom", display: "Custom pricing", - note: "Billed yearly", + note: "Annual billing only", }, features: [ "Everything in Pro", diff --git a/apps/marketing/src/app/pricing/page.tsx b/apps/marketing/src/app/pricing/page.tsx index e4545e5064e..7eeb1020ada 100644 --- a/apps/marketing/src/app/pricing/page.tsx +++ b/apps/marketing/src/app/pricing/page.tsx @@ -1,10 +1,12 @@ import { COMPANY } from "@superset/shared/constants"; import type { Metadata } from "next"; +import { FAQPageJsonLd } from "@/components/JsonLd"; import { ComparisonTable } from "./components/ComparisonTable"; import { PricingFAQ } from "./components/PricingFAQ"; import { PricingHero } from "./components/PricingHero"; import { PricingTiers } from "./components/PricingTiers"; import { TrustStrip } from "./components/TrustStrip"; +import { PRICING_FAQ_ITEMS } from "./constants"; export const metadata: Metadata = { title: "Pricing", @@ -17,6 +19,7 @@ export const metadata: Metadata = { export default function PricingPage() { return (
    +
    From cb30c57579c77e59dc9db4ea8cdc0a23d23a88d3 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:40:22 -0700 Subject: [PATCH 6/8] fix(marketing): communicate remote workspaces as Pro --- apps/marketing/src/app/pricing/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index 119b645859a..cc05583d465 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -36,7 +36,6 @@ export const PRICING_TIERS: PricingTier[] = [ features: [ "1 user", "Local workspaces", - "Remote workspaces", "Desktop app", "GitHub integration", "CLI", @@ -68,6 +67,7 @@ export const PRICING_TIERS: PricingTier[] = [ features: [ "Everything in Free", "Unlimited users", + "Remote workspaces", "Linear integration", "Slack integration", "Mobile (coming soon)", @@ -138,7 +138,7 @@ export const COMPARISON_SECTIONS: ComparisonSection[] = [ { label: "Local workspaces", values: [true, true, true] }, { label: "Remote workspaces", - values: [true, true, true], + values: [null, true, true], badge: { label: "Beta", variant: "default" }, }, { label: "Automations", values: [true, true, true] }, @@ -176,7 +176,7 @@ export const PRICING_FAQ_ITEMS: FAQItem[] = [ { question: "Is there a free plan?", answer: - "Yes. Free covers individuals with 1 user, local and remote workspaces, the desktop app, the CLI, and GitHub integration. No credit card required.", + "Yes. Free covers individuals with 1 user, local workspaces, the desktop app, the CLI, and GitHub integration. No credit card required.", }, { question: "How does Pro pricing work?", From b7d3d8e024207c44cb9ea98a690b49cc736d91f6 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:54:43 -0700 Subject: [PATCH 7/8] fix(marketing): qualify compare-table Pro price as yearly-billed floor --- .../app/pricing/components/ComparisonTable/ComparisonTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx b/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx index 42ab2cacfc4..618e96a135a 100644 --- a/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx +++ b/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx @@ -68,7 +68,7 @@ function tierPriceLabel(tier: (typeof PRICING_TIERS)[number]): string { return tier.price.display; } if (tier.price.kind === "variable") { - return `${tier.price.yearly.display}/user/mo`; + return `from ${tier.price.yearly.display}/user/mo`; } return "Custom"; } From 6707047049b05d5b5009cb5632c0ef86d1ca50f5 Mon Sep 17 00:00:00 2001 From: Kiet Ho Date: Tue, 11 Aug 2026 15:58:38 -0700 Subject: [PATCH 8/8] fix(marketing): trim free-tier CTA note --- apps/marketing/src/app/pricing/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/marketing/src/app/pricing/constants.ts b/apps/marketing/src/app/pricing/constants.ts index cc05583d465..fbc3c8f604f 100644 --- a/apps/marketing/src/app/pricing/constants.ts +++ b/apps/marketing/src/app/pricing/constants.ts @@ -45,7 +45,7 @@ export const PRICING_TIERS: PricingTier[] = [ href: "/download", variant: "outline", }, - ctaNote: { label: "No credit card required. Free forever." }, + ctaNote: { label: "No credit card required." }, }, { id: "pro",
+
Features {tier.name} + + {tierPriceLabel(tier)} +
+
{row.label} {row.badge && } @@ -94,7 +107,7 @@ function DesktopRow({ row }: { row: ComparisonRow }) { {row.values.map((value, index) => (