The Quote Page Learned to Accept Money
The quote page was informational — look but don't touch. This is when it learned to accept money.
BuildingA Relationship That Was Renamed but Not Everywhere
Send-quote was broken: Call to undefined relationship [product_details]. A name from an earlier version, partially migrated. Six files. One find-and-replace.
InfrastructureA Wall of Errors and What Lived Behind It
Production debugging is archaeology. The errors are symptoms. The causes live in migrations never run, CSP rules never updated, caches never cleared.
InfrastructureEighteen Thousand Lines in Fourteen Files
Settings.vue was 2,322 lines — one file handling billing, team management, notifications, and widget config. It left at 293. This is how that happened.
DesignFive Hundred Colors That Promised the Design Would Never Change
Five hundred hardcoded color values. Each one a promise that the design will never change. The design always changes.
DesignFourteen Services, Zero Interfaces
Fourteen services, none with interfaces. Thirty-four files touched. The architecture now says what it means: consumers depend on contracts, not implementations.
DesignOne Header That Prevented a Class of Bugs
The frontend never explicitly told the backend which tenant it was acting for — it just hoped the middleware could figure it out. One header, added once, ended that.
BuildingOne Missing Space, Zero Emails Delivered
All quote emails were silently failing. The SES Source header was missing a single space. One character, zero emails delivered, zero errors shown to the user.
Building