Ship checklist for AI-built apps
Run through this before you put an AI-built app in front of users. Each check is one line, with a short note on why it matters and how to confirm it.
Secrets and security
1. No API keys or secrets in client code or the repo.
Why: anything shipped to the browser can be read.
Check: search the built bundle and git history for key prefixes.
2. Server-side checks on every write.
Why: the UI hiding a button doesn’t stop a direct request.
Check: call each write endpoint without the UI and confirm it’s refused when it should be.
3. Database access rules are on (for example, row-level security).
Why: default-open tables let any signed-in user read others’ data.
Check: query another user’s rows with a test account.
4. User input is validated on the server.
Why: client checks are easy to skip.
Check: send an empty, oversized, and malformed value to each form endpoint.
Sign-in and accounts
5. Password reset and email change work end to end.
Why: these are the flows most often left half-built.
Check: run each one with a test inbox.
6. Signed-out users can’t reach signed-in pages or data.
Why: a missing route guard exposes private pages.
Check: open private URLs in a private window.
Payments (if you take money)
7. Paid access is granted from the payment provider’s webhook, not the success page.
Why: a success URL can be opened without paying.
Check: visit it directly with no purchase.
8. Refunds and cancelled subscriptions remove access.
Why: otherwise access outlives payment.
Check: cancel a test subscription and reload.
9. Test mode is off and live keys are set in production only.
Why: with test keys in production, customers can’t actually pay.
Check: confirm which keys each environment uses.
Reliability and monitoring
10. Errors are logged somewhere you’ll see them.
Why: users rarely report bugs; they leave.
Check: throw a test error in production and find it.
11. The app shows a useful message when a request or AI call fails.
Why: AI and third-party calls fail and time out.
Check: break the key or network and watch the UI.
12. Rate limits or spend caps on paid APIs.
Why: one loop or abusive user can run up a large bill.
Check: confirm a cap is set in each provider’s dashboard.
13. You can restore the database.
Why: a backup you’ve never restored may not work.
Check: restore to a scratch database once.
Privacy and basics (not legal advice)
14. A privacy page says what you collect and which services receive it.
Check: compare it with your analytics and third-party scripts.
15. Users can ask to have their account and data deleted, and you know how to do it.
Check: delete a test account fully.
16. Each launch-blocking item has acceptance criteria you’ve checked.
Why: “done” should mean something testable.
Check: every item above is ticked or has a ticket.
Free. No sign-up. It’s a markdown file you can paste into your repo or tracker.