Sample report for a synthetic demo app, not a client. Get this review for your app: US$790 fixed price โ†’ Next.js + Supabase review ยท Proofmerge home
ProofmergeA senior engineer reviews what your AI wrote.

Launch Security Check

Executive summary · security review of AI-built and AI-powered software
Prepared forDemo Client (sample data)
Applicationsample-app
Scan date2026-11-12
Review statusReviewed by Demo reviewer (illustrative decisions on planted sample data), 2026-11-12
Findings68 (15 critical, 39 high)
0of 100
Grade
F
Not ready to launch. Critical issues expose data, credentials or infrastructure.
Reviewed. Every finding in this summary was confirmed by Demo reviewer (illustrative decisions on planted sample data) (2026-11-12). 1 automated finding was dismissed as a false positive; the full report lists it.

1. Summary

We scanned sample-app (19 files, 396 lines) with LaunchCheck built-in checks, Gitleaks and Semgrep. After review, 68 findings remain open in 27 issue types (15 critical, 39 high, 11 medium and 3 low); 1 automated finding was dismissed as a false positive. Grade F, score 0/100: Not ready to launch. Critical issues expose data, credentials or infrastructure. The most urgent issues are Hardcoded API key or provider secret, LLM output passed to a dangerous sink and Secret exposed to the browser through a public env prefix; the table below lists the top findings with the first fix for each, and the fix plan gives the order of work.

15critical
39high
11medium
3low

2. Top 10 open findings

Most severe first, one row per issue type (further places of the same issue are counted under the location). Evidence, severity basis and the fix for every place are in the full report.

#SeverityFindingLocationFirst fix
1criticalHardcoded API key or provider secret.env:4+ 7 more placesRevoke and rotate the key now, then load it from a server-side environment variable or secret manager.
2criticalLLM output passed to a dangerous sinkagent-service/main.py:56+ 2 more placesNever execute model output: validate it against a schema, sandbox code, run SQL read-only.
3criticalSecret exposed to the browser through a public env prefix.env:4+ 1 more placeDrop the public prefix, use the secret only in server code, and rotate it.
4criticalTable created without Row Level Securitysupabase/migrations/0001_init.sql:12+ 1 more placeEnable Row Level Security on the table and add policies tied to auth.uid().
5criticalPrivate key committed to the repositoryagent-service/keys/jwt_signing.pem:1Generate a new key pair, retire the old one, and keep the private key in a secret manager.
6criticalSupabase service-role key used in frontend codelib/supabaseClient.ts:6Use the anon key in the browser; keep the service-role key on the server and rotate it.
7highFastAPI/Flask endpoint with no authentication checkagent-service/main.py:44+ 3 more placesRequire a signed-in user: Depends(get_current_user) in FastAPI, @login_required in Flask.
8highAgent tool with unrestricted shell, file or network accessagent-service/main.py:25+ 3 more placesRestrict the tool: fixed commands, one folder, allowlisted hosts, approval for destructive actions.
9highOver-broad MCP server or agent permission.mcp.json:3+ 3 more placesLimit MCP servers to the project folder, pin their versions, and keep approval prompts on.
10highHardcoded password, token or signing secret.env:10+ 3 more placesMove the value to a server-side environment variable or secret manager and rotate it.

58 other open findings not shown here; the full report lists all 68.

3. Fix plan

  1. First1

    Secrets 16 findings · 10 critical, 6 high

    Rotate every exposed credential at its provider (assume it is compromised), move secrets to server-side environment variables or a secret manager, and remove them from git history.

    Hardcoded API key or provider secret (8); Hardcoded password, token or signing secret (4); Secret exposed to the browser through a public env prefix (2); Private key committed to the repository (1); Environment file (.env) is in the repository and not git-ignored (1)
  2. Second2

    Supabase 4 findings · 3 critical, 1 high

    Enable Row Level Security on every table, replace policies that let everyone through with ownership checks, and keep the service-role key out of the browser.

    Table created without Row Level Security (2); Supabase service-role key used in frontend code (1); Row Level Security policy allows everyone (USING true) (1)
  3. Third3

    LLM and agents 18 findings · 2 critical, 13 high, 2 medium, 1 low

    Stop executing model output, keep user text out of the system prompt, cap tokens per call, and cut agent tools and MCP servers down to what they need.

    Agent tool with unrestricted shell, file or network access (4); Over-broad MCP server or agent permission (4); LLM output passed to a dangerous sink (3); Plaintext credential in MCP / agent configuration (3); User input placed directly into the system prompt (2); LLM call without an output-length or cost limit (2)
  4. Then4

    Access control 9 findings · 9 high

    Put an authentication check on every API route, then check that the signed-in user may touch the specific record.

    FastAPI/Flask endpoint with no authentication check (4); Next.js API route with no authentication check (3); Express route with no authentication middleware (2)
  5. Then5

    Injection 8 findings · 7 high, 1 medium

    Use parameterised SQL, remove eval/exec, run commands without a shell, and render user content as text.

    SQL query built by string concatenation (3); Shell command built from variable input (3); Dynamic code execution (eval / exec) (1); Raw HTML rendering (dangerouslySetInnerHTML / innerHTML) (1)
  6. Then6

    Dependencies 5 findings · 2 high, 1 medium, 2 low

    Commit a lockfile, pin versions, and remove any package on the known-bad list.

    Package name on the known-bad / typosquat sample list (2); Unpinned dependency versions (2); No dependency lockfile (1)
  7. Then7

    Configuration 8 findings · 1 high, 7 medium

    Restrict CORS to your own domains, switch debug off, and rate-limit login and LLM endpoints.

    Permissive CORS configuration (3); No rate limiting on login or LLM endpoint (3); Debug mode enabled (2)

After the fixes: re-run the scan to confirm each finding is gone, and rotate credentials before the next deployment, not after.

4. Scope and limitations

In scope: a static review of the source tree sample-app as provided on 2026-11-12: 19 text files, 396 lines. This is not a penetration test: the running application, its hosting, cloud accounts, DNS and network were not tested.

Scanners that ran: LaunchCheck built-in checks 0.1.0, Gitleaks 8.21.2 and Semgrep 1.185.0. Did not run: Trivy (fs) (skipped: not installed on the scanning machine for this run; nothing was checked by it).

Not covered

5. The full report

This summary shows 10 findings of 68 open findings. The full report holds every finding with its evidence, severity basis, the scanners that reported it and the fix for each place, plus the scoring method, the checks that ran and the findings dismissed in review.