Before you launch · Stage 4: ship and find users

Before you launch a vibe-coded app: data, keys, backups and launch readiness

Eleven data and access checks for apps built with Lovable, Bolt, Replit, v0, Cursor or Claude Code, each linked to the vendor's docs, then the backups and venue rules to sort out before you post. Checked on vendor pages on 2026-10-13.

Updated

Key takeaways

  • Turn on Row Level Security for every table in Supabase's public schema and clear the Security Advisor's ERROR lints. The publishable (anon) key is meant to be in browser code; RLS is what protects the data.
  • Anything prefixed NEXT_PUBLIC_ or VITE_ ships to the browser. The Supabase secret key and your Stripe, OpenAI or Anthropic keys stay on the server.
  • As of October 2026, Supabase's pricing page lists no automatic backups on Free (Pro keeps 7 days), and Lovable Cloud keeps roughly 14 daily backups. Neither includes storage files.
  • From 2026-10-30, new tables in existing Supabase projects need an explicit GRANT before the Data API can reach them. Supabase is deprecating the legacy anon and service_role keys by the end of 2026, so move to publishable and secret keys.
  • BetaList and SaaSHub reject free hosting subdomains, Product Hunt allows one launch per product every six months, and Hacker News asks for no generated text.

Data, keys and access: eleven checks

