Payment state
Checkout success is treated as access proof.
The success page appears before durable entitlement is confirmed. This can confuse paid users or unlock access from a client-side state.
Sample deliverable · fictional app · no fake client claim
Before someone books a $99 review, they should know what comes back: a narrow scope, concrete evidence, risky states, and the smallest useful fixes first.
Why this exists
The preflight is intentionally narrow: one flow, ten checks, one written report, and a prioritized action plan. That makes it easier to buy, easier to deliver, and easier to trust.
Fictional sample report
The app lets a user pay for a plan, unlock a private workspace, and ask an AI assistant questions about uploaded project notes. The risky flow is not “does the demo answer.” The risky flow is whether the right paid user sees the right private state after payment.
Payment state
The success page appears before durable entitlement is confirmed. This can confuse paid users or unlock access from a client-side state.
Data boundary
The app has RLS policies, but the report needs Alice/Bob evidence across direct table, storage, and server-route paths.
AI output trust
Users may see confident answers even when retrieval returns weak context or stale project notes. Add uncertainty and source-boundary states.
| Check | Evidence observed | Why it matters | Smallest useful fix |
|---|---|---|---|
| Stripe final state | Success redirect shows “Pro unlocked” before webhook-backed account state is checked. | A paid user can see contradictory UI if the webhook is delayed or retried. | Gate paid features from durable account/subscription state, not redirect state. |
| Duplicate webhook | No written proof that duplicate events cannot double-create seats or credits. | Retries are normal. A rare duplicate should not corrupt billing or entitlement. | Add an idempotency ledger keyed by event ID plus a final-state assertion. |
| Two-user privacy | Alice/Bob negative case is not documented for direct queries and API routes. | One privacy leak can kill trust faster than a normal launch bug. | Create seeded test users and assert Alice cannot read Bob's rows/files/routes. |
| AI answer boundary | The answer UI does not distinguish “found evidence” from “model inferred.” | Users may act on unsupported output and blame the product. | Add a “source confidence” state and refuse/clarify when context is missing. |
| Support recovery | No admin/support view shows payment, entitlement, workspace, and AI context state together. | When a real customer says “I paid but I am locked out,” support needs evidence fast. | Create one internal lookup screen or runbook with the four authoritative states. |
1. Flow map
One diagram-style written map of the selected user flow and where proof is required.
2. Evidence list
Clear separation between observed behavior, missing proof, likely risk, and non-scope items.
3. Fix order
A prioritized sequence so the founder does not waste two days rebuilding the wrong thing.
Included
Best for launch-critical auth, payment, Supabase/RLS, AI output, or support recovery flows.
Not included
This is not legal, compliance, penetration testing, unlimited debugging, or guaranteed revenue.
Best buyer
Especially useful when the app was built fast and the paid/private state still feels fragile.
If your app has this kind of fragile flow
Start with the $5 workbook if you want to self-check. Book the paid pass when the flow touches money, private data, or client trust.