Tables without RLS
A table created in a migration without enable row level security is readable and writable by anyone holding the public anon key, which ships in your frontend.
Next.js + Supabase security review
AI coding tools ship working features fast and skip the parts nobody sees: Row Level Security, server-side session checks, where secrets end up. The Launch Security Check reviews exactly those parts before you launch or start charging, and every finding is confirmed by a senior engineer before it reaches you.
What goes wrong
Each of these passes a demo and a manual click-through. Each lets a stranger read or change data that is not theirs.
A table created in a migration without enable row level security is readable and writable by anyone holding the public anon key, which ships in your frontend.
using (true) turns RLS on and leaves it open. The fix ties each policy to auth.uid() or to team membership.
The service-role key bypasses RLS entirely. In a client component or a NEXT_PUBLIC_ variable, it hands every visitor full database access.
API routes and server actions are public endpoints. A middleware matcher that covers only /dashboard leaves /api open.
An export or invoice route that takes a record ID but never checks that the signed-in user owns it (IDOR). Pattern scanners miss this; the manual review looks for it.
A key deleted from the code is still in an earlier commit. The review scans the full history, not only the current files.
What the review covers
Automated checks cover the whole codebase quickly. The manual pass covers authorization logic, which no pattern can judge.
See the sample report from a demo app →How it works
One email or a 15-minute call to confirm the app fits the fixed price. Larger apps get a fixed quote in writing first.
You authorize the review in writing and grant read-only access to the repository. No production data, no live keys.
Automated checks, then a senior engineer traces auth and data access, confirms what is real and ranks it.
Every finding with location, impact and a Next.js or Supabase fix, an executive summary, and a 30-minute call.
The report is due within two business days of confirmed scope, agreed payment arrangements and complete access. Payment terms are agreed in writing before work starts.
The report
The sample report comes from a demo app (Next.js, Supabase and a Python agent service) with planted issues, including tables without Row Level Security, a service-role key in frontend code and Next.js API routes without an authentication check. It contains no client data.
Full sample report →Scope, plainly
We review code and configuration with the access you grant. We do not attack running systems or touch production.
Dashboard settings (auth providers, redirect URLs, Storage buckets) are reviewed when you share them or grant read access; otherwise the report says they were not checked.
No SOC 2 report or audit opinion. A clean report means nothing was found in the agreed scope, not that the app is secure.
FAQ
No. The review reads the code and configuration the tool produced. Tell us which tool you used, because some generate the same patterns repeatedly, and it helps the scoping. What we check in Lovable, Bolt and Cursor apps.
Roughly one application with a handful of routes and integrations. If yours is larger or has several services, you get a fixed quote in writing before anything starts.
No. Read-only access to the repository is enough. Never send live keys or customer data by email.
Basic LLM risks (prompt construction, unbounded calls, model output reaching dangerous sinks) are part of the automated checks. Agents with tools and MCP servers are covered by the AI Agent & LLM Security Sprint, quoted separately.
Start with one short request
The stack, the rough size and when you launch. You get a scope, a fixed price and a start date back by email, usually within one business day. Please do not send code or credentials yet.
Prefer email? Write to hello@proofmerge.com · Back to all services
This site uses no tracking or advertising cookies. We only remember that you closed this notice. Cookie details