<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Manveer</title>
    <description>The latest articles on DEV Community by Manveer (@manveer-banxal).</description>
    <link>https://dev.to/manveer-banxal</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4155662%2F31f5756f-d8b4-4d50-bc45-c774ea5a72b6.png</url>
      <title>DEV Community: Manveer</title>
      <link>https://dev.to/manveer-banxal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/manveer-banxal"/>
    <language>en</language>
    <item>
      <title>Hand Off a Lovable or Bolt App to a Developer: Prep Guide</title>
      <dc:creator>Manveer</dc:creator>
      <pubDate>Thu, 01 Oct 2026 21:14:32 +0000</pubDate>
      <link>https://dev.to/manveer-banxal/hand-off-a-lovable-or-bolt-app-to-a-developer-prep-guide-2b9a</link>
      <guid>https://dev.to/manveer-banxal/hand-off-a-lovable-or-bolt-app-to-a-developer-prep-guide-2b9a</guid>
      <description>&lt;p&gt;You built the app in Lovable or Bolt. Now you've found a developer or agency to take it further, and their first message is: "Can you send me access?"&lt;/p&gt;

&lt;p&gt;Before you reply, work out what "access" means. A Lovable or Bolt app lives in several places: the builder, a GitHub repo, a database, a secrets store, a domain, plus payment and email accounts. Hand off a Lovable app to a developer without mapping those, and either they spend their first paid days finding your setup, or you hand over keys you can't take back.&lt;/p&gt;

&lt;p&gt;This guide covers the founder's side: what to export, lock down and write down before a developer opens the repo.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Give access, keep ownership.&lt;/strong&gt; Invite the developer into your GitHub, database and hosting accounts. Don't transfer the accounts themselves unless you're selling the app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find your backend first.&lt;/strong&gt; Lovable Cloud, your own Supabase project and Bolt Database each hand off differently. Neither builder offers a one-click way to move off its built-in database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets don't travel with the code.&lt;/strong&gt; Lovable secrets are write-only and never sync to GitHub. Make a list of every key, share the keys safely and rotate any that have been pasted into chats.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why handoff prep matters
&lt;/h2&gt;

&lt;p&gt;Developers bill for discovery: an hour spent asking "which Supabase project is production?" costs the same as an hour building features.&lt;/p&gt;

&lt;p&gt;There's a security reason too: Lovable's own guidance says "secrets stored in frontend code are visible to users and should be considered compromised" (&lt;a href="https://docs.lovable.dev/tips-tricks/avoiding-security-pitfalls" rel="noopener noreferrer"&gt;Lovable security best practices&lt;/a&gt;) — a key pasted into a prompt, Slack thread or freelancer email counts the same way.&lt;/p&gt;

&lt;h2&gt;
  
  
  What moves automatically vs what you must export
&lt;/h2&gt;

&lt;p&gt;The biggest variable is where your data lives — find out first.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lovable Cloud.&lt;/strong&gt; This is Lovable's built-in backend, "built on Supabase's open-source foundation" (&lt;a href="https://docs.lovable.dev/integrations/cloud" rel="noopener noreferrer"&gt;Lovable Cloud docs&lt;/a&gt;). You manage it inside Lovable. We found no documented way to give an outside developer direct access to the dashboard underneath it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your own Supabase project connected to Lovable.&lt;/strong&gt; Lovable says this route gives you "your own Supabase account and billing, full access to the Supabase dashboard" (&lt;a href="https://docs.lovable.dev/integrations/supabase" rel="noopener noreferrer"&gt;Lovable Supabase docs&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bolt Database.&lt;/strong&gt; Bolt "will typically automatically create one as soon as your project needs it" (&lt;a href="https://support.bolt.new/concepts/intro-databases" rel="noopener noreferrer"&gt;Bolt databases intro&lt;/a&gt;). On Pro or Teams plans you can claim it into your own Supabase organisation (&lt;a href="https://support.bolt.new/integrations/supabase" rel="noopener noreferrer"&gt;Bolt Supabase docs&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyy788u36w9xjhtk56mpr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyy788u36w9xjhtk56mpr.png" alt="Table comparing what moves automatically vs. what you must export for Lovable Cloud, Lovable with your own Supabase, and Bolt Database" width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Item&lt;/th&gt;
&lt;th&gt;Lovable + Lovable Cloud&lt;/th&gt;
&lt;th&gt;Lovable + your own Supabase&lt;/th&gt;
&lt;th&gt;Bolt + Bolt Database&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Two-way GitHub sync, one branch at a time&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;GitHub sync with auto-commits, or ZIP download&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Export data and storage; no one-click move to your own Supabase&lt;/td&gt;
&lt;td&gt;Already yours; invite the developer to your Supabase org&lt;/td&gt;
&lt;td&gt;Claim into Supabase (Pro/Teams) for direct access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Secrets&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Write-only, not synced to GitHub&lt;/td&gt;
&lt;td&gt;Lovable secrets plus any Supabase-side keys&lt;/td&gt;
&lt;td&gt;In Bolt's Secrets panel; unclear if included in exports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Custom domain&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Via Lovable: belongs to the workspace. External: A + TXT at your registrar&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;Check where you bought it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stripe, email, analytics&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Never moves; lives in your own accounts&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Lovable states "there is no one-click migration from the built-in backend (Cloud) to Supabase or the other way" (&lt;a href="https://docs.lovable.dev/integrations/supabase" rel="noopener noreferrer"&gt;Lovable Supabase docs&lt;/a&gt;), and Cloud's region can't be changed once enabled (&lt;a href="https://docs.lovable.dev/integrations/cloud" rel="noopener noreferrer"&gt;Lovable Cloud docs&lt;/a&gt;). Treat a move to your own Supabase as a scoped migration, not a settings change.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pre-handoff checklist: access, code, data, docs
&lt;/h2&gt;

