v0 turns a prompt into a real Next.js app on Vercel — but it doesn't decide who's allowed to see your data. Six things to check before you ship, starting with the one Next.js setting that quietly puts keys in the browser.
If you turned a prompt into a working app with v0, the hard creative part is done. This isn't about v0 being unsafe — its docs describe it as "an AI-powered development platform for building production-ready applications from natural-language prompts," built on "modern tools like Next.js, Tailwind, shadcn/ui, and more." Because it generates a Next.js app and deploys it on Vercel, most of these checks are Vercel and database settings. What no tool reliably does for you is decide who's allowed to see what — so here are six things to confirm before you ship, with where each one lives. Facts here were read on v0's own docs and Vercel's docs on 26 Sep 2026.
Six checks before you ship — most are settings, not code. · Illustration made in Higgsfield with the GPT Image model
One person can't see, change or delete another person's data
Nothing secret is behind a NEXT_PUBLIC_ variable — that prefix ships to the browser
API keys live in Vercel's environment variables, not hardcoded
There's a limit on how fast one account can sign up or call your AI features
The database you attached is backed up and you know how you'd restore it
You've reviewed what v0 built, not trusted the first version
1. Make sure people can't reach each other's data
The mistake behind the biggest vibe-coded exposures is a database that lets anyone read or edit rows that aren't theirs. v0's docs say you "Build full-stack applications with v0's database integrations" — so you attach a database (Supabase, Neon or another), and the rule that stops people reading each other's rows is yours to confirm. On a Postgres database like Supabase or Neon, that rule is Row Level Security (RLS): a policy on each table for which rows each person may see. The check is to confirm every table has one, in that database's dashboard. The concept is in Row Level Security explained, a correct policy is in write the RLS policy for my users table, and the incident that proves it is the Moltbook exposure. If "server" and "database" are fuzzy, start with what a backend actually is.
2. Keep secret keys out of the browser — mind the NEXT_PUBLIC_ trap
Anything your app sends to the browser, anyone can read. Because v0 builds a Next.js app, this comes down to one naming rule that Vercel's docs state plainly: "Frameworks typically use a prefix to expose environment variables to the browser." For Next.js, that prefix is NEXT_PUBLIC_ — any variable named that way is bundled into the page and visible to anyone who opens their browser's developer tools. So the check is simple but crucial: nothing sensitive — no database service key, no third-party secret — may sit behind a NEXT_PUBLIC_ name. Those are for values that are safe to be public (like a project URL). The view-source reality is in your API keys are in the browser.
3. Put keys in Vercel's environment variables
Your secret keys belong in Vercel's environment variables (Project → Settings → Environment Variables), read by your app's server-side code — not hardcoded, and not given a NEXT_PUBLIC_ name. The practical rule: a value the browser needs (safe, public) can carry the prefix; a value that must stay secret must not. What environment variables are, and why the .env file must never be committed, is in environment variables and secrets, explained.
4. Put a limit on sign-ups and AI calls
A rate limit caps how often one person or script can do something; without it, a single loop can create thousands of accounts or burn your AI budget in a night. Neither v0 nor a plain Vercel deployment adds a per-endpoint rate limit for you, so treat this as "check your project": ask v0 to add rate limiting to sign-up and to any endpoint that calls a paid AI model, then confirm what happens if one account sends a thousand requests a minute. Why every public endpoint needs one is in what is rate limiting.
5. Back up the database you attached
A bad change or a wrong prompt can delete data, and "undo" isn't a backup. v0 stores your data in whatever database you connected, so what's retained and how far back you can restore depends on that database's plan — check your project rather than assume. Find its backup settings, confirm they're on, and once, confirm you could restore. Why this matters, including an AI agent that deleted a live database, is in backups, and losing everything.
6. Review what v0 built — don't trust the first answer
v0 writes a lot of code quickly, and the first version is a draft, not a verdict. After the Moltbook exposure, Wiz's researchers wrote that "today's AI tools don't yet reason about security posture or access controls on a developer's behalf." The habit that catches the rest is to make the model check its own work: after it builds an auth or data feature, ask it to find ways one user could reach another's data, name any table without a policy, and flag any secret sitting behind a NEXT_PUBLIC_ name. That generate-then-attack loop is in the verify loop. For the tool-agnostic version of all six, see the 6 checks before you share a vibe-coded app.
Quick answers
What is the NEXT_PUBLIC_ trap in a v0 app?
v0 builds a Next.js app, and Vercel's docs note frameworks "use a prefix to expose environment variables to the browser." For Next.js that prefix is NEXT_PUBLIC_, so any variable named that way is bundled into the page and readable by anyone. Never put a secret key behind it.
Where do I store secret keys for a v0 app?
In Vercel's environment variables (Project Settings), without the NEXT_PUBLIC_ prefix so they stay server-side. Only values that are safe to be public — like a project URL — should carry that prefix.
Does v0 handle security for me?
v0 generates a real, production-oriented Next.js app, but it doesn't decide who can see whose data, add rate limits, or back up your database — those live in your database and Vercel settings and are yours to confirm.
Do I need to read code for these checks?
Mostly no. Access rules and backups are dashboard checks; keys are a naming rule in Vercel's settings; rate limits and the review are things you ask v0 for and then confirm. If the answers don't make sense, that's when to bring in a developer.
This page has no affiliate links or sponsored placements. Security advice is only useful if nobody's paying for it. It isn't a substitute for a security review: if your app holds other people's personal data, payments or health information, have a developer or a security professional look at it before launch.