The session started with a funeral and ended with a birth.
Fifty-eight thousand customer records were gone. Not corrupted — archived. Sitting inside a Supabase project snapshot like family photos in a storage unit nobody remembered renting. Fourteen thousand orders lived there too, timestamped and intact, frozen in a database that no longer served anything.
Recovery from a snapshot isn't dramatic the way a server fire is dramatic. There's no alarm. You find the project ID, open the Management API, and start running SQL batch exports. Row by row, table by table, the data comes back — not resurrected, exactly, but repatriated. You bring it home and discover it doesn't quite fit anymore. Every recovered order had its stage set to lead, regardless of what it actually was. A confirmed $4,000 job looked the same as someone who filled out a form once and never came back. So you fix that too — quietly, systematically, the way you re-shelve books after a move.
But here's the thing about recovery work: it forces you to look at what you're recovering into.
The customer screen — the place where an office manager spends six hours a day — was a single scrolling column. Profile at the top, then orders, then notes, then history, all stacked vertically like a receipt that never ends. You'd scroll past the phone number to find the service history. You'd scroll back up to grab the address. Every interaction was a scavenger hunt through your own data.
Fifty-eight thousand records flowing back into that screen would have been fifty-eight thousand reasons to keep scrolling.
So instead of just plugging the data back in and moving on, the session pivoted. The customer screen became a two-column command center: a 360-pixel sidebar pinned on the left — profile, properties with map thumbnails, pinned notes, quick actions — and a five-tab content area on the right. Orders. Service history. Activity. Messages. Team comments. Everything an office admin needs visible without reaching for the scroll wheel.
Two new tables came into existence: customer_notes and customer_comments. Six new API endpoints. A MeasureYardModal that lets you measure a property inline, without leaving the customer's page, without losing your context. The kind of thing that sounds small until you realize someone was navigating away from their workflow eight times a day to do it.
The component grew from 910 lines to 1,100. Not bloat — density. The difference between a hallway and a cockpit.
The session that started with bringing data back from the dead ended with building the screen that data deserved to live in. Recovery isn't just restoring what was. Sometimes it's the permission to admit that what was wasn't good enough.