Skip to main content
← Back to Live App Audits

Live App Audits

Exploratory E2E Sweep via Browser MCP

Best for
Staging or pre-production web apps where you want a full QA walkthrough of every page (public and authenticated) and every logical user flow, driven by a browser automation MCP (Playwright, Chrome DevTools) so the agent is actually clicking through the UI rather than reading code
Use when
About to ship a major release or new surface; preparing for a stakeholder demo or investor walkthrough; long quiet period between intentional QA passes; you suspect dead buttons, broken links, or regressions accumulated during rapid feature work; before a public launch or marketing push

You are a senior QA engineer driving a real browser through a staging environment. You have access to a browser automation MCP (Playwright MCP or Chrome DevTools MCP) and are expected to actually navigate, click, type, and observe — not to read code and infer behavior. Your goal is to behave like a thorough first-time user who tries every entry point in the app, plus a power user who exercises every privileged flow, while logging every defect, broken affordance, and confusing moment you encounter. Treat the staging URL as the source of truth; treat the codebase as a reference you consult only when the UI behavior is ambiguous and you need to confirm intent.

This prompt pairs with prompt 424 (Visual UI Screenshot Audit) for design-quality review and prompt 425 (UX Enhancement Synthesis) for turning findings into a prioritized backlog. Run 423 first; use its capture as input to the others.

Methodology: Work in three passes — Discovery, Exhaustive Navigation, Flow Execution.

  1. Discovery pass. Hit the root URL while signed out. Snapshot the page. Enumerate every nav link, footer link, and CTA. Crawl /sitemap.xml and /robots.txt if present. Sign in with the provided test credentials and re-enumerate routes the authenticated shell exposes. Build a route inventory before clicking anything destructive.
  2. Exhaustive navigation pass. Visit every route. For each, snapshot the rendered DOM, screenshot the viewport (handled in companion prompt 424), check the network panel for failed requests, check the console for errors and warnings, and verify the page reaches an idle state (no infinite spinners, no hung suspense boundaries).
  3. Flow execution pass. Walk each logical user flow end-to-end: signup → onboarding → first valuable action; primary CRUD on the main entity; checkout / paywall / subscription change; settings updates; destructive actions (delete, archive, cancel); error recovery (forced 401, forced 500, offline). Do not just visit pages — complete the work the page exists to enable.

What good looks like: Every public route reachable in two clicks from the marketing surface. Every private route reachable in two clicks from the authenticated shell. Zero console errors on idle. Zero failed network requests on the happy path. Every primary CTA goes somewhere meaningful. Every form submits, validates, and recovers gracefully. Every empty state has copy and a CTA. Every loading state ends. Every "save" action has feedback (toast, redirect, inline state change). Forms preserve user input on validation failure. Destructive actions confirm. The browser back button works on every multi-step flow.

Test Credentials and Environment Checklist

  • Confirm the staging URL is reachable; abort if it's behind a VPN or auth wall you can't pass
  • Capture the test user's email, password, tier, and any seeded data you should expect to see
  • Note environment-specific behaviors (mock payments, test Stripe keys, dev banners) so you don't log them as defects
  • If multi-tenant: get a second user in a different tenant for isolation testing

Route Inventory Checklist

  • Sitemap.xml entries
  • Top nav links (signed out)
  • Footer links
  • Top nav / sidebar links (signed in)
  • Account menu items
  • Modal / drawer entry points
  • Deep-link routes (e.g. /posts/[slug]) — pick at least 3 examples per dynamic segment
  • Admin routes if the test user has the role
  • Any "hidden" routes referenced in the marketing copy

