Develop · Forks
Decisions on the record.
The few calls worth defending. Each one is a fork; the other branch would have been a different project.
Decision · 01
Every external integration fails open, not closed
Pricing, deed lookup, the database, email and analytics are each gated behind an optional env var. Unset any of them and the tool doesn't error, it falls back: the curated benchmark table stands in for a live pricing service, demo data stands in for the deed lookup, and a lead is still saved to Vercel Blob with no email service configured at all. The wizard works end to end on a fresh clone with no keys. The rule extends to the UI, not just the server: the save-report card asks the server whether saving is on and renders nothing when it isn't, because a deployment with no database should show no button rather than a button that returns a 503.
Decision · 02
One tier-dependent number, not two
The estimate used to carry two independent hardcoded ladders sitting next to each other: a confidence of 92/90/82/50 and a range of ±7/±9/±10/±15. Neither came from a measured error, and a reader given both would reasonably assume one was derived from the other. The fix was not to make the two agree but to delete one. A tier now carries exactly one number, the band half-width, which is a judgement ordered by evidence rather than a backtested error figure, and everything the reader sees about certainty is derived from it or is words rather than a number. A second tier-dependent constant appearing anywhere in the codebase means the bug is back.
