Skip to content
Flows
Debugging Beginner · 30-60 minutes

Fix Broken Buttons

Hunt down every dead button in your AI-built app and wire each one to real, verified behavior.

Start Route · 5 steps

The route

5 steps to Done

  1. 01

    Inventory every interactive control

    You cannot fix what you have not listed - audit first.

    Preview prompt + verify gate ▾

    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
  2. 02

    Fix dead buttons

    Wire every DEAD control to its intended real behavior.

    Preview prompt + verify gate ▾

    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
  3. 03

    Fix fake buttons

    Replace success theater with real actions.

    Preview prompt + verify gate ▾

    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
  4. 04

    Add loading and disabled states

    Async buttons must communicate work and prevent double-fires.

    Preview prompt + verify gate ▾

    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
  5. 05

    Full click-through verification

    Prove the app has zero dead controls left.

    Preview prompt + verify gate ▾

    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