From 429c1444a3a5fde6c2a86c153e75ebfc1a998bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Mon, 9 Nov 2026 14:52:49 +0100 Subject: [PATCH 1/3] Include $500 of usage on Business; no plan rolls over unused usage --- content/(account)/pricing.mdx | 2 +- scripts/pricing-next.mjs | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/content/(account)/pricing.mdx b/content/(account)/pricing.mdx index 3da018a..bf0c563 100644 --- a/content/(account)/pricing.mdx +++ b/content/(account)/pricing.mdx @@ -12,7 +12,7 @@ Every plan allows commercial use. Hover the i on any row for what it ## Team pricing & limits -Shared by every Space on a [team](/teams). Your included usage pays first. Track it on [Usage](/usage). +Shared by every Space on a [team](/teams). Your included usage pays first and resets every month; unused usage doesn't roll over on any plan. Track it on [Usage](/usage). diff --git a/scripts/pricing-next.mjs b/scripts/pricing-next.mjs index c339770..092de46 100644 --- a/scripts/pricing-next.mjs +++ b/scripts/pricing-next.mjs @@ -22,7 +22,7 @@ const CPU = "$0.119 per CPU-hour"; // Per team, per month: [Personal, Go, Pro, Enterprise]. Business is added from BUSINESS_TEAM. const TEAM = [ ["Usage", [ - row("Included usage", "Pays for every metered resource on this page, at the listed prices. Resets every month; unused usage doesn't roll over.", + row("Included usage", "Pays for every metered resource on this page, at the listed prices. Resets every month; unused usage doesn't roll over on any plan.", ["$1", "$5", "$15", "Contract"]), row("Members", "People who can publish and change settings. Reviewers, commenters, agents and app users are free and never count.", ["1", "1", "Free up to 5, then $15/month each", "Contract"]), @@ -217,12 +217,12 @@ const FEATURES = [ ]], ]; -// Business (coming soon): from $500 a month, $25 per member, no included usage. +// Business (coming soon): from $500 a month with $500 of included usage, $25 per member. // Its prices are set; its limits aren't. A row without an override copies Pro // when Pro's cell is a yes/no, Beta, Soon or Contact sales, and is TBD otherwise. const TBD = "TBD"; const BUSINESS_TEAM = { - "Included usage": "None", + "Included usage": "$500", Members: "$25/month each", Compute: CPU, "MySQL compute": CPU, @@ -304,7 +304,7 @@ const columnsFor = (names) => names.map((name) => ({ name, ...PLAN_HEAD[name] }) const AT_A_GLANCE = [ ["", [ - row("Included usage", "Pays for every metered resource on this page, at the listed prices. Resets every month.", ["$1", "$5", "$15", "None", "Contract"]), + row("Included usage", "Pays for every metered resource on this page, at the listed prices. Resets every month; unused usage doesn't roll over on any plan.", ["$1", "$5", "$15", "$500", "Contract"]), row("Members", "People who can publish and change settings. Reviewers, commenters, agents and app users are free.", ["1", "1", "Free up to 5, then $15/month each", "$25/month each", "Contract"]), row("Spaces and custom domains", null, ["20", "100", "500", TBD, "Custom"]), row("Compute workers per Space", "Dynamic requests one Space runs at the same time.", ["2", "2", "4", TBD, "Custom"]), From 8b650d81882630dc8daf7863e21ad0a2aad4243d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Mon, 9 Nov 2026 14:59:15 +0100 Subject: [PATCH 2/3] Bill Business members and usage past $500 on top of the minimum --- content/(account)/pricing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/(account)/pricing.mdx b/content/(account)/pricing.mdx index bf0c563..5b000fc 100644 --- a/content/(account)/pricing.mdx +++ b/content/(account)/pricing.mdx @@ -89,7 +89,7 @@ Yes. Contact sales. | Generally available | Out of beta. Billing starts at the listed price after a month's notice | | Fair use | Normal use for a website or app. If a Space puts an unreasonable or disproportionately large load on our infrastructure, usually file sharing or storage, we ask you to adjust before restricting it. Deployed Spaces keep serving cached traffic | | Storage | Measured daily, averaged over the month. The first 1 GB per Space isn't counted for now; it covers platform files on each site. See [Server specs](/infrastructure/server-specs-settings) | -| Business minimum | $500 a month. Members and usage count toward it; you pay whichever is higher | +| Business minimum | $500 a month, which includes $500 of usage. Members and usage past the $500 are added on top | | Example bills | Illustrations. Your bill depends on your actual usage | | Abuse | We may restrict a Space that harms others or breaks the [Terms of Service](https://automattic.com/tos/). We tell you why, and you can always export your data | | Privacy | How we handle personal data is in the [Privacy Policy](https://automattic.com/privacy/) | From d6beb0fd4bf596768d19735558037c802a4863a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?batuhan=20i=C3=A7=C3=B6z?= Date: Mon, 9 Nov 2026 15:01:47 +0100 Subject: [PATCH 3/3] Show Business limits as Custom, matching Enterprise, instead of TBD --- components/PricingTable.astro | 8 +------- content/(account)/pricing.mdx | 1 - scripts/pricing-next.mjs | 23 ++++++++++++----------- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/components/PricingTable.astro b/components/PricingTable.astro index 2a25c87..d8595e2 100644 --- a/components/PricingTable.astro +++ b/components/PricingTable.astro @@ -53,7 +53,7 @@ const span = columns.length + 1; {row.values.map((value, index) => ( - {value === "✓" ? <>Included : value === "—" ? <>Not included : value === "TBD" ? TBD : value} + {value === "✓" ? <>Included : value === "—" ? <>Not included : value} ))} @@ -191,12 +191,6 @@ const span = columns.length + 1; color: #a16207; background: color-mix(in oklch, #eab308 16%, transparent); } - .sf-tag-tbd { - margin-left: 0; - color: var(--blume-muted-foreground); - border: 1px dashed var(--blume-border); - background: transparent; - } .sf-tag-comp { color: #15803d; background: color-mix(in oklch, #22c55e 16%, transparent); diff --git a/content/(account)/pricing.mdx b/content/(account)/pricing.mdx index 5b000fc..f8a0319 100644 --- a/content/(account)/pricing.mdx +++ b/content/(account)/pricing.mdx @@ -85,7 +85,6 @@ Yes. Contact sales. | Beta | Free while in beta; limits still apply. A price marked \* is subject to change | | Complimentary | Free for a limited time. The price marked † starts after a month's notice | | Soon | Not available yet; may change before launch | -| TBD | Not decided yet. Business limits are set before it launches | | Generally available | Out of beta. Billing starts at the listed price after a month's notice | | Fair use | Normal use for a website or app. If a Space puts an unreasonable or disproportionately large load on our infrastructure, usually file sharing or storage, we ask you to adjust before restricting it. Deployed Spaces keep serving cached traffic | | Storage | Measured daily, averaged over the month. The first 1 GB per Space isn't counted for now; it covers platform files on each site. See [Server specs](/infrastructure/server-specs-settings) | diff --git a/scripts/pricing-next.mjs b/scripts/pricing-next.mjs index 092de46..ee9765d 100644 --- a/scripts/pricing-next.mjs +++ b/scripts/pricing-next.mjs @@ -218,20 +218,20 @@ const FEATURES = [ ]; // Business (coming soon): from $500 a month with $500 of included usage, $25 per member. -// Its prices are set; its limits aren't. A row without an override copies Pro -// when Pro's cell is a yes/no, Beta, Soon or Contact sales, and is TBD otherwise. -const TBD = "TBD"; +// A row without an override copies Pro when Pro's cell is a yes/no, Beta, Soon +// or Contact sales, and otherwise matches Enterprise, with Contract shown as Custom. const BUSINESS_TEAM = { "Included usage": "$500", Members: "$25/month each", Compute: CPU, "MySQL compute": CPU, "Workers requests": "$0.30 per million", + "Workers compute": "Free now, then $0.072 per CPU-hour†", Storage: "1 GB per Space, then $0.10 per GB-month", }; const BUSINESS_SPACE = { - "Advanced crons": TBD, - "Extra email a day": TBD, + "Advanced crons": "Custom", + "Extra email a day": "Custom", "DDoS challenge mode": YES, "Custom certificate": YES, "Share links": NO_LIMIT, @@ -245,13 +245,14 @@ const BUSINESS_FEATURES = { Support: "Slack Connect channel", }; -/** Insert the Business column after Pro: an override, Pro's non-limit value, or TBD. */ +/** Insert the Business column after Pro: an override, Pro's non-limit value, or Enterprise's. */ export function withBusiness(groups, overrides, proIndex = 2) { const used = new Set(); const out = groups.map(([group, rows]) => [group, rows.map((item) => { const pro = item.values[proIndex]; const copies = [YES, NO, BETA, SOON, "Contact sales"].includes(pro); - const value = Object.hasOwn(overrides, item.label) ? overrides[item.label] : copies ? pro : TBD; + const enterprise = item.values.at(-1); + const value = Object.hasOwn(overrides, item.label) ? overrides[item.label] : copies ? pro : enterprise === "Contract" ? "Custom" : enterprise; if (Object.hasOwn(overrides, item.label)) used.add(item.label); return { ...item, values: [...item.values.slice(0, proIndex + 1), value, ...item.values.slice(proIndex + 1)] }; })]); @@ -306,10 +307,10 @@ const AT_A_GLANCE = [ ["", [ row("Included usage", "Pays for every metered resource on this page, at the listed prices. Resets every month; unused usage doesn't roll over on any plan.", ["$1", "$5", "$15", "$500", "Contract"]), row("Members", "People who can publish and change settings. Reviewers, commenters, agents and app users are free.", ["1", "1", "Free up to 5, then $15/month each", "$25/month each", "Contract"]), - row("Spaces and custom domains", null, ["20", "100", "500", TBD, "Custom"]), - row("Compute workers per Space", "Dynamic requests one Space runs at the same time.", ["2", "2", "4", TBD, "Custom"]), - row("Disk per Space", "The live site's files and its MySQL database.", ["1 GB", "10 GB", "25 GB", TBD, "Up to 1 TB"]), - row("Database backups", "How far back you can restore yourself. Older backups aren't deleted.", ["Daily, 7 days", "Hourly, 7 days", "Hourly, 30 days", TBD, "Custom"]), + row("Spaces and custom domains", null, ["20", "100", "500", "Custom", "Custom"]), + row("Compute workers per Space", "Dynamic requests one Space runs at the same time.", ["2", "2", "4", "Custom", "Custom"]), + row("Disk per Space", "The live site's files and its MySQL database.", ["1 GB", "10 GB", "25 GB", "Up to 1 TB", "Up to 1 TB"]), + row("Database backups", "How far back you can restore yourself. Older backups aren't deleted.", ["Daily, 7 days", "Hourly, 7 days", "Hourly, 30 days", "Custom", "Custom"]), row("Support", null, ["Community", "Email", "Priority email", "Slack Connect", "Dedicated, with SLA"]), ]], ];