[Audit]

AI-Generated Code and Vibe Coding Security Audit

Your app was written mostly by AI, in Cursor or Claude Code or in a builder like Lovable, Bolt, Replit or Base44, and it works. DreamLabs reads it the way a security reviewer or an acquirer would, proves every finding with a reproduction, and fixes what matters. Start with a free surface check; the full audit runs as a two-week strategy sprint for a flat $4,000, refunded in full if we don't move forward together.

Book a code audit

[Why it matters]

Ship AI-written code you can vouch for

Two kinds of teams end up here. Some have engineers and a repository written mostly by Claude Code, Cursor or Copilot. Others built the product in Lovable, Bolt, Replit or Base44 with no engineer at all. Either way you shipped faster than you could any other way, and that was the right call. It is how our own team works: Grove, which moves real money through Plaid and Stripe, was built with Claude Code as part of our workflow.

AI-written code is good at running. What it often does poorly compounds quietly: it repeats itself instead of abstracting, invents a second way to do what the codebase already does, writes tests that restate the implementation, validates input in the browser, and handles the path the prompt described and no other. Veracode's 2025 GenAI Code Security Report found AI-generated code introduced risky security flaws in 45% of tests. The builders are candid about it too: Lovable says its scans do not replace a thorough security review, and Replit's shared-responsibility model says you own the code Agent generates and you're responsible for it.

Security is where it shows first, and the cause is structural. A code generator optimizes for one thing: the feature works. A database rule that blocks the feature looks exactly like a bug, so it gets loosened until the screen loads again. A missing permission rule doesn't throw an error either. The owner signs in, sees their own data, and everything looks right, because the flaw only exists between two different accounts.

The clearest example is putting a separate authentication library in front of Supabase. Users now sign in through that library, so the database never sees a Supabase token, and as Supabase documents, a policy that matches no rows returns an empty result rather than an error. To whoever is building it the app has simply broken, and the fastest way to get it working is to switch off row-level security or use the secret key, which bypasses every policy. The app works again, and it is now readable by anyone. The right fix exists: Supabase can trust tokens from Clerk, Firebase Auth, Auth0, Cognito and WorkOS directly.

The trigger for an audit is often external: an enterprise customer's security questionnaire, an investor's technical diligence, a new engineer who needs weeks to find their way around, or an incident nobody can scope with confidence. Any of those is the moment to have someone read the whole thing with fresh eyes. If the trigger is a developer who has gone quiet, our app takeover guide covers what to secure in the first 72 hours.

When you don't need us yet

If you're pre-launch with test data, start with what's free: your builder's own scan (Lovable runs one on every publish, and Bolt's audit sits in its Publish menu), then our Supabase RLS checklist or Firestore Security Rules checklist, where every check comes with a test and an official source. Bring us in when real users, real money or a reviewer's questions arrive.

[How it works]

The audit, step by step

[01]

The Free Surface Check

We start with what we can see without any access: what your published app exposes to an ordinary visitor, what is sitting in your client bundle, and whether the obvious data paths are open. You get those findings whether or not you hire us, because a critical exposure is not something to hold hostage to a proposal, and because it is the fastest way for you to judge whether we know what we are talking about.

[02]

Read the Whole Thing

The full audit runs as our two-week strategy sprint: a flat $4,000, refunded in full if we don't move forward together. With read access, senior engineers go through the repository, the infrastructure configuration and the running product side by side: every table and its policies, every function and its authentication, storage rules, key exposure, payment flows and dependency risk, because generated code can claim behavior the deployment doesn't have. We work read-only against a commit, so your team keeps shipping.

[03]

Verify Every Finding

Findings get tested, not asserted. Every security issue we report comes with a reproduction (the account, the request, the response), so nobody has to take our word for it and nobody wastes a sprint chasing something theoretical. This is also the stage that separates the genuinely dangerous from the merely untidy.

[04]

Report, Prioritize and Scope

Each finding is scored by severity, blast radius and effort to fix, then split into what to fix this week, what belongs in this quarter, and what is fine to leave alone. You get a sequence you can act on, plus the scope we would quote the fixes from, rather than a list of everything that could be better.

[05]

Close the Criticals, or Hand It Over

You can take the report and do the work yourselves, which is a completely legitimate outcome and one we write the report for. Or you can have the criticals closed by the people who found them, sequenced by what is actually reachable, with policies rewritten against an explicit model of who is allowed to see what.

[06]

Keep It Closed

Fixes that nothing enforces come undone on the next prompt. So we leave behind tests that fail when a rule regresses, CI checks that run them, and a written permission model your team can extend rather than work out again.

[What you get]

A report you can act on this week

