How to tell if a website was made with v0

v0 sites run on Vercel, the same platform as a huge share of hand-built sites. That makes them harder to spot, but not impossible.

To tell if a website was made with v0, look for v0's own domains first, then for the defaults v0 writes into new projects. v0 is Vercel's AI app builder: you describe an interface, it writes a Next.js app with React, Tailwind CSS and shadcn/ui, and you can deploy it to Vercel in a click. That close tie to Vercel is what makes v0 sites tricky, because Vercel hosts a vast number of sites that people wrote by hand.

v0's own domains

These addresses come from v0 itself:

  • *.vusercontent.net: previews of v0 generations
  • *.v0.app and *.v0.build: apps published from v0

Either is strong evidence. If you see one, you can stop there.

A *.vercel.app address is different. It means the site is deployed on Vercel, which is where v0 sends projects, but also where countless hand-built Next.js projects live. On its own it is a weak hint.

Default metadata v0 writes

Open the page source (Ctrl+U, or Option+Command+U on a Mac) and look at the top of the document:

  • <meta name="generator" content="v0.app">: v0 names itself as the generator. Strong.
  • A description such as Created with v0 or Generated by v0. Strong.
  • A tab title of v0 App. Strong.
  • The text Built with v0 anywhere on the page. Strong.

Also watch for Next.js's own defaults, such as the description Generated by create next app or the title Create Next App. Those show a template nobody finished, but they come from Next.js, not v0, so they don't name a builder.

The stack: Next.js, Tailwind and shadcn/ui

v0 output is recognisable in the source. Next.js leaves paths under /_next/static/; shadcn/ui leaves class names such as text-muted-foreground and bg-card; and recent Next.js templates load Vercel's Geist font. A v0 site will usually show all three.

So will a large share of modern sites written by hand, especially by developers who use Vercel's tools. shadcn/ui itself is maintained at Vercel and widely used outside v0. That is why the stack is only supporting evidence. It can push a site from "no strong signs" toward "possibly vibe coded", but naming v0 needs one of the fingerprints above.

v0 sites on custom domains

Many v0 projects end up on a custom domain through Vercel. If the owner kept the default metadata, the generator tag or title will still give it away. If they changed it, what remains is a Next.js and shadcn/ui site on Vercel, which describes a lot of the modern web. The honest label then is "possibly vibe coded" at most, with no builder named.

Copy is a further hint. v0's first drafts come from a language model and use its favourite phrases; see the phrases that give away AI-written website copy. Like the stack, copy supports a finding rather than making one.

v0 compared with Lovable and Bolt

v0LovableBolt
FrameworkNext.jsVite + ReactUsually Vite + React
Own hostingvusercontent.net, v0.applovable.appbolt.host
Clearest tell on a custom domainGenerator taggptengineer.js scriptx-powered-by header

The framework is a useful way to rule builders out: a site with /_next/ paths is unlikely to be a default Lovable project. More detail is in our builder fingerprint guide.

Worked example: a dashboard on vercel.app

Take a made-up site, tidepool-dashboard.vercel.app, a small analytics dashboard someone shared on social media. The vercel.app address only says where it is hosted, so look further.

Step 1, the head of the source. Ctrl+U shows, near the top:

<title>v0 App</title>
<meta name="description" content="Created with v0"/>
<meta name="generator" content="v0.app"/>
<link rel="preload" href="/_next/static/media/e4af272c-s.p.woff2" as="font"/>

Three v0 fingerprints in four lines: the default title, the default description and the generator tag. Any one of them would be enough to name v0.

Step 2, the stack. Further down, the scripts load from /_next/static/chunks/ and the markup uses class names like bg-card text-card-foreground. That is Next.js with shadcn/ui, which is what v0 generates. It agrees with the fingerprints, but on its own it would prove nothing.

The verdict. Likely AI-built, builder v0, on the strength of the generator tag and the untouched defaults, with the stack as supporting evidence.

The same site, tidied up

Now imagine the owner finishes the job. They rename the title to Tidepool, write their own description, delete the generator tag and move to tidepool.example. What is left?

  • /_next/static/ paths: Next.js, used by a huge number of sites.
  • shadcn/ui class names: popular well beyond AI builders.
  • Vercel hosting: the default home for Next.js projects of every kind.

Nothing on that list is specific to v0. The fair reading is No strong AI signs or Possibly vibe coded if the copy is also full of stock phrases, and no builder named. This is the honest limit of detection: once the defaults are gone, a finished v0 project looks like any other well-made Next.js site, and a detector that claims otherwise is guessing.

Checking for v0 automatically

Kitsuvo checks v0's domains, its generator tag and its default titles on every page you open, and weighs the stack and copy as weaker signals. It names v0 only when it finds a fingerprint, and lists exactly what it found. It runs on your computer and is free.

Questions people ask

What is vusercontent.net?

It is the domain v0 uses to serve previews of the apps it generates. An address ending in vusercontent.net means the page came from v0.

Is every vercel.app site made with AI?

No. Vercel is a general hosting platform used by a great many developers who write their code by hand. A vercel.app address only tells you where the site is hosted.

Is v0 the same as v0.dev?

Yes. v0 launched at v0.dev and now also uses the v0.app domain. Both are Vercel's AI builder.