- Shipped
- August 27, 2026 at 4:40 PM UTC
- Author
- Kamo
- Commit
- cfbb2da
The comparison pages hardcoded KamoCRM at $29 Starter and $64 Business while the catalog sold them at $34 and $72. Nine files, forty-two mentions, and the build was green the whole time — a price in prose is just prose. They carry {starterMonthly} / {businessMonthly} tokens now, resolved at render from the same catalog endpoint the pricing page reads, sharing its cache entry via an identical URL and revalidate. Repricing a plan in the catalog is the only edit anyone makes. The multiplier form covers the totals the copy computes out loud — {businessMonthly*10} for a ten-seat team, {businessMonthly*50*12} for the three-year Salesforce comparison. Those were the worst of the hardcoded numbers: quoted against a competitor's bill, read as authoritative, and wrong by exactly the factor the unit price behind them was wrong by. Substitution runs after localization, so translated pages get live numbers too, and it is applied wherever competitor data is read rather than only where it currently needs to be — a field that starts mentioning money later should not have to remember to opt in. check-price-tokens guards both directions: our figure typed as a literal, and a token that would not resolve. A typo'd {businessMonthy} ships as visible garbage, which is worse than a stale number. Competitors' prices stay literal, which is the point of a comparison — the guard tells them apart by proximity to a Kamo mention and by whether the amount is an endpoint of a range. FALLBACK_KAMO_PRICES is what CI renders with, since the API key is absent there and these pages prerender. It is the live catalog value, deliberately: a stale fallback would be the same bug in a new place.