Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 1 addition & 7 deletions components/PricingTable.astro
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ const span = columns.length + 1;
</th>
{row.values.map((value, index) => (
<td class:list={[{ "sf-highlight": columns[index]?.name === highlight, "sf-none": value === "—" }]} data-label={columns[index]?.name}>
{value === "✓" ? <><span class="sf-yes" aria-hidden="true">✓</span><span class="sf-visually-hidden">Included</span></> : value === "—" ? <><span aria-hidden="true">—</span><span class="sf-visually-hidden">Not included</span></> : value === "TBD" ? <span class="sf-tag sf-tag-tbd" title="To be decided before Business launches">TBD</span> : value}
{value === "✓" ? <><span class="sf-yes" aria-hidden="true">✓</span><span class="sf-visually-hidden">Included</span></> : value === "—" ? <><span aria-hidden="true">—</span><span class="sf-visually-hidden">Not included</span></> : value}
</td>
))}
</tr>
Expand Down Expand Up @@ -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);
Expand Down
1 change: 0 additions & 1 deletion content/(account)/pricing.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,6 @@ Yes. Contact sales.
| <Badge variant="warning">Beta</Badge> | Free while in beta; limits still apply. A price marked \* is subject to change |
| <Badge variant="success">Complimentary</Badge> | Free for a limited time. The price marked † starts after a month's notice |
| <Badge>Soon</Badge> | 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) |
Expand Down
23 changes: 12 additions & 11 deletions scripts/pricing-next.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand All @@ -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;
Comment thread
indent[bot] marked this conversation as resolved.
Resolved
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)] };
})]);
Expand Down Expand Up @@ -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"]),
]],
];
Expand Down
Loading