Skip to content
Shpatik.
AI code· · 5 min read

How to Tell Which AI Tool Built Your App

If someone hands you an app and the honest answer to "how was this built" is "AI built most of it," that sentence is doing too much work. It could mean three very different things, and each one leaves a different kind of mess behind. You don't have to take anyone's word for which one it was, either — the codebase itself tells you, if you know where to look.

A founder who typed prompts into Lovable and got a live app with logins and a database has a different problem than a founder who typed prompts into v0 and got a beautiful screen. Both have a different problem than a founder whose developer has spent a long stretch of time accepting Cursor's suggestions. For the full taxonomy of what each tool actually generates, see AI app builders compared. This post is about the narrower, more practical question: given a project in front of you, how do you tell which one it is?

The three categories, in one line each

Full-stack builders (Lovable, Bolt, Replit) generate a working front end and backend together — the risk hides in the backend: auth, data rules, and whether it survives real traffic. UI generators (v0) generate only the front end — the risk isn't a weak backend, it's no backend at all behind a finished-looking screen. AI-assisted IDEs (Cursor) put a developer in the loop, suggestion by suggestion — the risk is architectural drift: many individually reasonable choices that never add up to a coherent design.

Which category are you actually in?

You can usually tell from the file structure alone, before reading a line of application logic.

  • A supabase/ directory, or NEXT_PUBLIC_SUPABASE_URL in your env file, with auth and data calls going straight from the front end to Supabase's client SDK — that's Lovable.
  • A .bolt/ folder, or config referencing WebContainers, with the whole stack — front end, backend, sometimes a database file — built to run inside a single browser tab — that's Bolt.
  • A .replit file or replit.nix at the project root, with hosting and environment variables tied to Replit's own dashboard rather than a cloud account you provisioned — that's Replit.
  • A components/ui/ tree that's pure shadcn/ui, hardcoded arrays standing in for data, no /api routes, and no database client anywhere — that's v0. The giveaway is what's missing, not what's there.
  • A .cursorrules file or .cursor/rules/ directory, alongside a real git history with incremental commits from a human author — that's Cursor. A person was driving; the codebase just accumulated drift along the way.

Some projects are a mix — a v0 screen dropped into a Lovable backend, a Bolt prototype later handed to a developer working in Cursor. When that happens, trace which layer came from which category, because the risk profile changes layer by layer, not project by project.

What the category implies for the fix

Full-stack builder: the work centers on the backend — locking down data access and confirming auth is enforced server-side, not just hidden in the interface.

UI generator: the work centers on building what doesn't exist yet — a real data model, real authentication, and business logic that fits the interface already designed.

AI-assisted IDE: the work centers on structure — finding the riskiest, most duplicated pieces and pulling them into one place, plus the tests that let a team change code without guessing.

For what each tool is actually optimizing for, and a fuller comparison across all five, see AI app builders compared.

Key takeaways

  • The file structure tells you which category built an app faster and more reliably than asking whoever handed it to you.
  • Full-stack builders (Lovable, Bolt, Replit) hide their risk in a backend that looks finished but may not be locked down.
  • UI generators (v0) hide the fact there's no backend at all behind a polished screen.
  • AI-assisted IDEs (Cursor) put a developer in the loop, but risk architectural drift across a growing codebase.
  • Knowing your category tells you where to look first, before you spend money guessing.

A calm next step

If you're not sure which category your project falls into, or you know exactly which tool you used and just want an honest read on what it left behind, that's a normal starting point, not a failure. We work across all five: see how we approach each one on our fix-by-tool page, including Lovable, Bolt, v0, Cursor, and Replit. Start with a free written first read, or read more about how we work at how we work and get in touch with what you built and what worries you.

Tell us what's broken.

By sending this you agree to our Privacy Policy. We use it to reply and follow up about your enquiry — never for third-party marketing.

Recognize the problem?

If any of this sounds like your project, let's talk.

A free written first read and a clear next step. No obligation.

Not ready yet? See a sample report or .

  • Own your code, always
  • NDA on request
  • First read is free, no strings