- Shipped
- September 6, 2026 at 8:10 PM UTC
- Author
- Kamo
- Commit
- c9953bf
Every price on this site had a second copy in the repo, and the second copy was the one being served. kamo-prices.ts said so in its own comment: the fallback table was "used when the catalog is unreachable — which includes every CI build, since the API key is not present there and these pages are prerendered". That is exactly right, and it applied to all of it. The image build receives NEXT_PUBLIC_API_URL and nothing else, so the catalogue fetch 401s during prerender and /pricing, /calculator, /pricing/offer, the homepage strip and every competitor comparison were built from constants — the live fetch beside them never once decided a number. Production only looked correct because ISR regenerates the pages minutes later, inside the pod, where the key exists. So the fix is not a better fallback. The build now gets the key, as a build arg read from k8s/configmap.yaml — the same file the running pod reads, so there is one definition of it rather than two. Masked in the CI log, and set in the builder stage only; the runtime image is a separate FROM and takes its copy from the configmap as it always has. With that, ~530 lines of duplicated catalogue come out: plans, addons, bundles, the comparison matrix, per-seat rates, and a fallback PROMOTION carrying its own hand-written end date — that last one would resume advertising a discount months after it ended, countdown included. The $49/$99/33%/AUTUMN literals come out of the SEO descriptions too; those are advertising, shown to people furthest from anyone who would notice them rotting. Nothing falls back now. A page that cannot read the catalogue throws, and under ISR the last good render keeps serving — stale real prices, never invented ones. A cold cache with the catalogue down fails the build, which is the honest outcome: if the platform cannot say what it costs, a page asserting a number is worse than a page admitting it. Verified both ways: with the key, 187 routes prerender carrying $32.83/$66.33 and the live AUTUMN offer, matching what the site serves today; without it, the build stops at "Pricing catalogue unavailable — refusing to render prices this page cannot verify".