Composite study

This is a product-class write-up, not a named-client story and not a results press release. Counts below describe the pack we actually write (approach points, tools, layers) — not invented bug totals or conversion lifts.

4
Approach points
5
Tools in the pack
5
Layers covered
3
Challenges documented

Overview

Row-level security was “on” in a screenshot. The generated client called `/api/items/:id` without a server check beyond “is logged in.”

Prompt-built checkout created an order on redirect, not on PSP confirmation.

Industry pattern this is grounded in

AI app builders ship UI fast and often leave authorization, empty states, and webhook idempotency as leftovers. We test those leftovers first.

Highlights

Typical launch bar: Wait until journeys and evals agree — do not ship on demo scores alone.

Challenges

01

No one owned the generated auth code. “The tool made it” is not a control.

02

Environment keys for the AI builder were in client bundles.

03

Each regenerate of the app shuffled routes and broke the first Playwright suite — we had to target roles and APIs, not brittle CSS.

How we tested

01

Auth, password reset, session expiry.

02

IDOR on every object type; tenant isolation if multi-workspace.

03

Empty, loading, error states. Mobile keyboard covering CTA.

04

PSP webhook out-of-order and duplicate.

Starting point vs what we required

Starting point versus the controls we required
Starting pointWhat we required
No one owned the generated auth code. “The tool made it” is not a control.Auth, password reset, session expiry.
Environment keys for the AI builder were in client bundles.IDOR on every object type; tenant isolation if multi-workspace.
Each regenerate of the app shuffled routes and broke the first Playwright suite — we had to target roles and APIs, not brittle CSS.Empty, loading, error states. Mobile keyboard covering CTA.

What we delivered

01

Journeys / UI

  • Playwright — Signup, happy path, mobile CTA
02

API / contract

  • Postman — IDOR, webhook idempotency
03

Security scan

  • OWASP ZAP — Exposed debug and .env-ish endpoints
04

Dependency review

  • Snyk — Dependency surprises in the generated lockfile
05

Accessibility

  • axe DevTools — Public landing and checkout

Outcomes

Critical IDOR and double-entitle findings blocked launch. We left Newman collections that survive UI regen, plus a thin Playwright happy path.

Secret-in-bundle was High. The team moved keys server-side before we would call the app launch-ready.

Stack

Testing stack used on this product class
LayerToolWhat we validated
Journeys / UIPlaywrightSignup, happy path, mobile CTA
API / contractPostmanIDOR, webhook idempotency
Security scanOWASP ZAPExposed debug and .env-ish endpoints
Dependency reviewSnykDependency surprises in the generated lockfile
Accessibilityaxe DevToolsPublic landing and checkout

Same method as the rest of our work: severity-ranked findings, pass rules in writing, and a ship / wait / block call. See the evaluation method and tool comparison.