Skip to content

Commit 16beff6

Browse files
committed
site: price Compute alongside Postgres on the pricing page
Compute GA: the pricing page now covers both products as equals. - Plan cards: symmetric labelled groups per card — Prisma Compute (included allowance), Prisma Postgres, and Platform (spend limits, compliance) - Compare-plans table: new Prisma Compute group with included/overage row pairs at the GA meter rates; "Database usage" renamed "Prisma Postgres" and Monthly price hoisted above the product groups - How-it-works and FAQ copy updated for GA (no more beta hedging); egress answer scoped to Postgres now that Compute bills bandwidth - Meter rates added to pricing-data.ts and the llms surfaces ⚠ Compute *included allowance* numbers in the cards and table are placeholders to establish the format — real figures TBD (rates are the confirmed GA meter prices).
1 parent 3f3d6a1 commit 16beff6

7 files changed

Lines changed: 316 additions & 114 deletions

File tree

apps/site/src/app/llms-content.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { SITE_HOME_DESCRIPTION, SITE_HOME_TITLE } from "@/lib/site-metadata";
22
import { getBaseUrl } from "@/lib/url";
3-
import { plans, usagePricing } from "@/lib/pricing-data";
3+
import { computeMeters, plans, usagePricing } from "@/lib/pricing-data";
44