Tick these off before real users put real data in. Each check says how to test it yourself and links the vendor's doc. Limits are as of October 2026. Start with C1 to C3: between them they cover 6 of the 11 cases in the incident table further down (editorial). Our calls (editorial) assume a solo builder using AI coding tools, with no security team, shipping in evenings and weekends.

  • C1. RLS is on for every exposed table, and user A cannot see user B's rows. In Supabase, enable Row Level Security on every table in an exposed schema such as public; with RLS on and no policies, the publishable key reads nothing. Add one policy per operation, scoped to authenticated and matching (select auth.uid()) = user_id. A read policy in that pattern: create policy "own rows" on public.todos for select to authenticated using ((select auth.uid()) = user_id);. Insert policies use with check in place of using; update policies combine using (which rows can change) with with check (what the changed row may contain). Views skip RLS unless created with security_invoker = true (Postgres 15+). Run the Security Advisor (Dashboard, or supabase db advisors) and clear the ERROR lints, including 0013_rls_disabled_in_public, 0010_security_definer_view and 0002_auth_users_exposed. Then the two-account test (editorial): sign in as A, try to read, edit and delete B's rows in the app and through the REST endpoint, and repeat signed out.[1], [2]
  • C2. Real secrets never reach the browser. The Supabase publishable key (sb_publishable_..., legacy anon) is designed to sit in browser code. The secret key (sb_secret_..., legacy service_role) bypasses every RLS policy and must never be in a browser, app bundle or repo. Next.js inlines every NEXT_PUBLIC_ variable into browser JavaScript, and Vite does the same for VITE_ and says not to put API keys there. Keep backend keys in Lovable Secrets or Vercel Secret variables, both write-only after saving. Check (editorial): in DevTools, search your live site's JavaScript for sb_secret_, sk_, sk-, Bearer and eyJ. A legacy Supabase key is a JWT starting eyJ with its role encoded inside, so a plain-text search for service_role finds nothing. Decode each eyJ token in the DevTools console, never in an online decoder: JSON.parse(atob(TOKEN.split('.')[1].replace(/-/g, '+').replace(/_/g, '/'))).role, with the token in quotes in place of TOKEN. It must print anon, never service_role. Keep GitHub push protection on. If a key leaked, fix the leak, create a new key, replace it everywhere, confirm, then retire the old one.[3], [59], [4], [5], [6], [7], [8]
  • C3. Every read and write is checked on the server. Next.js says Proxy (formerly middleware) is only for optimistic redirects: do real checks in a Data Access Layer and treat every Server Action and Route Handler like a public API endpoint. In Supabase server code, use getClaims(), which verifies the token signature, never getSession(). Supabase's production checklist adds MFA on your Supabase account, CAPTCHA on sign-up, sign-in and password reset, and custom SMTP (the default sender allows 2 auth emails an hour). Logged-out test (editorial): in a private window, open your dashboard and API URLs; each should redirect or return 401 or 403, never data.[9], [10], [11]
  • C4. Only a verified webhook marks a user as paid. Verify each Stripe webhook with the Stripe-Signature header, the endpoint's whsec_ secret and the raw request body; Stripe warns that unverified webhooks let attackers fake events that fulfil orders or grant access. Log event IDs to skip duplicates. Never let the browser write a paid or plan column (editorial): in the CVE-2025-48757 write-up, researchers inserted a record with a paid status that bypassed Stripe.[12], [13]
  • C5. Every endpoint that costs you money has a cap. OWASP LLM10:2025 calls it Denial of Wallet: someone drives up your pay-per-use bill. Its fixes: rate limits, per-user quotas, input size limits, timeouts, monitoring. As of October 2026, Vercel WAF rate limiting is on every plan, and Hobby gets 1 rule per project with 1,000,000 allowed requests included. OpenAI lets you set a monthly spend limit per organization or project with "Enforce a hard limit" on (requests then get a 429; enforcement is not instant, and alerts alone do not stop traffic). Anthropic lets you set your own spend limit below your tier's cap under Settings > Billing. Our rule of thumb (editorial): sign-in before any paid call, a daily cap per user, a cap on input length, and a hard limit you can afford to lose in a bad week.[14], [15], [16], [17]
  • C6. Untrusted text cannot steer your AI feature. OWASP LLM01:2025 says it is unclear whether any method fully prevents prompt injection, so limit the damage: least privilege for the model, privileged actions in your own code, untrusted content marked as such, outputs checked by deterministic code, and a person approving high-risk actions. Never give an LLM feature the Supabase secret key (editorial). Validate every input on the server with a schema library such as Zod.[18], [9]
  • C7. Dependencies are patched, and every package is real. Run npm audit and npm audit fix. npm's docs say --force lets audit fix install SemVer-major (breaking) versions, and they recommend not using it unless you know exactly what you want. Turn on Dependabot alerts. Before installing a package your AI tool suggested, check on npmjs.com that it exists and has a real history (editorial). Replit's Package Firewall, on by default, blocks packages Socket has flagged as malicious or compromised, and names slopsquats (package names an AI model invents and an attacker then registers) among the risks it covers. Keep Next.js patched: React2Shell (CVSS 10.0) hit App Router apps on 15.x and 16.x, and Next.js advised rotating secrets after the upgrade.[19], [20], [21], [22]
  • C8. AI agents stay away from production data. Replit gives every app separate development and production databases, and its Agent cannot modify production. For the Supabase MCP server, Supabase advises connecting to production only when a task needs it, scoping to one project, read-only mode for unattended work and approving each tool call. Do not run coding agents with permission-skipping flags on a machine holding production keys (editorial). Turn on MFA for GitHub, npm, your host and your database, as CISA urged after the Shai-Hulud npm worm.[23], [24], [25]
  • C9. You have restored a backup at least once. Know what your platform keeps (backups by platform below) and test one restore before launch (editorial). Storage files are not in Supabase or Lovable Cloud database backups, so copy them separately.[26], [58], [27]
  • C10. You know what personal data you hold, and where it goes. Collect only what the app uses. Find every place your code calls a logger, an analytics or error-tracking SDK, an email service or a model provider, and check what user fields each call sends; strip what the service does not need. Then publish a privacy policy that names those services and matches what you collect (editorial). See privacy basics below.
  • C11. Projects, chats and previews are no more public than you meant. On Lovable Free and Pro, projects are visible to the whole workspace and published sites to anyone with the link; only Business and Enterprise can restrict either. A v0 chat set to "Anyone on the web" may be indexed and shown in public galleries. On Vercel, set Deployment Protection to Standard at least, as Vercel advised after its April 2026 incident.[28], [29], [30]

Three audit prompts for your coding agent

Paste these into Cursor, Claude Code, Lovable, Bolt or Replit. Each asks for a report and no changes, so you read the findings before anything is edited. Treat the answer as a first pass: open the files and policies it names and check them yourself (editorial).

