# Show the price you'll charge: one source of truth

> The price a customer sees and the price you charge must come from one source. The moment a price is duplicated into a second surface — a static constant, a marketing page — the two can drift apart silently. Read prices live, and never bake a number into a place that can fall out of sync.

URL: https://biloh.com.au/docs/engineering-notes/displayed-equals-charged
Category: Engineering notes | Audience: builder | Updated: 2026-06-26

A customer should never be charged a different number than the one you showed them. The only reliable way to guarantee that is to make the **displayed** price and the **charged** price read from the **same source** — the live plan record the checkout itself uses.

The bug this prevents is quiet and corrosive: a pricing page reads a hard-coded constant while checkout reads the live plan table. Edit one and forget the other, and the page now advertises a price you don't charge. Nobody sees an error; a customer just notices later, and trust takes the hit.

## The rule

Read prices **live** from the record of truth at render time. Do not copy a price into a second place — a constant in the code, a duplicated marketing string — that has to be kept in sync by hand.

## The corollary: don't show a price where you can't keep it honest

Sometimes the safe move is to **not** show the number at all. A trial signup form, for example, can confirm the plan a visitor chose by **name** ("starting your trial on the Pro plan") without quoting a price — because a static price baked into the signup form is exactly the kind of duplicate that drifts. The authoritative price lives on the pricing page and at checkout, both reading the same source. Showing the plan name confirms the choice; omitting the static price removes a thing that can go wrong.

## How to check it

The strongest check is a direct comparison: assert that the price the page renders equals the price the billing system would charge for that plan. If the two *can* disagree, eventually they will — so make a test prove they can't.

## Related

- [How Biloh handles money: the two Stripe tills](/docs/concepts/two-stripe-tills)
- [A handler nothing subscribes to does nothing](/docs/engineering-notes/wiring-an-event-to-its-handler)
