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"]),
]],
];