Skip to contentLockpick
How it worksPricingDocs

Read

  • BlogPlain answers to common security questions
  • GuidesStep by step fixes for common setups
  • Security checksEvery check we run, explained

Learn

  • Learn with PickTwo-minute lessons on how sites get attacked
  • Lockpick for ClaudeCheck sites from Claude and other assistants
  • GlossaryThe words we use, in plain words

Company

  • ChangelogWhat changed, newest first
  • StatusWhether scans are running right now
  • Security and trustHow we check and what we never do
Sign inCheck it
Guides

v0 app security checklist for a live Next.js site

By Mark KashefPublished October 8, 2026

An app built with v0 is a Next.js app, so the main rule is the Next.js one. Anything with the NEXT_PUBLIC_ prefix is public, and everything else stays on the server. Atlas, our example app at atlas.example, shows how to check it.

Which variables reach the browser?

v0 says only variables prefixed with NEXT_PUBLIC_ are exposed to the browser. Next.js inlines a NEXT_PUBLIC_ value into any JavaScript sent to the browser. That makes the prefix a decision about publishing, not a naming style.

VariablePrefixWho can read it
Analytics site idNEXT_PUBLIC_Anyone who opens the site
Database publishable keyNEXT_PUBLIC_Anyone, so access rules must protect the data
AI provider or payment secret keynoneOnly your server code

v0 analyzes NEXT_PUBLIC_ usage and warns about potential security risks. Its own docs say never to expose sensitive tokens with the NEXT_PUBLIC_ prefix. If a secret ever had the prefix, assume it was published and replace it.

Curious what your site shows from outside? The quick check is free and needs no account.

Check it

Where should a call with a secret run?

In a Route Handler or a Server Action, never in a client component. The browser calls your route, and your route calls the provider with the key. The key never leaves the server.

How to check the live site

  1. Deploy the app and copy its production address.
  2. Run a quick check on your published address to see what a stranger sees, then read how we check for what it covers.
  3. Paste each fix prompt into v0, review the change and deploy again.

An outside check reads the scripts your live site serves, so it can spot a key that slipped into the bundle. It cannot read your Vercel project settings or your server code.

Questions people ask

Is every NEXT_PUBLIC_ variable a leak?

No. Many public values are meant to be public. It is a leak only when the value is a secret, like a payment or AI provider secret key.

Does renaming a variable remove it from a live site?

Only after you deploy again. The old value stays in the built files until a new build replaces them, so replace the key too.

See what your site shows from outside

A quick check reads your homepage the way a visitor would and gives you a score. No account needed.

Check your site

Related pages

  • API keys in your JavaScript bundle, how they get there and what to do
  • Your OpenAI or Anthropic key is in the browser. Now what?
  • Fix it with your AI, prompts for Lovable, Bolt, Replit, v0, Cursor and Claude Code

Sources

  1. How to use environment variables in Next.js Next.js docs, read on October 6, 2026
  2. Security v0 docs, read on October 6, 2026

About the author

Mark Kashef, Founder of Lockpick

I'm Mark, and I build Lockpick. I write these pages, and each one is checked against its sources before it goes live. The Updated date changes only when the page itself does.

Lockpick
PricingMethodologyDocsBlogGuidesSecurity checksLearn with PickSecurity and trustLockpick for ClaudeChangelogStatusFacts for AI assistants

Lockpick is a security scanner for vibe-coded apps. It checks what your live site exposes and what a GitHub repo or AI skill would do before you install it, then gives you a fix prompt for Lovable, Bolt, Replit, Cursor or Claude Code.

Lockpick assesses public pages you are authorized to test, and public GitHub code it never runs.

© 2026 LockpickTermsPrivacyContactSign in