1. Audit RLS (covers C1)

List every table and view in the public schema. For each table, say whether RLS is enabled and list every policy with its command, role and condition. For each view, say whether it was created with `security_invoker = true`. Flag any policy that uses `true`, has no `to authenticated`, or lets a user read or change rows where `user_id` is not their own. Do not change anything yet.

2. Find secrets that reach the browser (covers C2)

Search this codebase for API keys, tokens and secrets. For each one, show the file and say whether that code runs in the browser or on the server. Treat the Supabase publishable or anon key as public and every other key as secret. Flag any secret that is prefixed `NEXT_PUBLIC_` or `VITE_`, read in client-side code, or saved in a file that git does not ignore. Do not change anything yet.

3. Check every server entry point (covers C3 and C4)

List every API route, Server Action, Route Handler, edge function and database function this app exposes. For each, say whether it can be called while signed out, what it checks before reading or writing data, and whether it confirms the signed-in user owns the row. Flag any that trusts a user ID, role, price or plan sent from the browser, and any check that only runs in the UI or in middleware. Do not change anything yet.

What went wrong in 2025 and 2026

Documented cases from researchers, vendors and the press. Most were exposures that researchers found and reported, not confirmed attacks. The last column points to the check that covers each one.

What went wrong in 2025 and 2026
WhenWhat was reportedPatternCheck
Mar to May 2025Researchers reported that 170 of 1,645 apps on Lovable's showcase had database endpoints readable or writable without login. Logged as CVE-2025-48757, which Lovable disputes: it says each customer is responsible for their app's data.RLS missing or too looseC1, C4
Jul 2025Wiz found undocumented Base44 endpoints that let anyone with a private app's public ID register on it. Fixed within about 24 hours; Wix found no evidence of abuse.Sign-up not enforced on the serverC3
Jul 2025SaaStr's founder reported that Replit's agent deleted his database during a code freeze: data loss, not a breach. Replit then separated development and production databases.Agent with write access to live dataC8, C9
Jul 2025General Analysis showed, on a test project with dummy data, that instructions planted in a support ticket could make Cursor with Supabase MCP (as service_role) leak a tokens table. A demonstration, not an incident.Untrusted text reaching an agent with broad accessC6, C8
Sep 2025RedHunt Labs scanned about 130,000 sites from 13 vibe-coding platforms and found about 25,000 unique secrets in client-side code.Secrets in browser codeC2
Sep 2025CISA reported that the Shai-Hulud worm compromised more than 500 npm packages and harvested GitHub tokens and cloud keys.Poisoned dependencyC7, C8
Dec 2025React2Shell, a CVSS 10.0 remote code execution flaw, hit Next.js App Router apps on 15.x and 16.x. No workaround: upgrade, then rotate secrets.Unpatched frameworkC7
Jan to Feb 2026Wiz found Moltbook's database open: a Supabase key in its JavaScript plus no RLS exposed about 1.5 million API tokens and 35,000 email addresses. Fixed about three hours after the report.RLS offC1
Feb 2026An exam app built with Lovable and featured on its Discover page: a researcher reported 16 flaws exposing 18,697 user records. One, repeated across several critical functions, was auth logic that blocked signed-in users and let anonymous users in. Lovable said the owner had not acted on its scan's recommendations and the database was not hosted by Lovable.Inverted auth logic in server functionsC3
Mar to Apr 2026A researcher reported that a free Lovable account could reach other users' code and chats on projects created before November 2025. Lovable apologised for re-enabling chat access on public projects by mistake; projects have been private by default since December 2025.Sharing wider than owners expectedC11
Apr 2026Vercel reported that an attacker came in through a third-party AI tool used by an employee and decrypted non-sensitive environment variables of a subset of customers.Secrets stored as readable configC2, C11

Sources accessed 2026-10-13. Counts are the researchers' own figures.[32], [13], [33], [34], [35], [36], [25], [22], [37], [38], [39], [30]

What your builder already scans

Each big browser builder now ships some checks. They catch common mistakes and do not replace C1 to C11. The last column is what each vendor says about the limits.