&lt;p&gt;Work through this in one sitting; most of it takes a couple of hours and needs no technical skill.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe3thlmi1d05jt96yavw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe3thlmi1d05jt96yavw4.png" alt="Pre-handoff checklist in four columns: Access, Code, Data, and Docs" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Access
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Write down every account the app touches: builder, GitHub, database, hosting, domain registrar, DNS, Stripe, email provider, analytics and any AI API. Note the login email and who pays for each one.&lt;/li&gt;
&lt;li&gt;[ ] Turn on two-factor authentication for every account you own.&lt;/li&gt;
&lt;li&gt;[ ] Invite the developer as a &lt;strong&gt;member or collaborator&lt;/strong&gt;, not an owner. Supabase project transfers require you to be the source org's owner and can lower people's roles (&lt;a href="https://supabase.com/docs/guides/platform/project-transfer" rel="noopener noreferrer"&gt;Supabase project transfer&lt;/a&gt;). Keep the project in your org and add the developer to it.&lt;/li&gt;
&lt;li&gt;[ ] Choose a safe channel for sharing keys, such as a password manager's shared vault. Don't use email, and don't use a chat app that keeps history forever.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Connect GitHub if you haven't, and make sure the repo is in an account or organisation &lt;strong&gt;you&lt;/strong&gt; control.&lt;/li&gt;
&lt;li&gt;[ ] Confirm which branch the builder syncs to. Lovable "only edits and syncs one branch at a time" (&lt;a href="https://docs.lovable.dev/integrations/github" rel="noopener noreferrer"&gt;Lovable GitHub docs&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;[ ] Download a ZIP snapshot of the code today and keep it outside the builder.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Take a backup before anyone touches anything. On a Supabase project you control, the CLI can dump roles, schema and data as separate files:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;supabase db dump &lt;span class="nt"&gt;--db-url&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_URL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; roles.sql &lt;span class="nt"&gt;--role-only&lt;/span&gt;
supabase db dump &lt;span class="nt"&gt;--db-url&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_URL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; schema.sql
supabase db dump &lt;span class="nt"&gt;--db-url&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_URL&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; data.sql &lt;span class="nt"&gt;--use-copy&lt;/span&gt; &lt;span class="nt"&gt;--data-only&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;(&lt;a href="https://supabase.com/docs/guides/platform/migrating-within-supabase/backup-restore" rel="noopener noreferrer"&gt;Supabase backup and restore&lt;/a&gt;. The full data command in the docs also excludes two storage tables. Copy it from there.) On Lovable Cloud, use the export option the Cloud docs describe for the database and storage files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] List which tables hold personal or payment data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Docs
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Write a one-page "how it works": who the users are, the three most important flows (signup, the core action, payment), and what's broken.&lt;/li&gt;
&lt;li&gt;[ ] List every integration and which secret it uses, without writing the secret values in the doc.&lt;/li&gt;
&lt;li&gt;[ ] Note anything you set up outside the builder, such as Stripe webhooks, DNS records or cron jobs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to hand off a Lovable app to a developer: Lovable-specific steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Decide between collaborator access and moving the project.&lt;/strong&gt; You can share the project, move it to another workspace, or transfer ownership; the new owner needs the owner, admin or editor role (&lt;a href="https://docs.lovable.dev/features/projects/settings" rel="noopener noreferrer"&gt;Lovable project settings&lt;/a&gt;). For a normal engagement, share access and keep ownership.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Be careful moving workspaces once GitHub is connected.&lt;/strong&gt; Moving the project to another workspace breaks the GitHub connection, and reconnecting creates a &lt;em&gt;new&lt;/em&gt; repository; disconnecting works the same way (&lt;a href="https://docs.lovable.dev/integrations/github" rel="noopener noreferrer"&gt;Lovable GitHub docs&lt;/a&gt;). Moving the repo itself is safer: sync continues "when your Lovable workspace also has a GitHub connection for the new owner," and GitHub keeps issues and collaborators and redirects the old URL (&lt;a href="https://docs.github.com/en/repositories/creating-and-managing-repositories/transferring-a-repository" rel="noopener noreferrer"&gt;GitHub: transferring a repository&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agree who edits where.&lt;/strong&gt; Pushes to the active branch flow back into Lovable, so don't prompt on that same branch while the developer is working.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rebuild your secrets inventory by hand.&lt;/strong&gt; Lovable secrets "are write-only: after you save a secret, its value can never be viewed again in Lovable, only replaced or deleted," and they don't sync to GitHub (&lt;a href="https://docs.lovable.dev/features/secrets" rel="noopener noreferrer"&gt;Lovable Secrets docs&lt;/a&gt;). If the original key isn't saved anywhere, generate a new one from the provider. The &lt;code&gt;.env&lt;/code&gt; file is different: Lovable commits it so build-time &lt;code&gt;VITE_*&lt;/code&gt; values are available, so it must hold only public values.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check your domain.&lt;/strong&gt; Domains bought through Lovable "belong to your workspace, not to a single project," and transferring one out is irreversible from Lovable's side (&lt;a href="https://docs.lovable.dev/features/custom-domain" rel="noopener noreferrer"&gt;Lovable custom domain docs&lt;/a&gt;). An outside domain just needs an A record and a &lt;code&gt;_lovable&lt;/code&gt; TXT record at your registrar — make sure you, not a past freelancer, can log in there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bolt app developer handover: Bolt-specific steps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Export to GitHub.&lt;/strong&gt; Bolt's GitHub integration creates a commit "every time you make a change that doesn't break the project," and "checks GitHub every 30 seconds for any updates made outside Bolt" (&lt;a href="https://support.bolt.new/integrations/git" rel="noopener noreferrer"&gt;Bolt GitHub docs&lt;/a&gt;). Only the project owner can manage it, and disconnecting is permanent — "you can't manually reconnect it" — so don't disconnect to "clean things up" before a handoff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keep a ZIP as well.&lt;/strong&gt; Use Export &amp;gt; Download from the project title menu (&lt;a href="https://support.bolt.new/building/using-bolt/projects-files" rel="noopener noreferrer"&gt;Bolt projects docs&lt;/a&gt;) for a dated snapshot you control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't transfer to a user unless you mean it.&lt;/strong&gt; Bolt lets you transfer a project to another user, but "after the recipient accepts the transfer, you won't be able to access the project or make any further edits" (same page) — that fits a sale, not hiring a contractor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Handle the database before you change anything.&lt;/strong&gt; To get the developer into a real Supabase dashboard, &lt;em&gt;claim&lt;/em&gt; the Bolt database into your Supabase organisation (requires a Pro or Teams plan and Supabase org owner). Don't connect a new Supabase project instead: Bolt warns that doing so "will replace the connection, which may cause data loss" (&lt;a href="https://support.bolt.new/integrations/supabase" rel="noopener noreferrer"&gt;Bolt Supabase docs&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat secrets as unknown until checked.&lt;/strong&gt; Bolt's Secrets panel keeps values out of users' browsers (&lt;a href="https://support.bolt.new/cloud/database/secrets" rel="noopener noreferrer"&gt;Bolt secrets docs&lt;/a&gt;), but Bolt's docs don't say whether secrets or &lt;code&gt;.env&lt;/code&gt; files end up in GitHub syncs or ZIP downloads. Open both and check — rotate any private key you find.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a developer checks in the first hour
&lt;/h2&gt;

&lt;p&gt;A good developer runs roughly these checks first — here's what each finding means.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;First-hour check&lt;/th&gt;
&lt;th&gt;Good sign&lt;/th&gt;
&lt;th&gt;Bad sign and what it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Clone and run the repo locally?&lt;/td&gt;
&lt;td&gt;Runs from the README&lt;/td&gt;
&lt;td&gt;Fails: expect setup cost before feature work&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secret keys in the browser bundle&lt;/td&gt;
&lt;td&gt;Only publishable keys&lt;/td&gt;
&lt;td&gt;A Supabase secret or &lt;code&gt;service_role&lt;/code&gt; key: rotate it today — secret keys "bypass Row Level Security" (&lt;a href="https://supabase.com/docs/guides/api/api-keys" rel="noopener noreferrer"&gt;Supabase API keys&lt;/a&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Row Level Security on user tables&lt;/td&gt;
&lt;td&gt;On, with policies per table&lt;/td&gt;
&lt;td&gt;Off: any logged-in user may read others' data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Which environment is production?&lt;/td&gt;
&lt;td&gt;One clear prod project&lt;/td&gt;
&lt;td&gt;Several near-identical projects to untangle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment webhooks&lt;/td&gt;
&lt;td&gt;Signed, handled server-side&lt;/td&gt;
&lt;td&gt;Missing: payments can succeed without the app knowing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If they find a leaked key, follow Supabase's order: "Fix the root cause of the leak before you rotate anything," then create the new key, update everywhere, and retire the old one (&lt;a href="https://supabase.com/docs/guides/api/api-keys" rel="noopener noreferrer"&gt;Supabase API keys&lt;/a&gt;) — rotating first just leaks the new key too.&lt;/p&gt;

&lt;h2&gt;
  
  
  Handoff or rebuild?
&lt;/h2&gt;

&lt;p&gt;Most apps that reach a handoff need fixing, not replacing. The deciding question is the data model, not the code: if your database still describes how your business works, a developer can harden what you have; if it doesn't, every fix fights the structure underneath. Run that test — &lt;a href="https://banxal.com/blog/fix-or-rebuild-vibe-coded-app" rel="noopener noreferrer"&gt;Fix or Rebuild Your Vibe-Coded App? A 30-Minute Self-Test&lt;/a&gt; — before the handoff.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foogvx12d2izwd0gy061z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Foogvx12d2izwd0gy061z.png" alt="Decision flowchart for choosing handoff, rebuild, or security fixes based on repo control, data model fit, and exposed secrets" width="799" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can I export a Lovable app to GitHub and keep building in Lovable?&lt;/strong&gt;&lt;br&gt;
Yes. The sync is two-way on one active branch. Lovable can export to a new repo but can't import an existing one (&lt;a href="https://docs.lovable.dev/integrations/github" rel="noopener noreferrer"&gt;Lovable GitHub docs&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I give my developer my Lovable or Bolt login?&lt;/strong&gt;&lt;br&gt;
No. Invite them under their own accounts to the project, GitHub and Supabase — shared logins make it impossible to later remove just one person's access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to move off Lovable Cloud before a handoff?&lt;/strong&gt;&lt;br&gt;
Not necessarily — only if the developer needs direct database access. It's a manual job, though: export the data, connect a Supabase project and rebuild the schema (&lt;a href="https://docs.lovable.dev/integrations/cloud" rel="noopener noreferrer"&gt;Lovable Cloud docs&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I rotate secrets?&lt;/strong&gt;&lt;br&gt;
Rotate any key pasted into a chat, email or prompt before the handoff, and rotate every key the developer had when the engagement ends.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next step
&lt;/h2&gt;

&lt;p&gt;Want a second opinion before committing budget? Banxal's &lt;a href="https://banxal.com/services" rel="noopener noreferrer"&gt;development services&lt;/a&gt; include a handoff review: we go through your repo, backend and secrets and tell you plainly whether it needs fixing, hardening or a partial rebuild. &lt;a href="https://banxal.com/contact" rel="noopener noreferrer"&gt;Get in touch&lt;/a&gt; and tell us what you've built.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://banxal.com/blog/handoff-lovable-bolt-app-to-developer" rel="noopener noreferrer"&gt;banxal.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>supabase</category>
      <category>github</category>
      <category>ai</category>
    </item>
    <item>
      <title>Fix or Rebuild Your Vibe-Coded App? A 30-Minute Self-Test</title>
      <dc:creator>Manveer</dc:creator>
      <pubDate>Thu, 01 Oct 2026 19:57:39 +0000</pubDate>
      <link>https://dev.to/manveer-banxal/fix-or-rebuild-your-vibe-coded-app-a-30-minute-self-test-5ei1</link>
      <guid>https://dev.to/manveer-banxal/fix-or-rebuild-your-vibe-coded-app-a-30-minute-self-test-5ei1</guid>
      <description>&lt;p&gt;Your Lovable, Bolt or Cursor prototype has real users. It also breaks every week, and you're about to pay someone to sort it out. Before you do, you need to know whether to fix or rebuild your vibe-coded app, because the answer decides whether you're buying a few days of work or a few months.&lt;/p&gt;

&lt;p&gt;Most guides end with "book an audit". This one gives you the audit's first pass free: eight checks, about 30 minutes, no developer needed, ending in a verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Most vibe-coded apps need fixing, not rebuilding.&lt;/strong&gt; The usual problems are exposed secrets, missing database access rules and fragile payment handling. Each of those can be fixed on its own.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your data model decides whether you rebuild.&lt;/strong&gt; If your database can't describe how your business works today, patching the screens won't help.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run the 8 checks below on your own app.&lt;/strong&gt; Score them, read off your verdict, and give the results to whoever you hire so you aren't paying them to discover what you already know.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why vibe-coded apps work in the demo and break with users
&lt;/h2&gt;

&lt;p&gt;AI builders are good at getting a screen to show the right thing. Production needs more than that. Strangers have to be kept out of each other's data. Payments have to keep working when someone closes the tab mid-checkout. A table with 50,000 rows has to load as fast as it did with five.&lt;/p&gt;

&lt;p&gt;Security research shows how big the gap is. Veracode tested code from over 100 large language models and found that &lt;strong&gt;AI-generated code introduced risky security flaws in 45% of tests&lt;/strong&gt; (&lt;a href="https://www.veracode.com/resources/analyst-reports/2025-genai-code-security-report/" rel="noopener noreferrer"&gt;Veracode GenAI Code Security Report&lt;/a&gt;). The best-known example is CVE-2025-48757. A researcher scanned 1,645 Lovable-built apps and found &lt;strong&gt;170 (10.3%) with exposed databases&lt;/strong&gt; across 303 vulnerable endpoints. The leaked data included emails, phone numbers, payment status and API keys (&lt;a href="https://bleek.dev/cve-2025-48757" rel="noopener noreferrer"&gt;bleek.dev&lt;/a&gt;, &lt;a href="https://www.superblocks.com/blog/lovable-vulnerabilities" rel="noopener noreferrer"&gt;Superblocks&lt;/a&gt;). The cause was missing or weak Row Level Security, which is check 2 below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fplly3yt79pnhzw9vhmg8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fplly3yt79pnhzw9vhmg8.png" alt="Three stats on AI-built app security: 170 of 1,645 scanned Lovable apps (10.3%) had exposed databases across 303 vulnerable endpoints under CVE-2025-48757, and Veracode found AI-generated code introduced a risky security flaw in 45% of tests across 100+ LLMs." width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;None of this means your app is doomed. The demo proved demand. The invisible parts just haven't been built yet, and the checks below tell you how many of them are missing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The 30-minute self-test: 8 checks
&lt;/h2&gt;

&lt;p&gt;Run these &lt;strong&gt;only on an app you own or are authorised to test.&lt;/strong&gt; Most checks just need your browser and your admin dashboards. Score each one &lt;strong&gt;Pass (0)&lt;/strong&gt;, &lt;strong&gt;Warn (1)&lt;/strong&gt; or &lt;strong&gt;Fail (2)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffe8naqptj48pb59y3rjn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffe8naqptj48pb59y3rjn.png" alt="Checklist of the 8 self-test checks with time needed and what a Fail means: secret keys in the browser bundle (4 min), Row Level Security (5 min), auth and session handling (4 min), payment webhooks (5 min), data model sanity (5 min), error monitoring (2 min), page load with realistic data (3 min), and code in version control you own (2 min)." width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Secret keys in the browser bundle (4 min)
&lt;/h3&gt;

&lt;p&gt;Anything your app sends to the browser can be read by anyone who visits it.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open your live app in Chrome. Press F12 to open DevTools, then go to the &lt;strong&gt;Sources&lt;/strong&gt; tab.&lt;/li&gt;
&lt;li&gt;Press Ctrl+Shift+F (Cmd+Option+F on Mac) to search across all files.&lt;/li&gt;
&lt;li&gt;Search for &lt;code&gt;sk_live&lt;/code&gt;, &lt;code&gt;sk_test&lt;/code&gt;, &lt;code&gt;rk_live&lt;/code&gt;, &lt;code&gt;sb_secret_&lt;/code&gt;, &lt;code&gt;service_role&lt;/code&gt; and &lt;code&gt;secret&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Open your Supabase project's API keys page. Copy the first 20 or so characters of the &lt;strong&gt;secret / service_role&lt;/strong&gt; key and search for those too. Legacy Supabase keys are encoded, so the word "service_role" may not appear in plain text.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; you only find publishable keys (&lt;code&gt;pk_live_&lt;/code&gt;, &lt;code&gt;sb_publishable_&lt;/code&gt;, the anon key). Stripe and Supabase both say these are safe to expose (&lt;a href="https://docs.stripe.com/keys" rel="noopener noreferrer"&gt;Stripe&lt;/a&gt;, &lt;a href="https://supabase.com/docs/guides/api/api-keys" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;).&lt;br&gt;
&lt;strong&gt;Fail:&lt;/strong&gt; any secret, restricted or service key shows up. Rotate it today, before anything else.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Row Level Security (5 min)
&lt;/h3&gt;

&lt;p&gt;Supabase's own docs are blunt: a table without RLS "is readable and writable by any role with a grant on it" (&lt;a href="https://supabase.com/docs/guides/database/postgres/row-level-security" rel="noopener noreferrer"&gt;Supabase RLS&lt;/a&gt;).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the Supabase dashboard, open &lt;strong&gt;Advisors → Security Advisor&lt;/strong&gt;. Look for errors like &lt;em&gt;RLS Disabled in Public&lt;/em&gt; or &lt;em&gt;Sensitive Columns Exposed&lt;/em&gt; (&lt;a href="https://supabase.com/docs/guides/database/database-advisors" rel="noopener noreferrer"&gt;Supabase Advisors&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Run the two-account test. Sign up as User A and create a record (an invoice, a project, a message) and copy its URL. Then sign in as User B in a private window and open that URL.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; the advisor is clean and User B sees nothing.&lt;br&gt;
&lt;strong&gt;Warn:&lt;/strong&gt; the advisor shows warnings, but the two-account test holds.&lt;br&gt;
&lt;strong&gt;Fail:&lt;/strong&gt; any RLS error, or User B can see A's data. One catch: Lovable's built-in scanner only checks &lt;em&gt;whether&lt;/em&gt; a policy exists, not whether it actually blocks access (&lt;a href="https://www.superblocks.com/blog/lovable-vulnerabilities" rel="noopener noreferrer"&gt;Superblocks&lt;/a&gt;). The two-account test is what proves it works.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Auth and session handling (4 min)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Log out, press Back, then reload a private page. Do you still see data?&lt;/li&gt;
&lt;li&gt;Signed in as a normal user, type &lt;code&gt;/admin&lt;/code&gt; (or whatever your admin route is) straight into the address bar.&lt;/li&gt;
&lt;li&gt;Run a password reset from start to finish. Does the email arrive, and does the link expire after you've used it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; all three behave. &lt;strong&gt;Warn:&lt;/strong&gt; the reset flow is flaky. &lt;strong&gt;Fail:&lt;/strong&gt; a normal user can reach admin pages, or a logged-out session still shows data.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Payment webhooks (5 min)
&lt;/h3&gt;

&lt;p&gt;A webhook is the message Stripe sends to your app's server when a payment succeeds or a subscription changes. Many prototypes skip it and unlock paid features when the browser lands on the "success" page, which breaks the moment someone closes the tab.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In Stripe, open &lt;strong&gt;Workbench → Webhooks&lt;/strong&gt;. Is an endpoint registered at all? Open &lt;strong&gt;Event deliveries&lt;/strong&gt; and look for anything marked &lt;em&gt;Failed&lt;/em&gt; or &lt;em&gt;Pending&lt;/em&gt; (&lt;a href="https://docs.stripe.com/webhooks" rel="noopener noreferrer"&gt;Stripe webhooks&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;In a sandbox, start a checkout, pay with a test card and close the tab before the redirect finishes. Does the account still upgrade?&lt;/li&gt;
&lt;li&gt;Cancel that test subscription from the Stripe dashboard. Does the app take away access?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; an endpoint exists, deliveries succeed and both tests behave. &lt;strong&gt;Fail:&lt;/strong&gt; there's no endpoint, deliveries are failing, or access doesn't follow what Stripe says.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Data model sanity (5 min)
&lt;/h3&gt;

&lt;p&gt;This is the check that decides fix versus rebuild. Open Supabase's &lt;strong&gt;Table Editor&lt;/strong&gt; and look for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tables named after screens (&lt;code&gt;dashboard_data&lt;/code&gt;, &lt;code&gt;page_two&lt;/code&gt;) instead of things in your business (&lt;code&gt;customers&lt;/code&gt;, &lt;code&gt;orders&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;The same fact stored in several places, like a customer's email in four tables.&lt;/li&gt;
&lt;li&gt;Lists crammed into one text or JSON column.&lt;/li&gt;
&lt;li&gt;User-owned tables with no column saying who owns each row.&lt;/li&gt;
&lt;li&gt;Something your business does now that the schema can't represent, such as teams, multiple locations or more than one price per product.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; none of these. &lt;strong&gt;Warn:&lt;/strong&gt; one or two, and they're contained. &lt;strong&gt;Fail:&lt;/strong&gt; the last bullet is true, or most of the others are.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Error monitoring (2 min)
&lt;/h3&gt;

&lt;p&gt;Who finds out first when something breaks, you or your users? In DevTools, search the &lt;strong&gt;Network&lt;/strong&gt; tab for &lt;code&gt;sentry&lt;/code&gt;, &lt;code&gt;logrocket&lt;/code&gt; or &lt;code&gt;bugsnag&lt;/code&gt;, then check whether you've ever actually received an alert.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; errors reach you automatically. &lt;strong&gt;Fail:&lt;/strong&gt; your users are your monitoring.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Page load with realistic data (3 min)
&lt;/h3&gt;

&lt;p&gt;Fill a test account with the amount of data your heaviest customer has. In DevTools, set &lt;strong&gt;Network&lt;/strong&gt; throttling to &lt;em&gt;Slow 4G&lt;/em&gt; and load your busiest page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; the main content appears within about 2.5 seconds. Google's web.dev counts Largest Contentful Paint at 2.5s or less as "good" and over 4s as "poor" (&lt;a href="https://web.dev/articles/lcp" rel="noopener noreferrer"&gt;web.dev&lt;/a&gt;). &lt;strong&gt;Warn:&lt;/strong&gt; 2.5 to 4 seconds. &lt;strong&gt;Fail:&lt;/strong&gt; over 4 seconds, or the Network tab shows the page downloading an entire table at once.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Code in version control you own (2 min)
&lt;/h3&gt;

&lt;p&gt;Is your code in a GitHub repository under &lt;em&gt;your&lt;/em&gt; account or organisation? Lovable can create a private repo on your GitHub with two-way sync (&lt;a href="https://docs.lovable.dev/integrations/github" rel="noopener noreferrer"&gt;Lovable docs&lt;/a&gt;). Bolt and Cursor projects should be in a repo too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pass:&lt;/strong&gt; you own the repo and can see a history of changes. &lt;strong&gt;Warn:&lt;/strong&gt; a repo exists but sits in a freelancer's account. &lt;strong&gt;Fail:&lt;/strong&gt; the code only lives inside the builder or on one person's laptop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scoring: ship, fix, refactor or rebuild
&lt;/h2&gt;

&lt;p&gt;Add up your points (maximum 16). These thresholds are our rule of thumb from how these problems usually group together. They aren't an industry standard.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Score&lt;/th&gt;
&lt;th&gt;Also true&lt;/th&gt;
&lt;th&gt;Verdict&lt;/th&gt;
&lt;th&gt;What it means&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0–2&lt;/td&gt;
&lt;td&gt;No Fail on checks 1–4&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Ship&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keep building. Add monitoring if you don't have it.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3–7&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Fix&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Targeted repairs. Security fails (checks 1–2) go first, this week.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8–16&lt;/td&gt;
&lt;td&gt;Check 5 is Pass or Warn&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Refactor&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Keep the product and the data, but restructure the code in stages.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8–16&lt;/td&gt;
&lt;td&gt;Check 5 is Fail&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Rebuild&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The foundation can't hold your business. Plan a staged rebuild.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwd934a69tgi0xo1al3ed.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwd934a69tgi0xo1al3ed.png" alt="Scoring table: 0–2 points with no Fail on checks 1–4 is Ship; 3–7 points is Fix; 8–16 points with check 5 Pass or Warn is Refactor; 8–16 points with check 5 Fail is Rebuild." width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A low score with a Fail on check 1 or 2 still means &lt;strong&gt;act today&lt;/strong&gt;. Rotate the key or turn on RLS, then carry on.&lt;/p&gt;

&lt;h2&gt;
  
  
  When rebuild is actually right (and when it's a sales pitch)
&lt;/h2&gt;

&lt;p&gt;Most of the top guides agree, and so do we: the data model is the real test. Axonbuild argues that rebuilding is only justified when your data model "cannot express what the business now does" (&lt;a href="https://axonbuild.com/blog/cleanup-or-rebuild" rel="noopener noreferrer"&gt;Axonbuild&lt;/a&gt;). Appmatic puts it as refactor if the data model is sound, rebuild if the architecture can't support the roadmap (&lt;a href="https://appmatictech.com/insights/vibe-coded-app-messy-code-what-next/" rel="noopener noreferrer"&gt;Appmatic&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rebuild is right when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check 5 fails and your next three features all need the schema changed.&lt;/li&gt;
&lt;li&gt;Every small change breaks something unrelated, and that's been true for months.&lt;/li&gt;
&lt;li&gt;You can't get the code out of the platform at all.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It's probably a sales pitch when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone quotes a rebuild without reading your code or schema.&lt;/li&gt;
&lt;li&gt;The reasons are about taste ("the code is messy", "we'd use a different framework"). Messy code that works is a refactor job.&lt;/li&gt;
&lt;li&gt;Exposed keys or missing RLS are given as the reason. Those are fixes, usually small ones.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to hand a developer
&lt;/h2&gt;

&lt;p&gt;To hand off a Lovable app to a developer (or a Bolt or Cursor one) without paying for discovery twice, send:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Your self-test scores, with screenshots of anything that failed.&lt;/li&gt;
&lt;li&gt;Admin or collaborator access to the GitHub repo, Supabase, Stripe, hosting and your domain registrar. Use invites, never shared passwords.&lt;/li&gt;
&lt;li&gt;A list of what's breaking, from user reports, with dates.&lt;/li&gt;
&lt;li&gt;The next three features you need, so they can judge whether the data model will cope.&lt;/li&gt;
&lt;li&gt;Your user and data numbers: active users, the biggest account, the largest tables.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you'd rather not assemble this yourself, Banxal's &lt;a href="https://banxal.com/services" rel="noopener noreferrer"&gt;maintenance and growth work&lt;/a&gt; starts with the same handover review before anything else is touched.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fix or rebuild a vibe-coded app: what each option involves
&lt;/h2&gt;

&lt;p&gt;Fixing, refactoring and rebuilding a vibe-coded app differ in what changes, what you keep, and what it costs. Cost ranges below are other agencies' published figures, not ours, and your app may differ.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;th&gt;Refactor&lt;/th&gt;
&lt;th&gt;Rebuild&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What changes&lt;/td&gt;
&lt;td&gt;Specific broken items&lt;/td&gt;
&lt;td&gt;Code structure, tests, deployment&lt;/td&gt;
&lt;td&gt;Code and usually the data model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;What you keep&lt;/td&gt;
&lt;td&gt;Everything&lt;/td&gt;
&lt;td&gt;Product, data, most UI&lt;/td&gt;
&lt;td&gt;Product knowledge, users, migrated data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Risk&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High: data migration and two systems running side by side&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Published ranges&lt;/td&gt;
&lt;td&gt;Axonbuild: 6–12 hour repairs at $240–$960 each&lt;/td&gt;
&lt;td&gt;Appmatic: 4–10 weeks, $15,000–$40,000&lt;/td&gt;
&lt;td&gt;Appmatic: 8+ weeks, $40,000+&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Axonbuild's advice on the cost to fix a vibe-coded app is simple arithmetic: count your blocking problems, multiply by the cost per repair, and compare that with a rebuild quote (&lt;a href="https://axonbuild.com/blog/cleanup-or-rebuild" rel="noopener noreferrer"&gt;Axonbuild&lt;/a&gt;). Appmatic lists a separate code audit at 1–2 weeks from $2,500 (&lt;a href="https://appmatictech.com/insights/vibe-coded-app-messy-code-what-next/" rel="noopener noreferrer"&gt;Appmatic&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is my Lovable app production ready if the Security Advisor is clean?&lt;/strong&gt;&lt;br&gt;
Not on that alone. The advisor finds missing RLS, but it can't tell you whether your policies match your business rules. Run the two-account test, and check payments and auth as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run an AI-built app security check myself?&lt;/strong&gt;&lt;br&gt;
You can do the first pass. Checks 1–4 above catch the issues behind the best-known incidents. A developer still needs to review webhook signature checks and server-side logic, because that can't be seen from the browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to fix a vibe-coded app?&lt;/strong&gt;&lt;br&gt;
Isolated issues such as a leaked key or a missing policy often take hours. The published ranges above put a fuller hardening at weeks. Your score is a better guide than any average.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next step
&lt;/h2&gt;

&lt;p&gt;If your score says fix or refactor, the next step is a code review and handover conversation. Bring your self-test results. &lt;a href="https://banxal.com/about" rel="noopener noreferrer"&gt;Banxal&lt;/a&gt; builds and hardens web apps and SaaS products, and can look after them afterwards through ongoing maintenance. We'll tell you plainly if a rebuild isn't needed. &lt;a href="https://banxal.com/contact" rel="noopener noreferrer"&gt;Talk to us about your app&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://banxal.com/blog/fix-or-rebuild-vibe-coded-app" rel="noopener noreferrer"&gt;banxal.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>supabase</category>
      <category>ai</category>
    </item>
  </channel>
</rss>