The deliverable is a written report, not a scanner dump: every finding with its reproduction and what fixing it involves, in priority order. It is written so an engineer can act on it and a non-engineer can understand what is at stake, because the person who commissioned it (a founder, a board, a customer's security team) is often not the person who will fix it.

If we close the criticals, every rule that protects your data ends up enforced on a server where users can't reach around it, each covered by a test that tries to break it. Privileged keys are out of the browser and rotated. Functions authenticate their callers. Your permission model exists as something written down and testable rather than an assumption spread across generated files.

We build production apps with AI ourselves, which is how we know where to look. Grove moves real money through bank linking, ACH transfers and wallet payments, and we designed its money flow to keep as little data as possible: Grove never touches members' bank accounts or card numbers. UNALTERED puts OpenAI and Gemini in front of real users on both app stores, generating meal and workout ideas, with points that redeem for products.

You also get an honest verdict: whether hardening is enough, or whether the app needs a deeper rebuild. Either way, you will have the evidence to make that call instead of guessing.

React & React Native App DevelopmentFlutter App DevelopmentOur offerings & pricing

[Case studies]Expertise from experience

Grove

Grove

Climate fintech round-up app

UNALTERED

UNALTERED

AI-powered fitness app

[Platform guides]

All migrations LovableBoltReplitRork, Vibecode, Adalo & Glide

Migrating off FlutterFlow, Bubble, Webflow, or Airtable instead? See no-code migration →

[FAQs]

Frequently asked questions

How do I check my own app right now, before talking to anyone?

Do the two-account test. Sign in with a second account and change the ID in a request so it points at the first account's record. If it loads, any signed-in user can likely read other users' records. Then open your app in a browser, look at the network tab, and search your JavaScript bundle for anything named service, secret or admin. For a full pass, our free Supabase RLS checklist and Firestore Security Rules checklist give you a test for every item.

Our builder already scans for security issues. Isn't that enough?

Run those scans, because they catch real problems: Lovable scans on every publish and offers a deeper code scan, and Bolt has a security audit in its Publish menu. They are automated passes over the project as it stands. Lovable itself says its scans do not replace a thorough security review and suggests a professional one for apps handling sensitive data. An audit adds a written permission model for your product, a reproduction for each finding, tests that prove each rule holds, and a check that what is deployed matches the code.

How is this different from a penetration test?

A pentest probes the running system from the outside and tells you what an attacker can reach today. An audit reads the code, the configuration and the infrastructure, which surfaces things a pentest structurally can't: the authorization check that exists on one endpoint and not its sibling, the migration that never ran in production, the dependency with a known advisory. They are complementary, and if you need both we will say so.

We used Cursor and Claude Code, not a no-code builder. Does this still apply?

That is exactly who this is for. Agent-written repositories are real engineering with real velocity behind them, and their failure modes are specific rather than catastrophic: duplication instead of abstraction, tests that assert the implementation, validation in the wrong layer, and many small confident decisions nobody reviewed at the speed they arrived. It just hasn't been read end to end by someone whose job was to read it.

We have no engineers on the team. Can you just fix it?

Yes. That is likely your situation if you built in Lovable, Bolt, Replit or Base44. You don't need to understand row-level security to have it done correctly; you need someone to close what is open, rotate what has been exposed, and leave behind tests that keep it that way. We report findings in plain language, tell you what each would mean if it were exploited, and do the work.

Will you tell us to rewrite everything?

Only if the arithmetic says so, and we'd rather tell you that up front than have you brace for it. An AI-built app can have a foundation sound enough to keep building on, and the report's job is to show which kind you have. A rebuild recommendation has to earn itself: we weigh what maintaining this costs per quarter against what replacing it costs once, and if the numbers don't support a rebuild, we will tell you the codebase is fine.

Can we keep shipping while the audit runs?

Yes. We work read-only against a commit, and your team keeps merging. If something significant lands mid-audit, we fold it in. The only thing we ask for is a short conversation with whoever knows the system best, because a little context from them saves a lot of guesswork.

Will you disclose what you find?

No. Findings are yours, we work under an NDA if you want one, and nothing about your app appears in our marketing without your written permission. If we find something that affects other users of a platform rather than just you, we will tell you first and agree on how to raise it with the vendor.

How long does it take and what does it cost?

The surface check is free. The full audit runs as our two-week strategy sprint for a flat $4,000, refunded in full if we don't move forward together. Fixes are quoted separately from the report's scope, so you never pay to fix problems that turned out not to exist. If the report does point to a rebuild, most builds take about 6 weeks, at a fraction of the cost of a traditional agency.

[Interested?]

Know exactly what you shipped

Book a code audit