Pricing parity: GBP and EUR for Cap Pro - #2130
Merged
Merged
Conversation
…oint Country to currency mapping mirrors Stripe Checkout's IP localization (GBP for UK and crown dependencies, EUR for eurozone countries and territories, USD otherwise) so displayed prices always match what checkout presents.
Cap Pro pricing surfaces (pricing cards, compare table, upgrade modal, onboarding upsell, analytics upsell) show the visitor's presentment currency: 12 GBP/EUR/USD monthly, 98 yearly, same digits in every currency. Billing surfaces format amounts in the subscription's actual Stripe currency instead of a hardcoded dollar sign. Support AI pricing context updated. Commercial license and SEO pages stay USD.
Fetches /api/currency from the configured web server and swaps the symbol only, falling back silently to USD offline. Commercial license card stays USD.
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
Member
Author
|
hey @greptileai, please re-review the PR |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Cap Pro now has pricing parity across USD, GBP and EUR: 12/mo and 98/yr in all three currencies, same digits, different symbol.
The Stripe side is already live: the existing production monthly and yearly prices carry gbp and eur currency_options, so Stripe Checkout automatically presents the visitor's local currency by IP. No new price IDs, so existing subscriptions, seat updates and webhooks are unaffected. Verified against production with rendered checkout pages (GBP 12.00/mo and GBP 98.00/yr from a UK IP) and the eurozone path via Stripe's location simulation in test mode.
This PR is the display layer:
apps/web/utils/currency.tswith a country-to-currency map that mirrors Stripe Checkout's own IP localization (GBP for UK and crown dependencies, EUR for eurozone countries and territories, USD otherwise, including non-euro EU countries like Sweden and Poland which Checkout also bills in USD).GET /api/currencyendpoint readingx-vercel-ip-country, force-dynamic withprivate, no-storecaching, plus a?country=XXoverride outside production for testing.useCurrency()hook (SSR-safe, USD first paint, module-level request cache).Deliberately unchanged: Commercial License ($29/$58, separate license server), developer credits, SEO marketing pages and schema.org JSON-LD (static content stays USD).
Testing
tsc -b apps/web apps/desktopclean.🤖 Generated with Claude Code
Greptile Summary
Cap Pro pricing displays are localized to USD, GBP, or EUR while post-purchase billing surfaces use the subscription’s actual Stripe currency.
HttpApiandapiToHandlerpattern.Confidence Score: 5/5
The PR appears safe to merge.
No blocking failure remains; the previously reported API-route architecture violation has been fixed.
Important Files Changed
Reviews (2): Last reviewed commit: "refactor(web): build /api/currency with ..." | Re-trigger Greptile
Context used: