Blog Platform fingerprints
Every AI builder leaves a fingerprint. Here's where each one hides.
Lovable, v0, Bolt, Replit and Base44 all sign their work, none of them on purpose. What each one leaves in the markup, which artefacts survive a migration, and why an asset host is not a confession.

Nobody ships a page meaning to announce which tool built it. It happens anyway, because a builder has to put its runtime somewhere, serve its images from somewhere, and name its data attributes something. Those decisions outlive the export, the custom domain, and usually the person who did the exporting.
The stack detectors on this site look for exactly that residue. They are the heaviest category in the whole set, and they're also the one where being wrong is most embarrassing, so they're the ones with the strictest rules about what counts.
The distinction that does all the work
There are two very different things a page can contain: an artefact the builder wrote, and an association with the builder's brand. Only the first one means anything.
Lovable is the clearest example, because its detector splits down the middle. Find lovableproject.com, a data-lovable attribute, lovable-tagger, or a /__l5e/ path, and the page carries a build artefact: nobody types those by hand, and the detector sets a score floor of 82 that the rest of the page is not allowed to argue below. Find a bare lovable.dev asset host and you get the same 24-point weight but no floor at all, because loading an image from lovable.dev is also exactly what linking to the product looks like. lovable.dev's own marketing site is in our worked examples and scores 21 out of 100, which is the correct answer for a company that writes about its own product.
A page that writes about v0 is not built by v0, and a customer logo named lovable.svg is not a fingerprint.
That's why every stack detector reads from what the code calls the machine surface: asset hosts, meta tags, HTML comments, data attributes. The visible copy is off limits. It has to be, or the scanner convicts every blog post ever written about these tools, including this one.
What each builder actually leaves behind
- GPT Engineer, 30 points, floor 82: gpteng.co or gptengineer.js. This is the runtime underneath Lovable, and it's the heaviest single tell in the set. An injected builder script still shipping to production settles the question by itself.
- The builder's badge, 28 points, floor 82: a short label wired back to the builder's own domain. The detector wants the link, not just the words, because "built with Lovable" inside a paragraph is a sentence and "Built with Lovable" as an anchor's whole text is a badge.
- Lovable, 24 points: lovableproject.com, data-lovable, lovable-tagger, /__l5e/ for the artefact form; lovable.dev or lovable.app as a bare asset host for the weak form.
- Base44, 24 points, floor 82: base44.app, base44.com, or an @base44/sdk import. The SDK talking to Base44's backend straight from the browser.
- v0, 22 points: v0.dev or v0.app on the asset surface. Note that Vercel owns v0, so vercel.com trips this one legitimately.
- Lovable upload paths, 22 points, floor 82: /lovable-uploads/. These are the ones that survive a migration, because people move the domain and never re-upload the images.
- Bolt and StackBlitz, 18 points: bolt.new, stackblitz, or webcontainer artifacts.
- Replit, 14 points: replit.com, repl.co, or a replit-badge.
The tells that aren't about any one builder
Some of the heaviest stack signals name no vendor at all. An untouched scaffold title is worth 26 points, because a page still called "Vite + React + TS" in production tells you nothing was reviewed. The Tailwind Play CDN in production is 24 points: the browser compiling Tailwind at runtime is a development convenience that nobody ships on purpose twice. Still being served from a platform subdomain like *.vercel.app or *.lovable.app is 14 points, meaning no custom domain was ever attached.
Then there are the house tools. shadcn/ui class signatures and the Lucide icon set are 12 points each, and both are perfectly good choices that thousands of hand-built sites use deliberately. They're light for that reason. They tell you which shelf the parts came off, not who assembled them.
The builders can't pass their own test
The most useful thing about running this over the tools themselves is how differently they score. base44.com lands at 82 out of 100, the highest in our entire worked-example set. v0.app comes in at 37. bolt.new sits at 15, replit.com at 9, and lovable.dev at 21. Five companies in the same business, and the spread between them is wider than the spread between Craigslist and Stripe.
That's not a moral ranking. It mostly measures how much of their own product each company pointed at their own marketing page, which is a choice with real tradeoffs and not obviously the wrong one.
If you're cleaning up after a migration
- Search your built output for the artefact strings above, not just the brand names. data-lovable, /__l5e/, gpteng.co, webcontainer, and @base44/sdk are the ones that carry score floors.
- Re-upload your images. /lovable-uploads/ paths are the single most common thing to survive a domain move, because moving the domain doesn't move the assets.
- Check your <title> and your generator meta tag. Both are one-line fixes that nobody remembers to make.
- If you're still on a platform subdomain, attach the custom domain. It's the cheapest signal on this list to clear.
- Leaving shadcn and Lucide in place is fine. They're 12 points each and they're genuinely good libraries. Clearing them is the last thing to worry about, not the first.
Checking whether your own page does this takes one paste, not a manual audit.
Scan a page for this signal →