Pricing currency: CHF base, 30 CHF/seat/year, localized display from the first pageview #23
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Decisions from Nikola (2026-09-06): switch pricing from USD to CHF and set the yearly seat price to 30 CHF (currently 32.40). Open question researched below: global CHF vs. local currency display.
What Paddle supports (researched)
PricePreviewreturns the localized price for the visitor before checkout — exactly the "they see Euro from the first pageview instead of discovering it at checkout" behaviour Nikola prefers.Recommendation
Base price 30 CHF/seat/year in Paddle; enable automatic currency conversion; render the pricing section and account seat-change previews via
PricePreviewso a German visitor sees EUR from the start (fallback to CHF when the preview call fails). Add clean-price EUR override later once the market bracket is settled (see the pricing-research issue).Touchpoints
index.htmlpricing section (currently hardcoded USD figures) → PricePreview-driven with static CHF fallback.account.htmlseat-change priced previews + invoices already come from Paddle/license-server — verify currency flows through end to end.cairn-license-server: webhook amounts are informational; verify nothing assumes USD.Sources: Paddle: Localize prices, Paddle: enable local currencies, Boathouse: clean international prices with Paddle.
Unblocked by the #24 decision (2026-09-06). Confirmed figures for the build:
Build order when picked up: Paddle sandbox catalog first (CHF prices, auto currency conversion on), then the site surfaces (index pricing card, account Buy-seats/seat-change previews) driven by
Paddle.PricePreviewwith static CHF fallback, then verify the webhook → licence issuance path end-to-end on sandbox — which doubles as a slice of the v0.7 licensing dress rehearsal. Live Paddle swap stays a launch-time act (Cairn #26).Progress + verification (2026-09-06):
fmt()de-CH, cycle buttons, demo fixtures, landing card + bullets incl. "ten months' worth"), plus the token-gated PricePreview block on the landing — strict no-op untilPADDLE_CLIENT_TOKENis set at launch.pricing-previewagainst the live sandbox: CH → 3.00/30.00 CHF · DE → €3.19/€31.89 · GB → £2.74/£27.40 · US → $3.70/$37.04. Conversion applies at checkout and in the preview APIs (location-driven); totals are tax-inclusive (CH contains 8.1% VAT → net 27.75; DE 19%; US untaxed).Notes: FX puts the US yearly at ~$37 (above the old $32.40) — a clean-price
unit_price_overridefor the US is a one-liner if ever wanted. Remaining before close: set the client token at launch (#26/#27 window) and one full sandbox purchase (checkout → webhook → licence issued in CHF) as the dress-rehearsal slice.Closing — everything substantive is shipped and verified:
ctkn_01m1t5056qzb7eff6ppf8nad6a. Site-driven sandbox checkout is enabled again.Per Nikola: the sandbox re-purchase is NOT required for the currency change (webhook issuance is quantity-based and currency-agnostic; two prior purchases prove the path) — the full purchase→renewal→seat-change pass stays in the v0.7 dress rehearsal on its own merits. The single remaining act, sandbox→live token+environment swap, moves to the #27 launch checklist. FX note stands: US yearly lands ~$37; a clean-price
unit_price_overrideis a one-liner if ever wanted.Post-close follow-ups from Nikola's sandbox checkout walkthrough (2026-09-06), for the record:
$literals in the buy-view total block → CHF (PR #32, deployed). The earlier "clean" grep was vacuous (\$became an end-of-line anchor); regex-verified now.