Make every action tell the user what's happening - shippingszn launch readiness
Every time a user clicks a button that talks to the server, three things have to be true: they SEE that something is happening, they CAN'T accidentally fire it twice, and the request is safe to receive twice on the backend anyway. Vibe-coded apps default to silence-then-success — and that's how you ship duplicate orders, double charges, and refresh-mid-submit chaos.
This one isn't dramatic until it is. The user clicks Submit, sees nothing for a beat, decides the page is broken, hits refresh — and now your app has either lost their input, charged them twice, or sent the same email twenty times. Loading state + disabled-while-submitting + server-side idempotency are the three legs of the stool. Two out of three is not safe. Do this on day one, not day thirty.
Owner verification required: Responsive actions need hands-on flow testing with slow networks and double-clicks. The scanner cannot prove every important mutation shows loading, recovers from errors, and is idempotent.
The Launch Fix Kit keeps scan-specific findings, file and line evidence, AI-builder punch-list tasks, and verification steps tied to the paid report.
- On every button or form that fires a network request, show a loading state within ~100ms — a spinner, an inline 'Saving…', or a skeleton. Silence is a bug.
- Disable the trigger while the request is in flight, and re-enable on success OR error. Buttons that stay dead after an error force the user to refresh — and that's where you lose data.
- For any write the user would mind being duplicated (order, payment, reservation, message sent, AI generation), enforce idempotency on the server — a client-generated idempotency key in the request, a unique database constraint, or a server-side dedup window. Disabling the button alone is not enough; a slow phone, a flaky network, or an aggressive double-tap will get past it.
- Test the failure mode on purpose. In your browser dev tools, throttle the network to 'Slow 3G' and double-click Submit before it finishes. If you end up with two records, your idempotency is missing.
- Empty states get the same energy. A brand-new user with no data should see a designed empty page with a clear next action — not a blank screen that looks like the load failed.
Run the scanner | Unlock Launch Fix Kit
Canonical URL: https://shippingszn.com/i/responsive-actions/