What your builder already scans
BuilderWhat it checksWhen and on which plansVendor on the limits
LovableQuick scan: database access rules, dependency vulnerabilities, MCP servers open without sign-in. Deep scan: all app code, including access control, secrets, payments and auth.Quick scan on every publish; Deep scan when you start it. Admins can block publishing while critical issues are open.The tools "cannot guarantee complete security"; Lovable suggests considering a professional review for sensitive data.
BoltSecurity audit: data access, public exposure, sign-in and sessions, input handling, keys and settings. Database check: rules and permissions.Audit on paid plans, up to 30 a day, no tokens when run from Publish. Database check on all plans.No completeness claim either way. Some fixes need manual changes in connected services, and restoring an old version removes Bolt's fixes.
ReplitAgent security scans: threat model and static analysis for SQL injection, XSS, CSRF and data leaking to logs or third parties. Package Firewall at install.Scans on paid plans. Package Firewall on by default."A scan is not a complete security review."
v0Analyses NEXT_PUBLIC_ usage and warns; can move code into Route Handlers or Server Actions. Vercel lists pre-deploy checks for exposed secrets and unsafe auth defaults.Built into generation and deploy. Vercel says v0 blocked over 100,000 insecure deployments (its own figure, August 2025).The security docs (updated 2026-10-10) state no limit on what the checks cover.

Plans and limits as of October 2026. Checked on vendor pages 2026-10-13.[40], [41], [42], [21], [43], [44]

Backups by platform

What each platform keeps for you as of October 2026. On every platform below, rolling back code and restoring data are separate steps.

Backups by platform
PlatformWhat is keptHow you restoreNot included
Supabase FreeNo automatic backups (pricing page: "Not included"). Supabase tells free projects to export regularly with supabase db dump and keep copies off-site.From your own exportsStorage files
Supabase Pro, Team, EnterpriseDaily backups kept 7, 14 and up to 30 days. Point-in-Time Recovery is a paid add-on (7, 14 or 28 days; needs at least Small compute).A daily backup, or a chosen moment with Point-in-Time RecoveryStorage files
Lovable CloudOne database backup a day, roughly 14 days kept.Daily snapshot only; anything after it is lostStorage files
ReplitDevelopment database: checkpoints, up to 7 days. Production: point-in-time restore and daily backups, up to 7 days on Core, 28 on Pro and Enterprise.Restore the database, roll back code to the matching checkpoint, publish againA database restore does not revert code, and the reverse
BoltProject version history, zip download, GitHub.Restoring a version does not change your Bolt or Supabase databasesDatabase data; no database backup retention stated

Checked on vendor pages 2026-10-13.[26], [58], [27], [45], [23], [46]

Hardening takes evenings. Check the idea first.

Policies, server checks, spend caps and a restore test take real hours, and they only pay off for an app people use (editorial). Describe your app and who it is for. Olune scores it free, then a free sign-in runs the research: search demand for phrases buyers might type, public complaints in Reddit threads found through Google, and competitors. You get Cook it, Sleep on it or Kill it, with the reasoning. It checks demand only, never your code. 3 a day, no card.

Free score, no account. The research needs a free sign-in.

Privacy basics (not legal advice)

A short orientation, not legal advice. If your app holds health, financial or children's data, talk to a lawyer before launch (editorial).

  • GDPR can apply outside the EU. The European Commission says GDPR covers organisations outside the EU that offer goods or services, paid or free, to people in the EU, or monitor their behaviour.[55]
  • A breach starts a 72-hour clock. Under GDPR, report a breach to the data protection authority within 72 hours of becoming aware of it, unless it is unlikely to put people at risk, and tell affected people without undue delay when their risk is high.[56]
  • The CCPA has thresholds. California's CCPA applies to for-profit businesses that meet at least one threshold, such as buying, selling or sharing the personal information of 100,000 or more California residents or households. The Attorney General's page lists them all.[57]
  • Know your processors. List every service that touches user data (database, auth, email, analytics, error tracking, model provider) and say in your privacy policy what each receives (editorial).

