Skip to content
← Blog

Best backend for vibe-coded apps: what each one leaves you to check

If you never read the code, choose a backend where the parts you skipped cannot expose your data on their own. What Lovable, Bolt, Supabase, Firebase, Appwrite, Convex, PocketBase, Neon and floo each leave you to check.

floo team

TL;DR

The best backend for a vibe-coded app is the one whose safety does not depend on code you never read. App builders and most backend services let the browser query the database and protect it with a rule per table. floo hosts the app and its backend together from one floo.app.toml, signs people in at its gateway, and keeps the database key on the server, so there are no row-level security policies for anyone to get wrong. If strangers need to sign up, or the app is built around realtime sync, pick one of the others and review its rules before you share the link.

  • Your app probably talks to its database from the browser. Lovable Cloud and Bolt's database both rely on row-level security, and both ship scanners because tables with RLS switched off and policies that let everyone through are the common leak.
  • Scanners are a floor, not a guarantee. Lovable's docs say its scans cannot guarantee security, and Lovable publishes despite findings unless an admin turns on blocking.
  • A server in front of the data removes the class of bug. On floo, the browser gets no database key, and the gateway admits only invited people.
  • floo is not for public sign-up. Its sign-in is invitation-only, so a consumer app is better on Supabase, Firebase, Appwrite, or Convex.

Every claim about another product below comes from its own docs, read on November 3, 2026. Sources are at the end.

What changes when the app is vibe-coded?

You did not read the code. That is the point of building this way, and for a prototype it is fine. It becomes a problem at one moment: the first time you send the link to someone else. From then on, every table the builder created is reachable by whoever holds the link, unless something stops them.

So the useful question about a backend is not which has the most features. It is: if the generated code is wrong somewhere you did not look, what happens?

Where is your app's backend right now?

If it came from an app builder, probably in the builder's own cloud.

  • Lovable turns on Lovable Cloud by default: database, auth, storage, realtime, and edge functions, built on Supabase's open-source foundation. You can connect your own Supabase project instead. Lovable's hosting guide lists the Supabase URL and publishable key as browser variables and says the app relies on row-level security. Its Supabase page warns that missing RLS policies commonly expose data.
  • Bolt gives new projects a Bolt database. Its security docs say visitors can send requests straight to the database from the browser, and that for apps without sign-in, Bolt may write policies that let anyone read, change, or delete data.

Both builders scan for this. Lovable runs a quick scan on every publish that flags tables without RLS and rules that let everyone through, plus an on-demand deep scan of the code. Bolt checks every database for missing RLS and always-true policies, and paid plans add a project audit that checks whether one user can reach another's data. Use them. They are also the clearest evidence of where the risk sits.

What should you check on each backend before sharing?

BackendThe browser reaches the data?What you must review before sharing
Lovable Cloud or Bolt databaseYesEvery table's RLS policy; act on scan findings
SupabaseYes, through the Data APIRLS on every exposed table, including ones created in SQL; where the secret key is used
FirebaseYes, Firestore and Realtime DatabaseThe Security Rules file; that no test-mode rule remains
AppwriteYes, through the client SDKTable and row permissions; which API keys exist and their scopes
PocketBaseYes, through its APIEvery collection's API rules; an empty rule means anyone
Neon Data APIYesGrants and RLS; the API has no permission layer of its own
ConvexThrough public functionsThat every public function checks who is calling
flooNoWho is invited, and the row checks in your server code

Which backend should you pick?

Stay on your builder's backend if the app is a prototype you show on your own screen, or a public app you will keep building inside the builder. If only a few people should get in, Lovable lets you disable sign-up and add users by hand; Bolt's docs describe turning each sign-in method off, but invite-only access is not described in them. Fix every scan finding either way.

Supabase if the app is public, people sign themselves up, and you want Postgres with realtime. Its Security Advisor flags tables with RLS disabled; run it after every change your agent makes.

