feat(pricing): reduce Pro Business to $49.99/mo and $499/yr#5688
Conversation
Catalog priceCents 4999/49900; all surfaces regenerated via product:facts (bundle, edge module, tiers.json, JSON-LD offers, pricing docs en+zh, pricing.md summary) and the /pro bundle rebuilt. Hand-maintained spots updated: /pro FAQ answer (en + zh locale), CHANGELOG entry, U1 price pin. Catalog + deploy-config suites 202/202, facts check OK, both typechecks green. Dodo product prices must be updated to match before announce — the catalog values are display/fallback; checkout charges what Dodo has. Claude-Session: https://claude.ai/code/session_01GhxA6qFYCtNxcUEQ2wJJAo
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Preview deployment for your docs. Learn more about Mintlify Previews.
💡 Tip: Enable Workflows to automatically generate PRs for you. |
Greptile SummaryUpdates Pro Business pricing from $69.99/$699.99 to $49.99/$499.
Confidence Score: 3/5The PR should not merge until the Dodo products are repriced or deployment is otherwise gated so customers cannot be offered one price and charged another. Checkout ignores the changed catalog amounts and charges the prices attached to the existing Dodo product IDs, while the PR immediately publishes the new values across static pricing surfaces; the locale baseline also remains stale. Files Needing Attention: convex/config/productCatalog.ts, pro-test/src/locales/en.json, scripts/locale-baselines/pro-test.json
|
| Filename | Overview |
|---|---|
| convex/config/productCatalog.ts | Lowers the canonical fallback prices, but the retained Dodo products must be repriced separately before the advertised and charged amounts agree. |
| pro-test/src/locales/en.json | Updates the FAQ price correctly, but leaves its translation baseline stale. |
| api/_product-catalog.generated.js | Regenerates public product facts and fallback prices consistently from the canonical catalog. |
| pro-test/src/generated/tiers.json | Correctly carries the new monthly and annual prices into the pricing-page fallback data. |
| tests/product-catalog-data-export.test.mts | Updates the canonical catalog assertions to pin the new cent values. |
Reviews (1): Last reviewed commit: "feat(pricing): reduce Pro Business to $4..." | Re-trigger Greptile
| planKey: "pro_business_monthly", | ||
| displayName: "Pro Business Monthly", | ||
| priceCents: 6999, | ||
| priceCents: 4999, |
There was a problem hiding this comment.
Dodo charge bypasses catalog price
When this catalog change is deployed before both retained Dodo products are repriced, static surfaces advertise $49.99/month or $499/year while checkout sends only the product ID and Dodo charges its previously configured amount, causing customers to be offered one price and charged another.
Knowledge Base Used: Convex Backend
There was a problem hiding this comment.
Acknowledged — this is the operational sequencing risk already called out in the PR body: the catalog values are display/fallback only and checkout charges Dodo's configured price, so the two retained Dodo products must be repriced ($49.99 / $499) before this deploys/announces. No code change: checkout intentionally sends only the product ID. Note the live /pro cards read relay-seeded Dodo prices, so they'd show the OLD price (not the new one) until Dodo is updated — the mismatch window is visible, not silently undercharging.
| "a3": "Enterprise is for teams that need shared use, APIs, integrations, deployment options, and direct support.", | ||
| "q4": "Can I start with Pro and upgrade later?", | ||
| "a4": "Yes. Pro is for personal use. Pro Business ($69.99/mo) adds the commercial license, data export, 25 dashboards, and 250 MCP calls/day. API plans cover programmatic access, and Enterprise covers custom deployments. Upgrades run through the billing portal — the app guides you through the steps.", | ||
| "a4": "Yes. Pro is for personal use. Pro Business ($49.99/mo) adds the commercial license, data export, 25 dashboards, and 250 MCP calls/day. API plans cover programmatic access, and Enterprise covers custom deployments. Upgrades run through the billing portal — the app guides you through the steps.", |
There was a problem hiding this comment.
FAQ translation baseline remains stale
This source string now contains $49.99/mo, but its locale baseline still contains $69.99/mo, so the next translation workflow marks an already-synchronized FAQ entry stale and creates unnecessary localization churn.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
Fixed in bd39270 — the price-rewrite pass only matches
The price-rewrite pass only matches $-prefixed formats, so 11 /pro locales kept the old FAQ price in localized renderings (69,99 USD, €69,99, trailing-$ 69,99 $, Persian ۶۹٫۹۹). All swapped to the $49.99 equivalents, the en translation baseline (scripts/locale-baselines/ pro-test.json faq.a4) advanced to the new source string so the sync workflow doesn't churn, and the /pro bundle rebuilt. Locale guard 24/24, freshness 20/20, facts check OK. Flagged by Greptile on #5688. Claude-Session: https://claude.ai/code/session_01GhxA6qFYCtNxcUEQ2wJJAo
Follow-up to #5635: cuts Pro Business from $69.99/$699.99 to $49.99/mo · $499/yr.
One-knob change in
convex/config/productCatalog.ts(priceCents 4999/49900) with everything downstream regenerated vianpm run product:facts: generated bundle + edge module, tiers.json, JSON-LD offers, pricing docs (en+zh),public/pricing.mdsummary, and the rebuilt/probundle. Hand-maintained spots updated:/proFAQ answer (en + zh locale), CHANGELOG entry, and the U1 catalog-price test pin.Verified:
product:facts:checkOK, catalog + deploy-config suites 202/202, no stale$69.99string anywhere in served surfaces, both typechecks green.⚠ Before announcing: update the two Dodo products to the new prices — the catalog values are display/fallback only; checkout charges what Dodo has configured (
pdt_0NjyFDbhURh2oROgPIU3G→ $49.99,pdt_0Nk072fxPUcHWivZRtlQW→ $499). After merge, re-run the #5635 runbook tail if not yet done:npx convex deploy+seedProductPlans, Railway relay deploy.Also fixed en route: this worktree's
core.hooksPathpointed at the main checkout's stale pre-push (pre-#5672), which failed every push touching pro-test — reset to the relative.huskyper the 07-24 incident fix.https://claude.ai/code/session_01GhxA6qFYCtNxcUEQ2wJJAo