The Difference Between Building and Running
Building an app and running a live app are different jobs. When you were building, you could break things freely — nobody was using it yet. You could undo everything, start over, try wild ideas. The stakes were low.
Now there are real users. When you change something, it changes for everyone immediately. If you break it, everyone sees a broken app until you fix it. The feedback loop is longer — you can't just refresh and try again.
This doesn't mean you can't change things. It means you change things a little more carefully. The good news: the same AI tools that helped you build will help you maintain and grow. You just need slightly different habits.
One change at a time. When you're building, it's fine to describe a whole new feature in one go. When you're changing a live app, make one change, check that it works, then make the next change. It's slower — and it means you always know what broke something if something breaks.
Adding Features Without Breaking Things
The most common mistake when growing a live vibe-coded app: describing a big new feature and applying everything AI produces in one go. It usually works — until it doesn't, and then you're not sure which of the twenty changes is the problem.
The Safe Way to Add Features
Before you ask AI to add anything, do one thing: save a copy of the current version that works. If you're using Netlify, download your current site files. If you're using Bolt or Lovable, duplicate the project before making major changes. This is your safety net.
Then describe the feature in focused pieces rather than all at once:
- Instead of: "Add a user account system with login, profiles, and the ability to save favorite items."
- Do this: "Add a simple login page with email and password fields." → test it → "Now add a profile page that shows the user's name and email." → test it → "Now add the ability to save favorite items to a user's account." → test it.
Each step is a change you understand and can verify. Each step has a clear thing to check before moving on.
What to Ask AI When Adding Features
Give AI the current state of your app along with the request. AI that can see what already exists generates code that fits in rather than code that conflicts with what you have.
My app currently has a list of recipes that users can browse and filter by category. Here's the current HTML and JavaScript:
[paste your current code]
I want to add a "Save to favorites" button to each recipe card. When clicked, it should save the recipe to a list that the user can see when they click a "My Favorites" button at the top. The saved list should persist when the page is refreshed — use localStorage for now. Don't change anything else about how the app looks or works.
Two things make this prompt work: you gave AI the existing code so it knows what it's working with, and you said "don't change anything else." That last part matters — without it, AI often improves other things while adding the feature, which makes it harder to see what changed and what to test.
Testing Before Deploying
With a live app, test new features yourself before you update the live version. If you're using Netlify or similar, you can often preview a new deployment before making it live. Click through every part of the app — not just the new feature — and make sure nothing unexpected broke.
The Five-Click Check
Before deploying any change: do five clicks through the main things your app does. The new thing you added, plus the four most important things that already worked. If all five work, deploy with confidence. This takes 90 seconds and catches 80% of regressions.
Quick Overflow Check (30 seconds)
Add one more QA step before deploy: check if any element is wider than the viewport. This catches hidden mobile breakage even when the page "looks fine" at first glance.
Run this in DevTools on mobile width (for example 375px):
[...document.querySelectorAll('*')]
.filter(el => el.scrollWidth > document.documentElement.clientWidth)
.map(el => ({
tag: el.tagName.toLowerCase(),
className: el.className,
width: el.scrollWidth
}))
If the result array is not empty, fix those elements before shipping.
Adding a Database
Most vibe-coded apps start without a database. Data lives in the code itself (a hardcoded list of items), in the browser's local storage, or in a spreadsheet. This is fine for getting started. But at some point you'll want data to persist properly — for multiple users, across devices, or because you need to add or edit it without changing the code.
When You Need a Database
You need a proper database when:
- Different users should see different data (user accounts, personal lists, private content)
- You need to add, edit, or delete content without changing your app's code each time
- Users need to see each other's data (comments, shared lists, community features)
- Your hardcoded data list is getting long enough to be annoying to manage in code
You probably don't need a database yet if you're storing the same information for everyone, nothing changes often, and localStorage is working fine.
The Easiest Database Options for Vibe-Coded Apps
Three options that work well without requiring technical setup:
- Supabase. Free tier, web interface to see and edit your data directly, works well with AI-generated code. Good for user data and app content. You describe the data structure to AI, AI writes the code, you connect it to your free Supabase project.
- Airtable. Looks like a spreadsheet, works as a database. Good for content you want to edit yourself — a blog, a product catalogue, an event list. AI can generate code to read data from an Airtable table and display it in your app.
- Firebase. Google's database service. More technical than Supabase but widely supported. AI generates very reliable Firebase code because so much Firebase code exists in AI's training data.
Whichever you choose, describe your data to AI first and ask it to design the structure before writing any code:
I'm building a recipe app. Each recipe has: a title, a description, a list of ingredients (each ingredient has a name and quantity), a list of steps, a category (breakfast/lunch/dinner/snack), and an image URL. Users can save their own recipes and browse public recipes from other users. I want to use Supabase. How should I structure the data tables, and what tables do I need?
Let AI design the structure, then review it and ask questions about anything you're unsure of. Once you understand what you're building, ask AI to write the actual code to connect your app to it.
The Important Rule About User Data
Once real users store data in your app, you are responsible for it. Keep these things in mind:
- Don't store passwords yourself. Use an authentication service (Supabase Auth, Firebase Auth, Auth0) rather than handling passwords in your own code. AI should know this, but double-check: if AI generates code that involves storing a password in plain text, that's a problem.
- Tell users what you collect. If your app collects any personal information — email addresses, names, anything — you need a privacy policy. There are free generators online. Ask AI to help you write one specific to what your app collects.
- Back up your data. Both Supabase and Firebase have backup options. Enable them. Losing your users' data is the thing you cannot undo.
Handling User Feedback
Once people use your app, they will tell you what's wrong with it and what they wish it did. This is valuable — but it can also feel overwhelming. Here's how to handle it without getting paralyzed.
Collecting Feedback
The simplest setup: add a feedback link to your app that opens a Google Form or Typeform. Ask two questions: "What's the most frustrating thing about the app?" and "What's the one thing you wish the app did that it doesn't?" These questions get specific, useful answers.
Alternatively, put your email address on the page. Some users prefer to write directly.
Deciding What to Build
You'll get contradictory feedback. One person wants dark mode. Another wants the app to email them summaries. A third says the app is perfect but the font is too small. You cannot build all of it.
A simple rule: if more than three different users mention the same problem or request, it's probably worth addressing. If only one person asked for something very specific, it's probably just for them.
Before building anything users asked for, ask AI to help you think it through:
Several users have asked for a way to share recipes with friends via a link. My app currently uses Supabase and each recipe has a unique ID. What's the simplest way to add shareable links without requiring the friend to create an account? What are the tradeoffs of different approaches?
Asking for tradeoffs before building anything is a habit worth forming. It takes one extra minute and often reveals a simpler solution than what you were thinking of.
Responding to Bug Reports
Users will report bugs. Most of the time, they won't describe the bug in a way that makes it easy to reproduce — they'll say things like "it doesn't work" or "the save button is broken for me." When that happens, ask:
- What were you doing when it happened?
- What did you expect to happen, and what happened instead?
- What device and browser are you using?
Once you know what they were doing, try to reproduce it yourself. If you can reproduce it, you can fix it. If you can't reproduce it, describe it to AI and ask what might cause it:
A user reports that the "Save recipe" button doesn't work for them. I've tried it and it works for me. They're on an iPhone using Safari. I'm testing on Chrome on a desktop. Here's the save button code:
[paste the relevant code]
What might cause this to work on Chrome but fail on Safari on iPhone?
When Something Breaks on Live
Eventually something will break while real people are using it. The page goes blank. The save button stops working. The app loads but shows no data. Here's how to handle it.
Immediate Response
First: don't panic. Most breakages are recoverable. Second: if you recently deployed a change, that's almost certainly the cause. The fastest fix is usually to roll back to the previous version:
- Netlify: Go to Deploys in your Netlify dashboard → find the last working deployment → click "Publish deploy." Your site reverts in about 30 seconds.
- Bolt: Use the version history to go back to the last working version.
- Lovable: Use the restore point from before you made the change.
Rolling back is not failure — it's professional. It stops the bleeding immediately and gives you time to fix the problem properly in a safe environment before deploying again.
Diagnosing the Problem
If you can't or don't want to roll back, open your browser's developer console (press F12 in most browsers) and look for red error messages. Take a screenshot or copy the error text and bring it to AI:
My app is broken. I see this error in the browser console:
[paste the error]
The last change I made was: [describe what you changed]. Here's the relevant code:
[paste the code]
What is causing this error and how do I fix it?
If the App Is Slow, Not Broken
Sometimes the app works but users complain it's slow. This is harder to diagnose than an outright break. Common causes in vibe-coded apps:
- Too many images, too large. If your app shows lots of images and they're not resized for the web, they'll be slow to load. Compress images before using them, or ask AI how to add lazy loading.
- Too many database requests. If your app fetches data from Supabase or Firebase on every click, it will feel slow. Ask AI to help you load data once and reuse it.
- The hosting plan has limits. Free hosting tiers often limit bandwidth or have "spin up" times after inactivity. If your app is slow the first time someone visits after a while, this might be why. Upgrading to a paid tier usually fixes it.
Keeping the App Healthy Over Time
A live app needs occasional maintenance even when you're not actively adding features. Things to check every few months:
Check That Third-Party Things Still Work
If your app uses external services — a weather API, a payment service, an email sender — these services sometimes change their APIs or require you to update your API key. Set a reminder to open your app and try the key functions every month or two.
If something stops working and you haven't changed anything, an external service is usually the first place to look. Check the service's status page (most have one) and their changelog for recent changes.
Keep an Eye on Costs
Free tiers have limits. Supabase's free database has a storage limit. Netlify's free tier has bandwidth limits. If your app grows, you might hit these. Most services will warn you by email — make sure those emails go somewhere you'll actually see.
If you're worried about costs, ask AI to help you add simple analytics — just a count of daily users — so you have a sense of growth before you hit any limits.
Update Your App When You Get New Ideas
The best way to keep a vibe-coded app healthy is to keep using it yourself. When you notice something that annoys you, fix it. When you think of a small improvement, make it. Lots of small improvements over time make apps feel polished and well-maintained.
Don't wait until you have a big feature to add. Small improvements — a better error message, a more obvious button, a missing loading indicator — are often more valuable to users than new features.
Knowing When to Get Help
Everything in this guide assumes you're doing this yourself with AI. That works for a lot — maybe more than you'd expect. But there are signs that you're reaching the edge of what's comfortable to manage alone:
- The same bugs keep coming back, and fixes feel like whack-a-mole
- You're afraid to make changes because something always breaks
- Users are reporting security problems (accounts being accessed, data appearing where it shouldn't)
- You're storing significant amounts of other people's personal data
- Your app is generating revenue that depends on it working reliably
These aren't signs you've failed — they're signs your app has grown into something real, and real things sometimes need professional help. When Vibe Coding Isn't Enough covers exactly this: how to recognize that moment, how to find a developer, and how to talk to them about what you've built.
Growing Your App — Key Points
- Save a working copy before any change. Your deployment platform's rollback feature is your safety net. Know how to use it before you need it.
- One change at a time. Give AI the existing code when you're adding features, and say "don't change anything else." Then test before moving on.
- Store user data safely. Use a real authentication service (not your own password handling), tell users what you collect, and back up your data.
- The five-click check. Before every deployment: click through the new thing plus the four most important existing things. 90 seconds, catches most regressions.
- Roll back immediately if something breaks on live. Fix it properly in a safe environment, then deploy again. Rolling back is professional.
- Most bugs have context. When asking AI to fix a bug, paste the error message, describe when it happens, and show the relevant code. "It doesn't work" is not enough information for anyone — including AI.
Related Guides
When Vibe Coding Isn't Enough
How to recognize when your project needs more than AI-only building, and how to engage a developer well.
Deploying Your Vibe Coded App
If you haven't deployed yet, this is the practical path to getting your app online quickly.
7 Vibe Coding Mistakes That Waste Your Time
Common build-phase mistakes and concrete fixes you can apply before your next iteration.