Authentication & access control
Session handling, JWT signature verification, route-level guards, ownership filters and cross-tenant isolation. This is a high-impact surface we test explicitly.
Cursor, v0, Lovable, Copilot or any other AI got you to a working product faster than felt possible. Now real users, production load or due diligence demand certainty about what's actually in the codebase. We read it the way a senior engineer would read it for an acquisition, name what's broken or risky, and tell you what to fix first.
Your AI built it. We make sure it won't break, leak, or get exploited.
AI coding tools ship surface-level features fast. They can also introduce subtle ownership-filter bugs, public Supabase tables, leaked service keys, hallucinated dependencies and unprotected API routes, confidently, in code that passes a casual review. These are plausible failure modes worth verifying before they surface under load, under external audit, or in an incident postmortem.
We read your codebase the way an engineer reading it for acquisition due diligence would: line by line, with the failure modes of your specific AI tool in mind. You get a severity-ordered written report, a live walkthrough, and 30 days of follow-up while you fix things.
Session handling, JWT signature verification, route-level guards, ownership filters and cross-tenant isolation. This is a high-impact surface we test explicitly.
Credentials in the repo or git history, server keys leaking into the client bundle, environment-variable hygiene and the boundary between public and private config.
Database access rules (Supabase RLS, Firebase rules), PII in logs, GDPR exposure, prompt-to-database flows and what happens when the AI is asked to write a query.
Lockfile hygiene, hallucinated or typosquatted packages, vulnerable transitive dependencies, package source and the npm install your AI ran without asking.
Prompt injection paths, system prompt exfiltration, missing rate limits on expensive model calls, content moderation gaps and the trust boundary around model output.
CORS configuration, error-handling surface, logging, rate limiting, deployment topology and what's exposed to the public internet that probably shouldn't be.
N+1 queries, runaway loops, runaway model spend, caching gaps and the operations that turn a $20 user into a $2,000 user overnight.
Observability, alerting, on-call surface, recovery paths and whether anyone will know when something breaks at 3am.
Less time on documents, proposals, research, reporting and client management.
See approach →Lead automation, viewings, documentation, incidents and multilingual communication.
See approach →24/7 support, multilingual replies, request handling, upselling and review analysis.
See approach →Quoting, sales support, forecasting, technical documentation and operational follow-up.
See approach →Every name, tool, path, account, response and effect in this catalogue is fictional or composite. It exists only to illustrate possible findings and must not be read as a real case, confirmed incident or client result.
In this fictional sample, the app gated every screen behind a login, but row-level security was disabled on three tables. The anon key, meant to be public, could read the full customer list from a browser.
In this fictional sample, a Supabase service_role key was inlined into the JavaScript bundle so the storage upload would work. Any visitor with DevTools could write arbitrary rows to any table the project owned.
In this fictional sample, the invoice detail endpoint accepted any id in the URL and returned the row. Two seeded accounts could read each other's invoices by changing a number.
In this fictional sample, the AI-suggested package did not exist in the first commit and later appeared as a lookalike name with a postinstall payload.
In this fictional sample, support-form text flowed untreated into the agent context. An adversarial input caused the agent to call an over-permissioned deletion tool.
30-minute intake call: which tool built it, which stack, what's in production, where the seams are. We confirm scope and sign anything you need signed.
Line-by-line read of every meaningful file. Automated tooling on top of the read, not instead of it. Runtime probing of public endpoints where applicable.
60-minute call covering the report, severity, fix order and the questions your team will have once they've read it.
Slack or email window for clarifications, fix reviews and a second look at anything you change. Re-audit at cost if the codebase shifts substantially.
We agree the scope and threat model before review. Manual evidence leads; automated tools support the review, but do not replace human judgement or justify a promise of absolute security.
Methodology reviewed:
Sessions, token signatures, route guards, account recovery and authorization decisions derived on the server rather than from client-controlled data.
Environment variables, git history, client bundles, logs and the boundaries between public, private and privileged keys.
Manipulable identifiers, ownership filters, RLS, storage and negative tests across two seeded tenants when the authorized environment permits it.
Lockfiles, package provenance and lifecycle, vulnerable versions, lookalike names, install scripts and consistency between source and deployment.
Boundary schemas, file uploads, SQL queries, commands, webhooks and outputs that reach HTML, logs or downstream systems.
Prompt injection, tool permissions, context exposure, treatment of untrusted output, usage limits and model-cost controls.
Headers, CORS, errors, logs, public exposure, runtime configuration, monitoring, backups and recovery paths visible within scope.
We inventory repositories, environments, sensitive data, roles, trust boundaries, exclusions and authorized tests.
We trace data and privileges through code, configuration, migrations and lockfiles; scanners contribute signals that we then verify.
In an authorized environment, we test controls with adversarial inputs, distinct roles and cross-tenant access without destructive activity outside scope.
Each finding includes reproducible evidence, contextual impact, priority, a proposed fix and concrete retest steps.
We review the report with the team and verify agreed fixes against the original case and a regression test.
Severity combines impact and likelihood in the agreed context; we do not simply copy a scanner score. Timelines are prioritization targets, not universal guarantees.
| Level | Criteria | Target response |
|---|---|---|
| Critical | Direct compromise of data, accounts or privileged control that is reproducible with few barriers. | Contain immediately; fix before launch or continued exposure. |
| High | Material impact with a credible exploitation path or a missing essential control. | Prioritize in the current cycle and add a temporary mitigation if still exposed. |
| Medium | Limited impact or exploitability, or risk that depends on several conditions. | Plan the fix and regression test in the next reasonable cycle. |
| Low | Hardening, minimal exposure or a defence-in-depth improvement. | Track and resolve alongside related maintenance. |
We use these public standards to structure coverage, name weaknesses and communicate severity. The agreed scope and system evidence still determine each conclusion.
This report is a synthetic composite. Names, code, paths, accounts, responses and metrics are invented solely to demonstrate the deliverable format; they do not represent a real audit or client result.
LedgerFox · Next.js and Supabase B2B SaaS
The sample assumes a read-only review and non-destructive testing in staging, agreed in advance with the system owner.
The invoice identifier comes from the URL and the query returns that row without binding it to the session tenant. The UI hides other tenants' invoices, but the control is absent from both the API and the sample database policy.
An authenticated user who obtains or guesses another identifier could read another company's invoices, totals and contact details. In this synthetic scenario, cross-customer confidentiality is broken.
The diagnosis fixes scope, assets, environments and permissions before any code is shared. If you already have that information, contact us directly.
Severity-ordered findings with file paths, line references, why it matters and a fix sketch. Readable by both engineering and non-technical stakeholders.
15-minute recording of the report, for the cofounder, investor or director who didn't make the live call.
Live discussion of severity, fix order and the calls that need a human in the loop.
Slack or email for clarifications, fix reviews and a second pair of eyes on the patches.
Typical SMB AI-built codebase, kickoff to written report. Larger or multi-repo audits scoped separately.
You shipped an MVP with v0 or Lovable. It works, users are signing up, and now you're about to flip on payments or move to a real database. You need someone who isn't you to confirm there isn't a hole.
You inherited a Cursor- or Copilot-built codebase from a contractor, an acqui-hire, or the founder's first six months. You need a defensible read of what you actually own before you start touching it.
You're about to hand an AI-built project to a client. You want a third-party sign-off on the security posture so the handover doesn't become an incident report two months later.
We work under NDA, on read-only access. We don't keep copies after the engagement closes, we don't train models on your code, and we don't subcontract.
Yes. We can sign yours, or send ours. Either way, before you share anything.
Both. The default engagement is audit-only to keep the review independent. If you'd rather we fix specific findings, we can scope a follow-on engagement.
Generic audits look for OWASP top-10 in handwritten code. We look for the specific patterns AI coding tools produce, leaked Supabase keys, missing RLS, hallucinated deps, prompt-injection surfaces, that a generic audit will miss because it doesn't know the tool's failure modes.
It helps but isn't required. We can usually tell from the code itself within the first hour. Knowing upfront just lets us focus the audit faster.
We'll still audit it, we have a regular code-review service. The AI angle is a wedge because it's where the volume of risk is right now, not the only thing we read.
Next.js, Remix, SvelteKit, React Native, Express, Fastify, Hono, Python (FastAPI, Flask, Django), Supabase, Firebase, Postgres, Vercel, Cloudflare, Hetzner. If your stack isn't on this list, ask.
Repetitive back-office workflows running unattended, with audit logs and human review.
Read more →Conversational, multi-step assistants for support, sales and internal knowledge.
Read more →Bespoke classifiers, extractors and scoring tailored to your data and domain.
Read more →Connecting AI to Salesforce, HubSpot, SAP, Holded, Odoo and the rest of your stack.
Read more →We design for privacy from the start, human control, traceability, usage limits, permissioning and documentation. For sensitive processes, we help assess risk and applicable obligations under GDPR and the EU AI Act.
Every engagement is led personally by one of the partners. If there's a fit, you get a personal first read of your case within one business day, not a canned demo.