Ready to post anywhere?

Launch venues turn away a lot of first posts. Check these before launch week; rules as of October 2026. Venue-by-venue detail is on where to launch, and the plan around launch day is in how to launch a product.

  • Your own domain. BetaList says a startup must have its own domain and does not accept free hosting subdomains such as vercel.app or netlify.app. SaaSHub rejects free subdomains, waitlist pages and unreleased products. Connect a domain before you submit.[47], [48]
  • Accounts with some history. Product Hunt makes new accounts wait 1 week before posting and suggests joining three months or more ahead. Hacker News has temporarily restricted Show HN after a surge of posts from newcomers, and asks them to take part first.[49], [51]
  • Something people can try today. Show HN wants a non-trivial project people can try, ideally without a signup, and treats landing pages and sign-up pages as off-topic.[52]
  • A post you wrote yourself. Hacker News asks for no generated text in posts and no generated or AI-edited text in comments. Write the build story by hand: tools, what broke, what you changed (editorial).[53]
  • One venue at a time, inside its cap. Product Hunt allows one launch per product or root domain every six months unless a relaunch request is approved; a new UI or pricing change does not count. r/SaaS moderators limited self-promotion to once per 60 days in April 2026, counting posts, comment plugs and links.[50], [54]
  • C1 to C11 done. A launch sends strangers to your app on one day. Finish the data and access checks first.

Check demand before you spend a launch

Once C1 to C11 and a restore test are done, check the demand before you spend a launch on it. Describe the app and the person who would pay. Olune gives a free score, then, after a free sign-in, looks for search demand, public complaints found through Google, and competitors, and returns Cook it, Sleep on it or Kill it with its reasoning. The analysis is LLM-assisted and can vary between runs. Kill is a normal answer: a killed idea gets no Build Kit, and you can ask for 3 to 5 suggested pivots instead. 3 a day, no card.

Free score, no account. The research needs a free sign-in.

Common questions

Is Lovable secure?

Lovable scans apps for common problems, but your app's safety depends mostly on your own database rules, keys and server checks. Lovable says its scans cannot guarantee complete security. The incident table has three Lovable cases: loose RLS across showcased apps, inverted auth logic in an app whose owner had not acted on the scan's recommendations, and a permissions change that reopened chat access on public projects, which Lovable called a mistake. Run C1 to C3 whatever your builder, and C11 for sharing settings.

Should RLS be enabled in Supabase?

Yes, on every table in an exposed schema such as public; Supabase's own docs say so. With RLS on and no policies the publishable key reads nothing, so turn it on first, then add a policy per operation.

Is the Supabase anon key a secret?

No. The anon key, now the publishable key, is designed to be public and runs under your RLS policies. The secret key (legacy service_role) bypasses RLS and must stay on the server.

Do I need a security audit before launch?

If your app stores other people's health, financial or other sensitive data, yes; Lovable itself suggests considering a professional review for such apps. For a small app with test users, the eleven checks plus your builder's scanner cover the failures that show up most in the 2025 and 2026 reports (editorial).

How do I stop someone running up my OpenAI or Anthropic bill?

Set a hard spend limit at the provider and rate-limit the endpoint that calls it. Then require sign-in before any paid call and cap calls per user per day.

What should a vibe coding launch checklist include?

Data and access checks first (RLS, keys, server-side auth, webhooks, spend caps, backups, sharing settings), then launch readiness: your own domain, accounts with history, a hand-written post and a plan for each venue's cap.

Does Olune check my app's security?

No. Olune checks whether people want an app: search demand, public complaints and competitors. It does not read code, scan databases or test configuration.

Sources