55
type LlmsPage = {
66
path: string;
@@ -46,9 +46,9 @@ const sitePages: LlmsPage[] = [
4646
},
4747
{
4848
path: "/pricing",
49-
title: "Pricing — Prisma Postgres Plans & Features",
49+
title: "Pricing — Prisma Compute & Prisma Postgres",
5050
description:
51-
"Prisma Postgres plan details, included usage, database limits, support levels, and compliance coverage.",
51+
"Usage-based pricing for the whole stack: Prisma Compute app hosting rates, Prisma Postgres plan details, included usage, database limits, support levels, and compliance coverage.",
5252
},
5353
{
5454
path: "/enterprise",
@@ -195,8 +195,8 @@ Key Prisma MCP Server capabilities:
195195
## Pricing
196196
197197
URL: ${toAbsoluteUrl(baseUrl, "/pricing")}
198-
Title: Pricing — Prisma Postgres Plans & Features
199-
Description: Get started for free with Prisma Postgres. Choose the right plan for your workspace based on your project requirements.
198+
Title: Pricing — Prisma Compute & Prisma Postgres
199+
Description: Usage-based pricing for the whole stack. Get started for free, choose the right Prisma Postgres plan for your workspace, and pay for Prisma Compute app hosting by use.
200200
201201
Pricing summary:
202202
- Free plan: ${plans.free.price.USD}/month, 100,000 operations included, 500 MB storage, 50 databases, no credit card required
@@ -216,6 +216,10 @@ Support and compliance summary:
216216
- Pro: Standard support, GDPR / HIPAA
217217
- Business: Premium support, GDPR / HIPAA / SOC2 / ISO:27001
218218
219+
Prisma Compute pricing (usage-based app hosting):
220+
${computeMeters.map((m) => `- ${m.meter}: ${m.price}${m.represents}`).join("\n")}
221+
- Idle apps scale to zero and cost nothing; deploys, preview branches, and seats are not billed
222+
219223
## Enterprise
220224
221225
URL: ${toAbsoluteUrl(baseUrl, "/enterprise")}

apps/site/src/app/pricing/page.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,15 @@ import { TestimonialsReveal } from "@/components/sections/testimonials-reveal";
1212
export const metadata: Metadata = {
1313
title: "Pricing",
1414
description:
15-
"Usage-based pricing by operation — pay for the queries your app runs, not seats or deploys. Free tier with no time limit, hard spend limits on every paid plan.",
15+
"Usage-based pricing for your whole stack — Prisma Compute app hosting and Prisma Postgres databases. Pay for the work your app does, not seats or deploys. Free tier with no time limit, hard spend limits on every paid plan.",
1616
};
1717

1818
// Built from the approved V2 pricing copy, in V2's order (CTA then FAQs).
19+
// Compute GA launch (Shane, 2026-08-24): Compute pricing lives inside the
20+
// existing structures — included allowances on the plan cards, rates and
21+
// allowances as a group in the spec table — NOT as a separate section, hero
22+
// subhead, or strip (all three were tried and removed on Shane's feedback:
23+
// "we already have a table for these things").
1924
// "Every plan includes" is the right-hand column of PricingHowItWorks; the
2025
// calculator's three entry points double as its preset selector.
2126
//

apps/site/src/components/sections/pricing-faq.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@ import { Faq, type FaqItem } from "@/components/sections/faq";
33
// V2's pricing FAQs, copy verbatim. The operation definition is the wording
44
// Gregory locked (db-only: API requests do not count) — keep it identical
55
// wherever it appears on the page.
6+
//
7+
// The Compute answers were rewritten for the GA launch (Shane, 2026-08-24):
8+
// the beta-era "pricing will be published before general availability" line
9+
// became false the moment the meter table went on this page, and the egress
10+
// answer now scopes its "no" to Postgres since Compute bills outbound
11+
// bandwidth. Rates quoted here must match pricing-data.ts computeMeters.
612
const PRICING_FAQS: FaqItem[] = [
713
{
814
question: "What counts as an operation?",
@@ -12,7 +18,7 @@ const PRICING_FAQS: FaqItem[] = [
1218
{
1319
question: "Is Prisma ORM really free?",
1420
answer:
15-
"Yes. Prisma ORM is open source and will always be free. The paid plans cover Prisma Postgres (managed database hosting) and Prisma Compute (app hosting, currently in public beta).",
21+
"Yes. Prisma ORM is open source and will always be free. The paid plans cover Prisma Postgres (managed database hosting) and Prisma Compute (app hosting).",
1622
},
1723
{
1824
question: "What happens if I exceed my plan's operations?",
@@ -21,7 +27,8 @@ const PRICING_FAQS: FaqItem[] = [
2127
},
2228
{
2329
question: "Are there egress fees?",
24-
answer: "No. Unlimited data transfer is included with Prisma Postgres on all plans.",
30+
answer:
31+
"Not for your database — unlimited data transfer is included with Prisma Postgres on all plans. Apps hosted on Prisma Compute pay for outbound bandwidth at $0.025 per GB, as part of Compute's usage-based pricing.",
2532
},
2633
{
2734
question: "Can I change plans later?",
@@ -30,7 +37,7 @@ const PRICING_FAQS: FaqItem[] = [
3037
{
3138
question: "What is Prisma Compute?",
3239
answer:
33-
"Prisma Compute is TypeScript app hosting built to run alongside Prisma Postgres — co-located on the same infrastructure so your app and database are always next to each other. It's currently in public beta. Pricing will be published before general availability.",
40+
"Prisma Compute is TypeScript app hosting built to run alongside Prisma Postgres — co-located on the same infrastructure so your app and database are always next to each other. It's billed on usage across four meters — requests, provisioned memory, active CPU, and outbound bandwidth — and an idle app scales to zero and costs nothing.",
3441
},
3542
{
3643
question: "Is there custom pricing for high-volume teams?",

apps/site/src/components/sections/pricing-how-it-works.tsx

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,20 @@
11
import { Reveal } from "@/components/motion/reveal";
22
import { PricingIncludes } from "./pricing-includes";
33

4-
// "How Prisma pricing works" — V2 copy verbatim on the left, the every-plan
5-
// -includes list stacked on the right. The calculator lives in its own section
6-
// after this one (see pricing-calculator.tsx).
4+
// "How Prisma pricing works" — the every-plan-includes list stacked on the
5+
// right. The calculator lives in its own section after this one (see
6+
// pricing-calculator.tsx).
77
//
88
// Sits *below* the plan cards as of 2026-07-30 (client request). Reads as the
99
// explanation of the cards above it, and "Every plan includes" now lands as a
1010
// footnote to them, which is where it belongs.
11+
//
12+
// Rewritten for the Compute GA launch (Shane, 2026-08-24): the V2 copy
13+
// explained operations only, and this section is where the page's one-usage-
14+
// model story has to land — Compute's four meters and Postgres's operations
15+
// as two halves of the same idea. The operation definition keeps Gregory's
16+
// locked wording (db-only); the workflow-stays-free paragraph and the bold
17+
// spend-limit promise carry over from V2.
1118
export function PricingHowItWorks() {
1219
return (
1320
<section className="bg-white px-4 sm:px-8">
@@ -24,16 +31,18 @@ export function PricingHowItWorks() {
2431
</Reveal>
2532
<Reveal delay={0.1}>
2633
<p className="mt-6 text-pretty text-base leading-relaxed text-muted-foreground">
27-
Prisma bills you for real work. Every query your app runs against your Prisma
28-
Postgres database counts as one operation, and operations are what you pay for.
34+
Prisma bills you for real work, on both halves of your stack. Your app on Prisma
35+
Compute pays for the requests it serves, the memory and CPU it uses while running,
36+
and the data it sends out. Your database on Prisma Postgres counts every query as
37+
one operation, and operations are what you pay for.
2938
</p>
3039
</Reveal>
3140
<Reveal delay={0.15}>
3241
<p className="mt-5 text-pretty text-base leading-relaxed text-muted-foreground">
3342
The ceremony around shipping stays free: deploys, preview branches, idle time, and
34-
the number of people on your team never add to the bill. A request does the same
35-
work whether it comes from a person, a script, or an AI agent, so that work is all
36-
you&apos;re charged for.
43+
the number of people on your team never add to the bill. An idle app scales to zero
44+
and costs nothing. A request does the same work whether it comes from a person, a
45+
script, or an AI agent, so that work is all you&apos;re charged for.
3746
</p>
3847
</Reveal>
3948
{/* V2 sets this line in bold — it's the promise the whole section

apps/site/src/components/sections/pricing-plans.tsx

Lines changed: 83 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ import { cn } from "@/lib/utils";
99
// on the lower price rather than making Prisma read as expensive; Free
1010
// states that it is free forever
1111
//
12+
// `compute` is each plan's included Prisma Compute allowance — Compute GA
13+
// (Shane, 2026-08-24): "put the details in the cards (how many are included
14+
// in each plan)".
15+
// ⚠ The allowance NUMBERS are placeholders: invented to show the format,
16+
// scaled so each plan's included Compute is roughly proportional to its price
17+
// at the GA meter rates ($1.00/1M requests, $0.006/GB-hour, $0.064/vCPU-hour,
18+
// $0.025/GB). Shane supplies the real figures — "we'll fix the exact numbers
19+
// after". Keep them in sync with the Prisma Compute group in
20+
// pricing-spec-table.tsx, which repeats them alongside the overage rates.
21+
//
1222
// `blurb` is kept in the data but NOT rendered (2026-07-30). Shane asked to land
1323
// on the plans with no preamble, and trimming the cards is what buys the last
1424
// 40px: at 1440x800 the blurb pushed each card to 494px and the CTA fell below
@@ -21,7 +31,14 @@ const PLANS = [
2131
name: "Free",
2232
price: "$0",
2333
note: "Free forever. No credit card required.",
24-
features: ["100,000 operations / month", "500 MB storage", "50 databases"],
34+
compute: [
35+
"1,000,000 requests / month",
36+
"100 GB-hours memory",
37+
"10 vCPU-hours active CPU",
38+
"10 GB outbound bandwidth",
39+
],
40+
postgres: ["100,000 operations / month", "500 MB storage", "50 databases"],
41+
platform: [],
2542
blurb:
2643
"Everything you need to build and explore with no clock running. No credit card, no expiry.",
2744
cta: "Start for free",
@@ -32,13 +49,19 @@ const PLANS = [
3249
name: "Starter",
3350
price: "$10",
3451
note: null,
35-
features: [
52+
compute: [
53+
"5,000,000 requests / month",
54+
"500 GB-hours memory",
55+
"50 vCPU-hours active CPU",
56+
"50 GB outbound bandwidth",
57+
],
58+
postgres: [
3659
"1,000,000 operations / month, then $0.0080 per 1,000",
3760
"10 GB storage, then $2.00 per GB",
3861
"1,000 databases",
3962
"7-day daily backups",
40-
"Spend limits",
4163
],
64+
platform: ["Spend limits"],
4265
blurb:
4366
"Ship your first production app without worrying about the bill. Backups included, spend limits on by default.",
4467
cta: "Get started",
@@ -49,14 +72,19 @@ const PLANS = [
4972
name: "Pro",
5073
price: "$49",
5174
note: null,
52-
features: [
75+
compute: [
76+
"20,000,000 requests / month",
77+
"2,000 GB-hours memory",
78+
"200 vCPU-hours active CPU",
79+
"250 GB outbound bandwidth",
80+
],
81+
postgres: [
5382
"10,000,000 operations / month, then $0.0020 per 1,000",
5483
"50 GB storage, then $1.50 per GB",
5584
"1,000 databases",
5685
"7-day daily backups",
57-
"Spend limits",
58-
"GDPR, HIPAA",
5986
],
87+
platform: ["Spend limits", "GDPR, HIPAA"],
6088
blurb:
6189
"For production apps with real traffic. More operations, lower overage rates, and headroom to grow without watching the meter.",
6290
cta: "Get started",
@@ -67,21 +95,37 @@ const PLANS = [
6795
name: "Business",
6896
price: "$129",
6997
note: null,
70-
features: [
98+
compute: [
99+
"50,000,000 requests / month",
100+
"5,000 GB-hours memory",
101+
"500 vCPU-hours active CPU",
102+
"1 TB outbound bandwidth",
103+
],
104+
postgres: [
71105
"50,000,000 operations / month, then $0.0010 per 1,000",
72106
"100 GB storage",
73107
"1,000 databases",
74108
"30-day backup retention",
75-
"Spend limits",
76-
"GDPR, HIPAA, SOC 2, ISO 27001",
77109
],
110+
platform: ["Spend limits", "GDPR, HIPAA, SOC 2, ISO 27001"],
78111
blurb: "Built for high-growth teams with compliance requirements and sustained high volume.",
79112
cta: "Get started",
80113
href: "https://console.prisma.io",
81114
popular: false,
82115
},
83116
];
84117

118+
// The two product groups render identically — same label style, same bullet
119+
// treatment — which is the "equal footing" Shane asked for (2026-08-24:
120+
// Compute is a first-class citizen). Compute leads, matching the
121+
// "Compute+Postgres" framing. Platform holds the plan-level items (spend
122+
// limits, compliance) so they don't masquerade as database features.
123+
const CARD_GROUPS = [
124+
{ key: "compute", label: "Prisma Compute" },
125+
{ key: "postgres", label: "Prisma Postgres" },
126+
{ key: "platform", label: "Platform" },
127+
] as const;
128+
85129
// Renders bare — no <section>, no gutter, no max-width. These cards live inside
86130
// the hero panel (PricingHero takes them as children), which already provides
87131
// all three. Rendering it standalone would have no horizontal padding.
@@ -108,14 +152,36 @@ export function PricingPlans() {
108152
<span className="ml-1 text-base font-normal text-muted-foreground">/ month</span>
109153
</p>
110154
{plan.note && <p className="mt-2.5 text-sm text-muted-foreground">{plan.note}</p>}
111-
<ul className="mt-6 space-y-3 border-t border-black/[0.06] pt-6">
112-
{plan.features.map((feature) => (
113-
<li key={feature} className="flex gap-2.5 text-sm leading-relaxed text-foreground">
114-
<CheckBold className="mt-0.5 size-4 shrink-0 text-prism-cyan-500" aria-hidden />
115-
{feature}
116-
</li>
117-
))}
118-
</ul>
155+
{/* One loop for every group — Compute and Postgres get the exact
156+
same treatment by construction (see CARD_GROUPS). Compute
157+
numbers are placeholders — see the note on PLANS. */}
158+
<div className="mt-6">
159+
{CARD_GROUPS.map(({ key, label }) => {
160+
const items = plan[key];
161+
if (items.length === 0) {
162+
return null;
163+
}
164+
return (
165+
<div key={key} className="border-t border-black/[0.06] py-5 last:pb-0">
166+
<p className="text-xs font-semibold text-muted-foreground">{label}</p>
167+
<ul className="mt-3 space-y-3">
168+
{items.map((feature) => (
169+
<li
170+
key={feature}
171+
className="flex gap-2.5 text-sm leading-relaxed text-foreground"
172+
>
173+
<CheckBold
174+
className="mt-0.5 size-4 shrink-0 text-prism-cyan-500"
175+
aria-hidden
176+
/>
177+
{feature}
178+
</li>
179+
))}
180+
</ul>
181+
</div>
182+
);
183+
})}
184+
</div>
119185
{/* plan.blurb is deliberately not rendered — see the note on PLANS */}
120186
<div className="mt-8 flex flex-1 items-end">
121187
{/* Brand CTAs, not the shadcn pair: the recommended plan gets

0 commit comments

Comments
 (0)