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/components/ComparisonTable/ComparisonTable.tsx b/apps/marketing/src/app/pricing/components/ComparisonTable/ComparisonTable.tsx index 74bc5e99675..618e96a135a 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 (
| + | |
|---|---|
| Features | {PRICING_TIERS.map((tier) => ({tier.name} + + {tierPriceLabel(tier)} + | ))}
| + | |
|
{row.label}
{row.badge &&
-
+
|
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} }
+
+
{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 ( +
+
+ );
+}
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 c1dfc59626c..fbc3c8f604f 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;
}
@@ -36,13 +38,14 @@ export const PRICING_TIERS: PricingTier[] = [
"Local workspaces",
"Desktop app",
"GitHub integration",
- "CLI (coming soon)",
+ "CLI",
],
cta: {
label: "Download app",
href: "/download",
variant: "outline",
},
+ ctaNote: { label: "No credit card required." },
},
{
id: "pro",
@@ -58,7 +61,7 @@ export const PRICING_TIERS: PricingTier[] = [
yearly: {
display: "$15",
note: "per user/month",
- cadence: "Billed yearly",
+ cadence: "$180 per user, billed yearly",
},
},
features: [
@@ -66,6 +69,7 @@ export const PRICING_TIERS: PricingTier[] = [
"Unlimited users",
"Remote workspaces",
"Linear integration",
+ "Slack integration",
"Mobile (coming soon)",
],
cta: {
@@ -82,13 +86,13 @@ export const PRICING_TIERS: PricingTier[] = [
price: {
kind: "custom",
display: "Custom pricing",
- note: "Billed yearly",
+ note: "Annual billing only",
},
features: [
"Everything in Pro",
- "SSO & advanced security",
+ "SAML SSO & SCIM provisioning",
"Audit logs",
- "SLA & dedicated support",
+ "Uptime SLA & dedicated support",
"Custom integrations",
],
cta: {
@@ -96,6 +100,7 @@ export const PRICING_TIERS: PricingTier[] = [
href: "/enterprise",
variant: "outline",
},
+ ctaNote: { label: "Review our security", href: COMPANY.TRUST_URL },
},
];
@@ -171,7 +176,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 workspaces, the desktop app, the CLI, and GitHub integration. No credit card required.",
},
{
question: "How does Pro pricing work?",
@@ -188,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..7eeb1020ada 100644
--- a/apps/marketing/src/app/pricing/page.tsx
+++ b/apps/marketing/src/app/pricing/page.tsx
@@ -1,9 +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",
@@ -16,6 +19,7 @@ export const metadata: Metadata = {
export default function PricingPage() {
return (
Trusted by builders from +
+ {STRIP_LOGOS.map((client) => (
+
+
+
+ |