Use cases · what a click-through misses
Your app can work perfectly and still not be ready.
Each case below passes a normal click-through: pages load, saves save, payments go through. Each one would still hold a launch at the gate. Pick a case and watch the test run.
Educational demo Fictional apps, accounts and data. No real customer is shown.
User A can open User B's notes
Click-through test
WorksNotes save, load and sync for every account.
Launch inspection
Not readyChange one number in the request and another user's note comes back.
- Test
- As User A, request note 8821, which belongs to User B:
GET /api/notes/8821 - Expected
403 Forbidden- Observed
- Blocker
200 OKwith User B's note in the response. - After the fix
- Pass
403 Forbidden. The server checks who owns the note before returning it.
Why it slips through
The screen only ever lists your own notes, so it looks private. But the server hands back whatever ID it is asked for. The fix is one rule on the server: return a record only to the account that owns it, and test it with two real accounts.
See what LaunchGate would testA normal user promotes themselves to admin
Click-through test
WorksProfile edits save instantly.
Launch inspection
Not readyAdd one extra field to the save request and the account becomes an admin.
- Test
- From a normal account, save the profile with one extra field:
"role": "admin" - Expected
- The extra field is rejected and the role stays
user. - Observed
- Blocker
200 OKand the account now hasrole: admin. - After the fix
- Pass Role change rejected. The server accepts only the fields a user may edit: name and email.
Why it slips through
The settings form has no role field, so nobody thinks to protect it. Behind the form, the server saves every field it receives. The fix: list the fields each endpoint accepts, and decide roles on the server only.
See what LaunchGate would testA $99 plan checks out for $0.01
Click-through test
WorksCheckout completes and the receipt arrives.
Launch inspection
Not readyThe browser sets the price, so a customer can change it.
- Test
- Change the checkout request from
amount: 9900toamount: 1(amounts are in cents). - Expected
- A charge of $99.00, or the request is refused.
- Observed
- Price tampering Payment accepted for $0.01 and a receipt sent.
- After the fix
- Pass The browser sends only
product_id: "pro". The server looks up the trusted price: $99.00.
Why it slips through
Anything the browser sends, the customer can edit. When the amount travels from the page to the payment call, the page decides the price. The fix: send a product ID and let the server look up the price it trusts.
See what LaunchGate would testA Stripe secret key ships inside the page's JavaScript
Click-through test
WorksPayments, refunds and receipts all work.
Launch inspection
Not readyAnyone who opens the page can read the live secret key.
- Test
- Search the JavaScript files every visitor downloads for secret-key patterns.
- Expected
- Only the publishable key (
pk_live_…) appears in the browser. - Observed
- Blocker
sk_live_••••••found in/assets/app.js. - After the fix
- Pass Key rotated and moved to server environment variables. The page holds the publishable key only.
Why it slips through
Pasting the key into the frontend is the quickest way to get a first charge working, and everything keeps working afterwards. A secret key can move money and read customer records, so once it has shipped, treat it as public: rotate it, keep it on the server, and use the publishable key in the browser.
See what LaunchGate would testAnalytics fires before the visitor answers the cookie banner
Click-through test
WorksThe banner shows and the dashboard fills with visits.
Launch inspection
Not readyVisitor data leaves before anyone answers the banner.
- Test
- Open the site in a fresh browser, leave the cookie banner alone, and record every outgoing request.
- Expected
- No analytics requests until the visitor makes a choice.
- Observed
- Blocker Three analytics requests sent on page load, before the banner appears.
- After the fix
- Pass Analytics waits for Accept. Nothing is sent after Reject.
Why it slips through
Most analytics tags start the moment they load, and the banner usually loads after them. Where consent is required, that order is the problem. The fix: load tags only after a choice, then check it with the browser's network panel open, not by looking at the banner.
See what LaunchGate would testThe policy says data stays in-house. An outside AI provider receives it.
Click-through test
WorksThe AI assistant drafts helpful support replies.
Launch inspection
Not readyCustomer messages go to an outside AI provider while the policy says data stays inside the company.
- Test
- Send a support message, trace where its data goes, and compare that with the privacy policy.
- Expected
- Every service that receives personal data is disclosed.
- Observed
- Mismatch Message text and email address go to an outside AI provider. The policy says data stays inside the company.
- After the fix
- Pass The policy names the AI provider, what it receives and why. Policy and data flow match.
Why it slips through
Policies get written once while features keep shipping. Adding an AI feature quietly adds a new recipient of personal data. LaunchGate maps where data actually goes and compares it with what the policy promises.
LaunchGate flags issues for attorney review. LaunchGate is not a law firm and does not provide legal advice.
See what LaunchGate would testAn uploaded document hides instructions for your AI agent
Click-through test
WorksThe assistant summarises uploaded files accurately.
Launch inspection
Not readyHidden text in a file gets the agent to reach for the email tool.
- Test
- Upload a test file that contains hidden instructions, and record which tools the agent tries to use.
- Expected
- File text is treated as content, not commands. No tool calls the user didn't ask for.
- Observed
- Blocker The agent tries to email the customer list to an outside address.
- After the fix
- Tool access blocked The agent can only read. Sending email needs a person's approval.
Why it slips through
An AI agent reads everything in a file, including text people can't see. If the same agent can also send email or change the database, a document can steer it. The fix: give the agent only the tools it needs, require approval for anything that leaves the app, and test with hostile files before launch.
See what LaunchGate would testCheckout can't be completed with a keyboard
Click-through test
WorksCheckout works with a mouse and on a phone.
Launch inspection
Not readyKeyboard focus gets stuck in the date picker and never reaches Pay.
- Test
- Complete checkout using only Tab, Shift + Tab, Enter and Space.
- Expected
- Focus moves through every field and reaches the “Pay $99” button.
- Observed
- Keyboard trap Focus loops inside the expiry-date picker. Pay is never reached.
- After the fix
- Pass Tab leaves the picker and reaches Pay. Esc closes it.
Why it slips through
Custom widgets often hold on to focus to feel polished, and nobody notices with a mouse. People who use a keyboard or a switch device then can't pay at all. The fix: let Tab leave every widget, keep focus visible, and run the whole checkout once without a mouse.
See what LaunchGate would test