Each number in brackets on this page points here. Prices and limits change; the date is when we read the page.

  1. [1]Supabase docs, Row Level Security · accessed
  2. [2]Supabase docs, Database Advisors (security lints) · accessed
  3. [3]Supabase docs, Understanding API keys · accessed
  4. [4]Next.js docs, Environment variables · accessed
  5. [5]Vite docs, Env variables and modes · accessed
  6. [6]Lovable docs, Secrets · accessed
  7. [7]Vercel docs, Config and Secret environment variables · accessed
  8. [8]GitHub docs, About push protection · accessed
  9. [9]Next.js docs, Authentication · accessed
  10. [10]Supabase docs, Server-side auth for Next.js · accessed
  11. [11]Supabase docs, Production checklist · accessed
  12. [12]Stripe docs, Receive Stripe events in your webhook endpoint · accessed
  13. [13]Matt Palmer, Statement on CVE-2025-48757 · accessed
  14. [14]OWASP GenAI, LLM10:2025 Unbounded Consumption · accessed
  15. [15]Vercel docs, WAF rate limiting · accessed
  16. [16]OpenAI API docs, Spend limits · accessed
  17. [17]Claude API docs, Rate limits (spend limits section) · accessed
  18. [18]OWASP GenAI, LLM01:2025 Prompt Injection · accessed
  19. [19]npm docs, npm audit · accessed
  20. [20]GitHub docs, About Dependabot alerts · accessed
  21. [21]Replit docs, Package Firewall · accessed
  22. [22]Next.js, Security advisory CVE-2025-66478 (React2Shell), 2025-12-03 · accessed
  23. [23]Replit docs, Development and production databases · accessed
  24. [24]Supabase docs, Model Context Protocol (MCP) · accessed
  25. [25]CISA, Widespread supply chain compromise impacting npm ecosystem, 2025-09-23 · accessed
  26. [26]Supabase docs, Database backups · accessed
  27. [27]Lovable docs, Database (Lovable Cloud backups) · accessed
  28. [28]Lovable docs, Privacy and security settings · accessed
  29. [29]v0 docs (llms.txt), chat sharing options · accessed
  30. [30]Vercel, April 2026 security incident bulletin · accessed
  31. [31]Supabase changelog, Tables not exposed to the Data and GraphQL API automatically · accessed
  32. [32]NVD, CVE-2025-48757 (tagged disputed) · accessed
  33. [33]Wiz Research, Base44 authentication bypass, 2025-07-29 · accessed
  34. [34]The Register, Replit response to the SaaStr database deletion, 2025-07-22 · accessed
  35. [35]General Analysis, Supabase MCP prompt injection demonstration, 2025-07-08 · accessed
  36. [36]RedHunt Labs, Secrets leaking through vibe-coded sites, 2025-09-23 · accessed
  37. [37]Wiz Research, Exposed Moltbook database, 2026-02-02 · accessed
  38. [38]The Register, Lovable-built exam app exposed user records, 2026-02-27 · accessed
  39. [39]The Register, Lovable and project data on public projects, 2026-04-20 · accessed
  40. [40]Lovable docs, Security overview · accessed
  41. [41]Bolt support, Security audit and database security check · accessed
  42. [42]Replit docs, Agent security scans · accessed
  43. [43]v0 docs, Security (updated 2026-10-10) · accessed
  44. [44]Vercel blog, v0 and vibe coding securely, 2025-08-04 · accessed
  45. [45]Replit docs, Data recovery · accessed
  46. [46]Bolt support, Rollback and backup · accessed
  47. [47]BetaList, FAQ · accessed
  48. [48]SaaSHub, Submit your product (rules) · accessed
  49. [49]Product Hunt, Before launch · accessed
  50. [50]Product Hunt help, Can I relaunch my product? (updated 2026-07-07) · accessed
  51. [51]Hacker News, Show HN restriction notice · accessed
  52. [52]Hacker News, Show HN guidelines · accessed
  53. [53]Hacker News, Guidelines · accessed
  54. [54]r/SaaS moderators, New rule against self-promo, 2026-04-14 · accessed
  55. [55]European Commission, Data protection explained · accessed
  56. [56]EDPB, Data protection guide for small business: data breaches · accessed
  57. [57]California Attorney General, California Consumer Privacy Act (updated 2026-08-28) · accessed
  58. [58]Supabase, Pricing (plan comparison: Automatic backups) · accessed
  59. [59]Supabase docs, JWT Claims Reference (anon and service role token examples) · accessed

Part of the vibe coding guide: what to check before, during and after the build.