The states most products stub. Each one names what happened, what is safe, and the single next action — and never blames the user.
With the tech, the price, the photos and what's held in escrow — all in one place.
Left-anchored, no illustration. Says what will appear and offers one action.
Honest scarcity with the reason, the live zips, and the condition that opens the new one.
You'll be notified the instant one does. Your rules are: plumbing · 30-min radius · $400 floor beyond Richmond.
Restates the pro's own rules so the reason is obvious, and makes widening them one tap.
No offers waiting, no compliance items, no payouts pending. Next job is tomorrow at 09:00.
Treated as a good outcome and given the next-known event, so it doesn't read as an error.
Two named phases with a pulsing iris square. The composer stays live so the user can keep typing while the model works.
Skeletons hold the exact row shape, fading in by rank, so there is no layout shift when results land.
Rows keep their column rhythm so an operator can start scanning before the data arrives.
States the specific reason, refuses to guess, and gives three concrete recovery paths. The user's text is never cleared.
Money-safety first, slot held, input preserved, fix offered before any apology.
Reframes from "app broken" to "what is safe". Queued writes and no penalty are stated explicitly.
Exactly which step failed and what happens next. No "try again" button — because there is no self-serve override.
Confirms the work is safe locally and removes the fear of a late penalty — the two things a tradesperson actually worries about.
Lead with the money, then the two obvious next steps. A cancellation becomes a rebooking, not an exit.