My Vibe-Coded App Got Slow at 50 Users: The 5 Fixes Before You Upgrade Anything
It was instant with three test users. Now you have fifty real ones and the dashboard takes eight seconds, the list page spins, and someone has already emailed you the word “unusable.” Vibe-coded apps slow down at a very predictable point, for a very predictable set of reasons — and almost none of them need a bigger server.
Slow AI-built apps are almost always doing too many database calls, fetching everything and filtering in the browser, or running queries with no index. Before you upgrade any plan, open the network tab, load the slow page, and count the requests. If it’s more than about ten, you’ve found it.
Why it happens at exactly this size
AI tools write code that is correct for the data in front of them, which during development is three rows. A loop that fetches each item’s owner one at a time is invisible at three rows and catastrophic at three hundred. A query that scans the whole table is fine at fifty rows and a problem at fifty thousand. Nothing was “wrong” until the data grew — which is why this arrives as a surprise, right when the product is starting to work.
The five fixes, in order of how often they’re the cause
where id in (...)). In Supabase that’s a nested select; with an ORM it’s an include/eager-load. This is the cause more than half the time.user_id, created_at, status — needs an index, and AI-generated schemas rarely add them. Find it: Supabase and most Postgres hosts have a slow-query view; explain analyze shows “Seq Scan” on a big table. Fix it: create index on tasks (user_id, created_at desc); — usually a one-line migration and a 10–100× improvement.Promise.all), or move the composition to a server route or server component so the browser makes one call. Our Next.js App Router guide covers where that logic should live.What usually isn’t the problem
The server size. Fifty users is nothing for the smallest tier of any hosting or database plan — if you’re slow at fifty, you’ll be slow at five hundred on a plan ten times the price. Upgrade only after the five fixes above, and only if measurements say so. The same goes for “switching to a faster framework”: the framework isn’t running the N+1, your query is.
How to prove it’s fixed
Measure before and after. Request count and total time on the slow page from the network tab, plus the database’s slow-query log. Then seed a staging database with 10× your current data (the AI will happily generate a script) and load the page again. If it’s still fast at 10×, you’ve bought yourself a year. If you want the public-facing side checked too, the Core Web Vitals checklist covers what Google measures.
Performance work is also where a data-model problem tends to surface — the query is slow because the schema makes the question hard to ask. If fixes 1–3 don’t land, that’s the signal to run the 12-point audit before adding more features on top.
FAQ
Want it measured and fixed this week?
Performance sprint for AI-built apps: we find the query patterns, fix the top causes, and hand you the before/after numbers — typically inside a week.