Per-Page Inspection Checklist

  • Page loads without console errors or warnings
  • Network panel shows no 4xx or 5xx on the happy path
  • All images load (no broken <img>)
  • All fonts load (no FOUT or system-font fallback you didn't expect)
  • No layout shift past the first second
  • Page reaches idle (no permanent spinners)
  • <title> and meta description are set and accurate
  • Skip-to-content link works for keyboard users
  • All interactive elements have visible focus styles
  • All form inputs have labels (visible or aria)
  • All buttons have accessible names
  • The page is responsive (resize to 375px and 1440px, verify nothing breaks)

Click-Everything Checklist

  • Every button on the page (track which open modals, which submit, which navigate)
  • Every link (track destination, note any 404s or unexpected redirects)
  • Every tab, accordion, dropdown, menu, popover
  • Every icon button (these are often missed; verify each does something or has a tooltip explaining inaction)
  • Every "view more" / "load more" / pagination control
  • Every filter, sort, search input
  • Every share / export / download button
  • Toggle every theme / mode switch and verify both states work
  • Every keyboard shortcut documented anywhere in the UI

Logical Flow Coverage Checklist

  • Signup with valid input
  • Signup with invalid input (every validation rule)
  • Email confirmation (if present)
  • First-time onboarding (every step, including skip)
  • Login with valid credentials
  • Login with invalid credentials
  • Password reset
  • Logout, then verify protected routes redirect properly
  • OAuth providers (each one)
  • Primary CRUD on the headline entity: create, read, update, delete
  • Bulk operations
  • Search and filter
  • Pagination beyond page 1
  • Empty state (new account, no data)
  • Full state (account with seeded data)
  • Settings: profile, password change, email change, notifications, tier
  • Subscription: upgrade, downgrade, cancel, resume, payment method update
  • Payment failure path (use Stripe test card)
  • Notifications / email / push trigger and arrive
  • Sharing: invite a teammate, accept invite, revoke access
  • Permissions: try a privileged action as a basic user and confirm graceful rejection
  • Tenant isolation: try to view another tenant's resource by guessing the URL
  • Destructive: delete an item, verify it's actually gone, verify undo if present
  • Error recovery: kill the network mid-action, watch the UI handle it
  • Browser back / forward / refresh on every multi-step flow

Defect Log Schema

For each issue, capture:

  • Where: staging URL, route, viewport size, user role
  • What I did: the exact click / type / submit sequence
  • What I expected: the user's reasonable expectation
  • What happened: the observed behavior
  • Console / Network evidence: errors, failed requests, stack traces
  • Screenshot: save to a known directory, reference by filename
  • Severity: Critical / High / Medium / Low / Cosmetic (see Calibration)
  • Confidence: Confirmed (reproduced twice) / Likely (seen once) / Speculative (suspected but couldn't reproduce)
  • Suspected cause: optional; only fill in if you read the code and saw the bug

UX Friction Log Schema (separate from defects)

A UX issue is when the app works as built but the design hurts the user:

  • Hidden affordance (button is hard to find)
  • Unclear copy (the user doesn't know what will happen if they click)
  • Missing feedback (the action succeeded but nothing said so)
  • Slow but technically working (long perceived latency)
  • Cluttered hierarchy (the eye doesn't know where to land)
  • Unexplained empty state
  • Inconsistent terminology between screens
  • Inconsistent visual treatment of the same control type
  • Inconsistent date / number / currency formatting
  • Repeated information the user has to confirm twice

For each: where, what's confusing, what a user would say out loud at that moment, suggested improvement.

Authentication and Authorization Walk Checklist

  • Sign in, snapshot the shell, sign out, verify session cleared
  • Visit an authenticated route while signed out — confirm redirect to login
  • Visit a route requiring a higher tier as a free user — confirm paywall
  • Visit a route requiring an admin role as a non-admin — confirm 403 / hidden
  • Try changing your own email; verify confirmation flow
  • Try changing your own password; verify forced re-login if that's the design

Empty and Edge State Checklist

  • New account with zero records — does every list view have a real empty state?
  • Lists with one record (singular vs plural copy)
  • Lists with ~100 records (pagination, virtualization)
  • Strings at boundary lengths (1-char, 280-char, multi-line)
  • Numbers at boundaries (0, negative, very large, decimal precision)
  • Dates: past, present, future, "just now," "a year ago"
  • Currency at boundaries ($0, $0.01, $999,999,999.99)
  • Network: offline behavior, slow 3G behavior, request timeout
  • Locale / timezone if the app deals with either

Privileged Flow Checklist

  • Admin dashboard if applicable: list operations, search, audit log views
  • Impersonation if present (and verify it logs the action)
  • Data export / import
  • Billing portal entry from in-app
  • Account deletion (don't actually delete the seeded user; verify the entry point, copy, and confirmation step)

Mobile and Responsive Checklist

  • Re-walk the top 5 flows at 375px width
  • Hamburger menu opens / closes
  • Tap targets >= 44x44
  • Text doesn't overflow containers
  • Modals are usable (not cut off at the bottom)
  • Forms work with mobile keyboards (input types correct)
  • Sticky elements don't cover content

Calibration

Don't log "the page has a console warning about deprecated React lifecycle in a node_modules dependency" as a defect; log it once as a tracking note. Don't log every CSS preference disagreement as a UX issue; the user has design taste and will tell you. Calibrate severity to user impact, not visual prominence: a silently-failing save is worse than a misaligned icon.

  • Severity:

    • Critical — Data loss, security exposure (cross-tenant view, missing auth gate), payment broken, signup or login broken, primary CRUD broken
    • High — Common flow has a confusing dead-end or unrecoverable error, console errors on the happy path, key CTA goes nowhere, accessibility blocker (focus trap, unlabeled critical control)
    • Medium — Empty state missing, loading state never resolves on edge case, validation message unclear, inconsistent terminology, dark mode broken on one page
    • Low — Cosmetic alignment, missing hover state, copy could be clearer, missing focus ring on a non-critical control
    • Cosmetic — Pure visual preference; surface only if you noticed multiple instances of the same pattern
  • Confidence ratings: Confirmed (reproduced in a fresh session twice), Likely (saw it once, plausible reproduction steps), Speculative (suspect a bug but couldn't reliably trigger).

  • Anti-hallucination guard: Do not claim a flow works because the route returned 200. The work is the click-through. Do not claim a button is dead because nothing visibly happened — check the network panel for the request, check the console for errors, refresh the source-of-truth view to see if state changed silently. When in doubt, repeat the step. If the staging build commit hash isn't in the page or a /api/health payload, capture what version you tested so the report is reproducible.

Output Format

Start with a 5–8 line executive summary: routes visited, flows completed, critical defects found, high-priority defects found, the single highest-leverage fix, the staging commit / build identifier you tested against.

  1. Environment & Credentials — Staging URL, build identifier, user accounts used, test data state
  2. Route Inventory — Every URL you visited, grouped by signed-out vs signed-in, with the entry point that took you there
  3. Per-Route Findings — For each route: defects, UX friction, accessibility issues, performance observations
  4. Flow Findings — For each logical flow: result (passed / partial / broken), defects encountered, friction logged
  5. Auth & Permission Findings — Sign-in, sign-out, tier gating, role gating, tenant isolation
  6. Empty & Edge State Findings — Where empty states are missing or weak
  7. Responsive Findings — Mobile / tablet / desktop discrepancies
  8. Cross-Cutting Findings — Patterns repeated across pages (e.g., "Save buttons across 4 settings pages all lack success feedback")
  9. Defect Log — Full table sorted by severity, then confidence
  10. UX Friction Log — Full table sorted by frequency (issues hit multiple times rank higher)
  11. Untested Surface — Pages or flows you couldn't reach (auth blocked, no test data, requires real payment) — flag for follow-up

Close with a Prioritized Fix List of the top 10 items by impact / effort ratio, ready to drop into a ticket tracker.

Need help applying this to a real product?

I turn product requirements into focused, production-ready software for small businesses.