Fix Broken Buttons
Hunt down every dead button in your AI-built app and wire each one to real, verified behavior.
The route
5 steps to Done
- 01
Inventory every interactive control
You cannot fix what you have not listed - audit first.
Preview prompt + verify gate ▾ Hide ▴
Audit this entire app and produce a table of EVERY button, link, icon-button, and menu item: its label/location, what it is supposed to do, and its current status (WORKS / DEAD / FAKE - fake meaning it shows feedback without doing the real action). Actually inspect the handlers; do not guess. Include modals, dropdown items, and mobile-only controls.
- ✓ Every page and modal was inspected
- ✓ Each control has a stated intended action
- ✓ Status is based on the actual handler code
- 02
Fix dead buttons
Wire every DEAD control to its intended real behavior.
Preview prompt + verify gate ▾ Hide ▴
Fix every control marked DEAD in the inventory. For each: implement the real handler performing the intended action (navigation, mutation, open dialog, submit); if it needs a backend call, implement or wire the endpoint; confirm the action's effect is observable (data changed, route changed, dialog opened). Update the inventory status as you go and list what changed per control.
- ✓ Each formerly-dead button has a working handler
- ✓ Backend-dependent buttons hit real endpoints
- ✓ Effects are observable, not claimed
- 03
Fix fake buttons
Replace success theater with real actions.
Preview prompt + verify gate ▾ Hide ▴
Fix every control marked FAKE. For each: remove the fake feedback (toast/redirect with no action) and implement the actual operation - real create/update/delete, real submission, real state change with persistence; keep the success feedback but only after the real operation succeeds; add a visible error path when it fails. Prove each fix by refreshing and confirming the effect persisted.
- ✓ Success feedback fires only after real success
- ✓ Effects survive a page refresh
- ✓ Failure shows a visible error
- 04
Add loading and disabled states
Async buttons must communicate work and prevent double-fires.
Preview prompt + verify gate ▾ Hide ▴
For every async button in the app: add a loading indicator (spinner or label change) while the operation runs; disable the button during the operation to prevent double submission; re-enable on completion or failure; ensure rapid double-clicks cause exactly one operation. List every button you touched.
- ✓ Buttons disable while pending
- ✓ Double-click produces one operation
- ✓ Buttons recover after failure
- 05
Full click-through verification
Prove the app has zero dead controls left.
Preview prompt + verify gate ▾ Hide ▴
Do a full click-through of the app and produce the final inventory table with every control now marked WORKS, including evidence (what happened when clicked). Test each async button's failure path by simulating a network error. Any control not verifiably working stays open and must be fixed before finishing.
- ✓ Every control re-tested after fixes
- ✓ Failure paths tested with simulated errors
- ✓ No control remains DEAD or FAKE