Firebase if it is a mobile or consumer app that needs offline sync and a CDN. Review the rules file like code.

Appwrite if you want an open-source backend you can self-host, with many sign-in providers and hosting through Sites.

Convex if the app is realtime at its core, such as a shared board or chat, and you are comfortable with TypeScript. Its docs describe every read and write going through functions, which is a safer default than direct table access, as long as each public function checks the caller.

PocketBase for a personal project on a server you run. Its docs say it is not yet at version 1.0 and not recommended for production-critical apps.

Neon if you only want Postgres and will bring your own host and server.

floo if the app is for you, your team, or a known group, which describes most vibe-coded software that sticks: the tracker that replaced a spreadsheet, the dashboard for the number everyone asks about, the queue someone used to manage by email. floo hosts the app, Postgres, sign-in, cron, storage, Redis, and API keys for agents from one config file in the repo.

Why does floo avoid the RLS problem?

Because it does not hand the browser a way to the database. Every request goes through floo's gateway, which shows invited people a sign-in page and tells your code who they are in request headers. Your server code, which the agent writes alongside the frontend, is the only thing holding DATABASE_URL.

[app]
name = "team-tracker"
access_mode = "accounts"

[managed.default]
type = "postgres"

That does not make permissions disappear. If members should see only their own rows, the server has to filter by the signed-in person. The difference is where the check lives: one WHERE owner_email = $1 in a route you can ask your agent to show you and test, instead of a policy on every table, where a missing policy fails open and nothing visible goes wrong.

How do you move a vibe-coded app to floo?

Both Lovable and Bolt sync your code to GitHub, and both docs say you can host it elsewhere from there. From the repo:

  1. Ask your agent to add a small server, for example Next.js route handlers or an Express service, that queries Postgres with DATABASE_URL.
  2. Point the frontend at those same-host routes and remove the database URL and key from the browser code.
  3. Add floo.app.toml with access_mode = "accounts" and [managed.default], then deploy and invite your team.

The full walkthrough, with a prompt to paste, is in how to add a backend to an app your agent built. If you would rather start clean, the templates are working apps with sign-in, Postgres, and an agent API already wired up. The backend overview lists every part.

When is floo the wrong answer?

  • Strangers sign up. floo admits only invited people. There is no self-signup or domain-based admission, and no SAML or OIDC for app users yet.
  • Realtime sync. floo passes WebSockets through, but its docs describe no database subscriptions.
  • A global audience. floo's docs describe no global CDN or multi-region serving.

For those, pick from the list above and run the pre-share checklist before you send the link. For the longer comparison, see the best backend for apps built with coding agents.

Sources

Frequently asked questions

What backend does a vibe-coded app use by default?

Usually the app builder's own. Lovable turns on Lovable Cloud, which its docs say is built on Supabase's open-source foundation, and new Bolt projects use a Bolt database. In both, the browser talks to the database and row-level security policies decide what each visitor can read and write.

Are app builder security scans enough?

They help, but their own docs set the limit. Lovable runs a quick scan on every publish that flags tables without RLS and says scans cannot guarantee security. Bolt runs a database check on all plans and a fuller audit on paid plans. Lovable still publishes unless an admin turns on blocking for critical issues, and Bolt's docs do not describe blocking publishing.

What is the safest backend for a vibe-coded internal tool?

One where the browser never holds a database key. On floo, sign-in runs at the gateway, only your server code holds DATABASE_URL, and there are no row-level security policies to get wrong. Access decisions live in ordinary code you can ask your agent to explain and test.

Can I move a Lovable or Bolt app to floo?

Yes. Both builders sync code to GitHub so you can host it elsewhere. Your agent then adds a small server that queries Postgres, adds floo.app.toml, and removes the database key from the browser code.

Build internal software.

Infrastructure for building secure, full-stack internal apps with AI. Team sign-in, a database, scheduled jobs, and hosting, all included.

Get an API key
Usage-based pricing. See plans →