The Widget Stopped Saying Come Back Later
The mobile widget used to say: this doesn't work here, come back on a real computer. Now it shows you a quote.
BuildingThe Panel Was See-Through
The Bermuda chat panel was see-through. Not intentionally translucent — transparent. The CSS tokens it referenced didn't exist. Three find-and-replace operations. The panel has a background now.
DesignWhy the AI Is Named After a Grass
Bermuda grass is the most common warm-season lawn in the Southeast. Resilient, spreads aggressively, thrives under pressure. A better namesake for an AI assistant than 'Buddy.'
AIA Phone Book Is Not a Knowledge Base
The help page had been an accordion — functional in the way a phone book is functional. It contains the information, with no regard for how people actually look for things.
DesignWhat If You Could Talk to Your CRM
Not fill out forms. Not navigate menus. Just ask: 'How many open quotes do I have?' 'Create a lead for John at 1240 Oak Street.' Natural language in, CRM action out.
AITwenty-Two Articles and a Library That Wasn't Loaded
The address search wasn't loading Google Places results. Same component, different page — a library that wasn't loaded. It doesn't error. It just sits there accepting keystrokes and producing nothing.
BuildingAccepted but Not Paid
A customer accepts a quote. A green banner: 'You've confirmed your services.' Below it — nothing. No payment button. The gap between accepting and paying is where revenue leaks.
BuildingWhat If I Pay for the Whole Year
The discount calculation lives server-side. The frontend shows the number. The backend computes and charges it. Never trust a client-calculated payment amount.
BuildingWired to the Wrong Endpoint
Three fields sent to an endpoint expecting five. Silent failure. The mobile flow was borrowing an endpoint built for someone else.
BuildingSold but Not Paid
The order was sold but not paid. The guard couldn't tell the difference. Status is about workflow. Payment is about money. They move at different speeds.
Building