The VibeRaven field guide
Guides for shipping AI-built apps
Build it. Connect it. Keep it working.
Practical guides for the services behind your app.
Free tools
Checks that run in your browser, with nothing sent anywhere.
Errors by provider
Exact error messages and their fixes, one index per provider.
- Provider errors: exact messages and their fixes
Exact Supabase, Vercel, Next.js and Stripe error messages with fixes: new row violates row-level security policy, FUNCTION_INVOCATION_FAILED, JWT expired.
Read error index - Supabase errors: exact messages and their fixes
Exact Supabase error messages with their causes and fixes: new row violates row-level security policy, JWT expired, Invalid API key, email rate limit exceeded.
Read error index - Vercel errors: exact messages and their fixes
Exact Vercel error messages and their fixes: FUNCTION_INVOCATION_FAILED, FUNCTION_INVOCATION_TIMEOUT, DEPLOYMENT_NOT_FOUND, MIDDLEWARE_INVOCATION_FAILED.
Read error index - Next.js errors: exact messages and their fixes
Exact Next.js error messages and fixes: useSearchParams() should be wrapped in a suspense boundary, Failed to collect page data, Failed to find Server Action.
Read error index - Stripe errors: exact messages and their fixes
Exact Stripe errors and fixes: No signatures found matching the expected signature for payload, No such price, Neither apiKey nor config.authenticator provided.
Read error index - Clerk errors: exact messages and their fixes
Exact Clerk errors with fixes: @clerk/nextjs keys missing, Clerk can't detect usage of clerkMiddleware, Production Keys are only allowed for domain.
Read error index - Resend errors: exact messages and their fixes
Exact Resend errors with fixes: You can only send testing emails to your own email address, Missing API key, No matching signature found.
Read error index - Auth.js errors: exact messages and their fixes
Exact Auth.js and NextAuth error messages with their fixes: [auth][error] UntrustedHost, [auth][error] MissingSecret and [next-auth][error][NO_SECRET].
Read error index - Turso errors: exact messages and their fixes
Exact Turso and libSQL errors with fixes: SERVER_ERROR HTTP status 401, URL_INVALID for an undefined URL, and drizzle-kit missing turso dialect params.
Read error index - Auth0 errors: exact messages and their fixes
Exact Auth0 errors in Next.js on Vercel with fixes: Callback URL mismatch, Not all required options were provided, The state parameter is invalid.
Read error index - MongoDB errors: exact messages and their fixes
Exact MongoDB and Mongoose errors on Vercel with fixes: MongoServerSelectionError, MongoParseError invalid scheme, MongooseError buffering timed out.
Read error index - PlanetScale errors: exact messages and their fixes
Exact PlanetScale errors with fixes: Prisma P3022 direct DDL is disabled, Prisma P3021 foreign keys cannot be created, TypeError: fetch failed.
Read error index - Better Auth errors: exact messages and their fixes
Exact Better Auth errors with fixes: Invalid origin, You are using the default secret, Database schema mismatch with missing tables.
Read error index
More providers: databases, auth, hosting, email and payments
Exact errors from databases, auth and hosting outside Supabase and Vercel, with the fix and how to check it.
- LibsqlError: SERVER_ERROR: Server returned HTTP status 401
Turso answers HTTP 401 when the auth token is missing, wrong or expired. Create a new token with the Turso CLI, set TURSO_AUTH_TOKEN in Vercel, redeploy.
Read guide - LibsqlError: URL_INVALID: The URL "undefined" is not in a valid format
createClient got undefined as its url because TURSO_DATABASE_URL has no value where the code runs. Set it in Vercel for each environment and redeploy.
Read guide - drizzle-kit: Please provide required params for "turso" dialect
drizzle-kit migrate prints url: undefined when TURSO_DATABASE_URL is not in the environment it runs in. It reads .env, not Next.js .env.local.
Read guide - Callback URL mismatch. The provided redirect_uri is not in the list of allowed callback URLs.
Auth0 rejects a redirect_uri that is not an exact entry in Allowed Callback URLs. In nextjs-auth0 v4 it comes from APP_BASE_URL or the request host.
Read guide - WARNING: Not all required options were provided when creating an instance of Auth0Client
nextjs-auth0 v4 logs this when AUTH0_DOMAIN, AUTH0_CLIENT_ID, AUTH0_SECRET or a client secret is missing. Set them in Vercel per environment and redeploy.
Read guide - The state parameter is invalid. (nextjs-auth0 on Vercel)
nextjs-auth0 v4 returns 500 "The state parameter is invalid." when no __txn_ cookie matches the callback. Use one origin and one secret.
Read guide - [Upstash Redis] Unable to find environment variable: UPSTASH_REDIS_REST_URL
Redis.fromEnv() only warns when the Upstash URL or token is missing, then the first command fails. Set both in Vercel for each environment and redeploy.
Read guide - UpstashError: WRONGPASS invalid or missing auth token
Upstash rejects a REST request when the token is missing or wrong. Use the REST token, not the TCP password, check which variable wins, then redeploy.
Read guide - How do I add Upstash rate limiting to a Next.js API route on Vercel?
Add @upstash/ratelimit to a Next.js route handler on Vercel: slidingWindow, the IP from x-forwarded-for, a 429 before the paid call, and the env vars.
Read guide - MongoServerSelectionError: Server selection timed out on Vercel with Atlas
Server selection timed out on Vercel usually means the Atlas IP access list blocks Vercel's dynamic IPs. Allow 0.0.0.0/0 or use Static IPs.
Read guide - MongoParseError: Invalid scheme, expected connection string to start with "mongodb://" or "mongodb+srv://"
MongoParseError Invalid scheme means MONGODB_URI does not start with mongodb:// or mongodb+srv://. Fix an empty or quoted value on Vercel, redeploy.
Read guide - MongooseError: Operation users.find() buffering timed out after 10000ms
Mongoose buffering timed out means a query ran before the connection was ready. On Vercel, await a cached connection and read the real connect error.
Read guide - Prisma P3022: Direct execution of DDL SQL statements is disabled on this database
Prisma P3022 on PlanetScale: DDL sent straight to a branch with safe migrations on is rejected. Push to a dev branch, then deploy a deploy request.
Read guide - Prisma P3021: Foreign keys cannot be created on this database (PlanetScale)
Prisma P3021 on PlanetScale: the database has foreign key constraints off. Set relationMode = "prisma" and add indexes, or enable foreign keys in settings.
Read guide - PlanetScale "TypeError: fetch failed" with getaddrinfo ENOTFOUND undefined on Vercel
The PlanetScale serverless driver throws "fetch failed ... ENOTFOUND undefined" when DATABASE_URL is empty at runtime. Add it in Vercel and redeploy.
Read guide - Port scan timeout reached, no open ports detected
Render fails a deploy with "Port scan timeout reached" when nothing listens on 0.0.0.0 and the PORT value. Bind there, keep start simple, redeploy.
Read guide - connect ENETUNREACH on Render with Supabase
connect ENETUNREACH from Render to db.<ref>.supabase.co: the direct host is IPv6 and Render has no outbound IPv6. Use the shared pooler on 5432 or 6543.
Read guide - Why are my VITE_ variables undefined on a Render static site?
Vite copies VITE_ values into the bundle during the build. On Render, set them before the build and rebuild after a change; Save only does not rebuild.
Read guide - ReferenceError: process is not defined
A Worker has no global process unless nodejs_compat is on. Read secrets from env or context.env, or set nodejs_compat with a date of 2025-04-01 or later.
Read guide - Uncaught Error: No such module "node:async_hooks"
A Worker or Pages Function imports a Node.js module without nodejs_compat. Add the flag with a compatibility_date of 2024-09-23 or later, then redeploy.
Read guide - Error: Cannot perform I/O on behalf of a different request
A Worker reused a stream, Response or database connection from an earlier request. Create the Postgres or Supabase client inside the handler, per request.
Read guide - Why does my Vite or React app show "Page not found" on Netlify when I refresh?
Netlify shows "Page not found" on refresh when a single-page app has no rewrite to index.html. Add /* /index.html 200 to a _redirects file in public/.
Read guide - Why is process.env undefined in my Netlify function?
A Netlify function reads undefined when the variable lacks the Functions scope, sits only in netlify.toml, or was set after the last deploy. Fix and check.
Read guide - Why are my VITE_ variables undefined on Netlify?
Vite bakes VITE_ values into the bundle at build time, and Netlify does not read .env files. Add them in Environment variables, then redeploy.
Read guide - S3 upload blocked by CORS policy: No "Access-Control-Allow-Origin" header is present on the requested resource
A browser PUT to a presigned S3 URL fails with No Access-Control-Allow-Origin when the bucket CORS rule is missing or lacks your origin. Add the rule.
Read guide - SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided
S3 answers 403 SignatureDoesNotMatch when the PUT differs from what the presigned URL signed. Check keys, signed headers, checksum, clock and region.
Read guide - CredentialsProviderError: Could not load credentials from any providers
The AWS SDK v3 found no credentials. On Vercel, add AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY for each environment, or pass credentials to S3Client.
Read guide - remote: error: GH013: Repository rule violations found for refs/heads/main
GitHub push protection blocked your push with GH013. Remove the secret from every commit it appears in, or bypass from the URL GitHub prints.
Read guide - I got a GitHub secret scanning alert for a leaked API key: what do I do first?
Rotate the key with its provider first, update Vercel and redeploy. GitHub says history cleanup is optional once the credential is revoked.
Read guide - Why is my GitHub Actions secret empty in a pull request from a fork or from Dependabot?
GitHub does not pass Actions secrets to runs from forks, and Dependabot runs only get Dependabot secrets. An unset secret is an empty string.
Read guide - "You can only send testing emails to your own email address"
Resend returns 403 validation_error when onboarding@resend.dev sends to anyone but your own account email. Verify a domain and change the from address.
Read guide - Missing API key. Pass it to the constructor new Resend("re_123")
The resend SDK throws this when RESEND_API_KEY is empty where new Resend() runs. On Vercel it often fails the build as "Failed to collect page data".
Read guide - Why is my Resend domain not verifying, and which DNS record is wrong?
A Resend domain stuck pending usually has records at the wrong DNS host, a proxied or conflicting CNAME, or a changed value. Checks and nslookup commands.
Read guide - You are using the default secret. Please set BETTER_AUTH_SECRET in your environment variables or pass secret in your auth config.
Better Auth throws this in production when no secret is set. Add BETTER_AUTH_SECRET in Vercel for Production and Preview, then redeploy.
Read guide - Why does Better Auth social login fail with redirect_uri_mismatch on Vercel?
Better Auth builds the OAuth redirect_uri from baseURL. Set BETTER_AUTH_URL to your production origin in Vercel and register the callback URL.
Read guide - Database schema mismatch: Missing tables user, session, account, verification
Better Auth logs Missing tables when production never got its schema. Run npx auth migrate, or generate and apply the migration for Drizzle or Prisma.
Read guide - No database connection string was provided to neon(). Perhaps an environment variable has not been set?
neon() got undefined, usually a missing DATABASE_URL. Add it in Vercel for the failing environment and redeploy. Driver 1.2.0 words the error differently.
Read guide - Prisma P1002 on Neon: Timed out trying to acquire a postgres advisory lock
Prisma P1002 on Neon: migrate waited 10 seconds for its advisory lock. Run migrations on the direct string (no -pooler); keep the pooled one for the app.
Read guide - Prisma P1001 on Neon: Can't reach database server
Prisma P1001 on Neon usually means the compute was asleep and the connection timed out first. Raise connect_timeout, check the host, then redeploy.
Read guide - Firebase: Error (auth/invalid-api-key).
getAuth() throws auth/invalid-api-key when apiKey is undefined, empty or has a colon. On Vercel, the NEXT_PUBLIC_ or VITE_ variable was missing at build.
Read guide - FirebaseError: Missing or insufficient permissions.
Firestore denied a client request under your Security Rules (code permission-denied). Check sign-in timing, the published rules and the query shape.
Read guide - Error: Could not load the default credentials.
firebase-admin found no Application Default Credentials. Vercel has none, so pass cert() with service account values from server-side variables.
Read guide - Why are my posthog-node events missing when the code runs in a Vercel function?
posthog-node queues events and sends them later, but a Vercel function can freeze after it returns. Await flush(), shutdown() or captureImmediate().
Read guide - How do I set up the PostHog reverse proxy in Next.js on Vercel?
Proxy PostHog through your own domain with Next.js rewrites. Without skipTrailingSlashRedirect every request gets a 308. Order the rewrites, set ui_host.
Read guide - Why does posthog.getFeatureFlag() return undefined on the first page load?
getFeatureFlag() is undefined until the flags request finishes, so new visitors see the wrong branch. Use onFeatureFlags, a hook default or bootstrap.
Read guide - Why does Sentry not capture server errors in my Next.js app on Vercel?
No server errors in Sentry from Next.js often means instrumentation.ts is in the wrong folder or lacks onRequestError. What each hides, and the fix.
Read guide - Why are some Sentry events blocked with "net::ERR_BLOCKED_BY_CLIENT", and does tunnelRoute fix it in Next.js?
net::ERR_BLOCKED_BY_CLIENT means the visitor's browser blocked the Sentry request. In Next.js, tunnelRoute sends events through your own domain.
Read guide - [sentry-vite-plugin] Warning: No auth token provided. Will not upload source maps.
The Sentry Vite plugin skips the source map upload when authToken is empty, and the build still passes. Set SENTRY_AUTH_TOKEN in Vercel and redeploy.
Read guide - Clerk: auth() was called but Clerk can't detect usage of clerkMiddleware()
auth() throws this in @clerk/nextjs when clerkMiddleware() did not run for the request. Check the proxy.ts or middleware.ts name, folder and matcher.
Read guide - Clerk: Refreshing the session token resulted in an infinite redirect loop
The @clerk/backend redirect loop log means the Clerk keys do not match, or the host is not one the instance knows. Re-copy both keys and check the host.
Read guide - Clerk: Production Keys are only allowed for domain
clerk-js throws this when a pk_live key runs on localhost or a Vercel preview URL. Use development keys there and keep live keys on Production only.
Read guide - Paddle.js checkout not opening: do I need Paddle.Environment.set("sandbox")?
A test_ client-side token needs the sandbox environment and a live_ token must not set it. Pass environment to initializePaddle, then redeploy.
Read guide - Which Paddle webhook event should grant access: transaction.completed or subscription.activated?
Paddle's provisioning guide grants access on subscription.created and rereads status on subscription.updated. transaction.completed fits one-off charges.
Read comparison - PolarClientError: Polar API returned an error: 401
Polar sandbox and production tokens are separate. @polar-sh/sdk 1.x reads environment, not server, so a call can reach api.polar.sh with a sandbox token.
Read guide - browserType.launch: Executable doesn't exist
Playwright cannot find the browser build for the version you installed. Run npx playwright install --with-deps before the tests in your CI job.
Read guide - How do I run Playwright tests against a Vercel preview that has Deployment Protection?
Send x-vercel-protection-bypass from Playwright extraHTTPHeaders, with the Protection Bypass for Automation secret stored in GitHub Actions.
Read guide - Error: Timed out waiting 60000ms from config.webServer.
Playwright waited 60000 ms for your webServer url and got no ready answer. Match url to the server port, make the page answer, then rerun.
Read guide - Turnstile siteverify error "timeout-or-duplicate" or "invalid-input-response"
Turnstile siteverify returns timeout-or-duplicate when a token is validated twice, invalid-input-response when expired. Verify once per submit in Next.js.
Read guide - captcha protection: request disallowed (no captcha_token found)
Supabase Auth returns captcha_failed when CAPTCHA protection is on and the request has no token. Pass options.captchaToken on sign up, sign in and reset.
Read guide - Possible misconfiguration of Vercel BotId. Ensure that the client-side protection is properly configured
checkBotId() logs this when the request lacks BotID headers. Add the path and method to initBotId protect, send with fetch, and test on a Vercel Preview.
Read guide - Cannot import $env/static/private into code that runs in the browser, as this could leak sensitive information
SvelteKit stops the build when code that reaches the browser imports a private env module. Read the variable in a server-only file and pass the result on.
Read guide - "SUPABASE_SERVICE_ROLE_KEY" is not exported by "virtual:env/static/private"
A SvelteKit build fails when an imported $env/static/private variable is not set while it builds. Add it in Vercel for that environment and redeploy.
Read guide - Cross-site POST form submissions are forbidden
SvelteKit answers 403 when a form POST comes from another origin or has no Origin header. Trust the sender with csrf.trustedOrigins, or fix the origin.
Read guide - Why are my Nuxt runtimeConfig values empty or undefined in production?
A Nuxt runtimeConfig value stays empty in production when the env var is not named NUXT_ plus the key path, or the key is missing from nuxt.config.
Read guide - Missing NUXT_PUBLIC_SUPABASE_URL, set it in .env or via runtimeConfig.public.supabase.url in nuxt.config.ts.
@nuxtjs/supabase warns Missing NUXT_PUBLIC_SUPABASE_URL when Nuxt loads it with no URL. Set NUXT_PUBLIC_SUPABASE_URL and _KEY in Vercel and redeploy.
Read guide - Hydration completed but contains mismatches.
Vue logs this when the Nuxt server HTML differs from the browser. A date in another time zone is a common cause after deploy; NuxtTime fixes it.
Read guide - Why does my Angular app return "404: NOT_FOUND" on Vercel?
An Angular app on Vercel shows 404: NOT_FOUND when the Output Directory is not dist/my-app/browser. Clear the override or set outputDirectory.
Read guide - Angular: "Uncaught ReferenceError: process is not defined" in environment.ts
Angular has no process.env in the browser bundle. Write the Vercel variable into environment.ts with a Node script before ng build, then redeploy.
Read guide - NG0507: HTML content was altered after server-side rendering
Angular NG0507 means the nghm comment was missing when hydration started. A CDN or build step removed comments from the SSR HTML. Turn that off.
Read guide - Why are my .env values undefined in Vitest, locally or in GitHub Actions?
Vitest loads only VITE_ names from .env files, and an uncommitted .env is missing in CI. Use loadEnv with test.env, or set env in the workflow.
Read guide - ReferenceError: document is not defined
Vitest runs tests in Node, where document and window do not exist. Set test.environment to jsdom or happy-dom, install it, or add a file comment.
Read guide - Failed to resolve import "@/lib/utils" from "src/App.tsx". Does the file exist?
Vitest does not read tsconfig paths unless told to. Add resolve.alias with an absolute path, vite-tsconfig-paths, or resolve.tsconfigPaths.
Read guide - No FastAPI entrypoint found in default locations
Vercel fails a FastAPI build with "No FastAPI entrypoint found" when no known file defines app. Rename the variable or set tool.vercel.entrypoint.
Read guide - ModuleNotFoundError: No module named "supabase" on a Vercel FastAPI app
ModuleNotFoundError on a Vercel FastAPI app means the package is missing from the dependency file Vercel found, next to your entrypoint or above it.
Read guide - FastAPI on Vercel: CORS error, "Access-Control-Allow-Origin" header missing
A CORS error from a Vite app to FastAPI on Vercel means no Access-Control-Allow-Origin header came back. Check the origins, the preflight and any 500.
Read guide - Missing secret_key_base for 'production' environment
Rails boots in production only with a secret_key_base. On Render, Railway, Fly.io or Heroku, set RAILS_MASTER_KEY or SECRET_KEY_BASE, then deploy again.
Read guide - [ActionDispatch::HostAuthorization::DefaultResponseApp] Blocked hosts: app.example.com
Rails answers 403 and logs "Blocked hosts" when config.hosts lacks the request host. Add the custom domain and the platform hostname, then deploy again.
Read guide - PG::DuplicatePstatement: prepared statement "a1" already exists
Rails raises PG::DuplicatePstatement on Supabase port 6543: transaction mode has no prepared statements. Set prepared_statements: false or use port 5432.
Read guide - Could not find an exported function in "api/index.go"
Vercel builds every .go file in api/ as a function and needs one exported func with http.ResponseWriter and *http.Request. Move helpers out of api/.
Read guide - ERROR: prepared statement "stmtcache_..." already exists (SQLSTATE 42P05)
pgx caches named prepared statements, which the Supabase pooler on port 6543 does not support. Add default_query_exec_mode=exec to the URL, or use 5432.
Read guide - token signature is invalid: signing method ES256 is invalid
golang-jwt rejects a Supabase token when WithValidMethods lists only HS256 but the project signs with ES256. Verify against the JWKS endpoint instead.
Read guide - Minified React error #185: Maximum update depth exceeded
Minified React error #185 is Maximum update depth exceeded in a production build. Find the layout effect, ref callback or store that loops, then fix it.
Read guide - Minified React error #418
Minified React error #418 means the HTML React hydrated did not match the first client render. Find the window, Math.random, date or nesting mismatch.
Read guide - useNavigate() may be used only in the context of a <Router> component.
React Router throws this when a hook runs outside a router or against a second copy of the package. In v6 production builds the message is empty.
Read guide - Why is LogRocket not recording sessions in my Next.js app on Vercel?
LogRocket records only where LogRocket.init runs in the browser with your app ID. Check dashboard limits, client-only init and the build-time env var.
Read guide - LogRocket: script could not load. Check that you have a valid network connection.
The logrocket package prints this warning when its logger script fails to load. Allow LogRocket in your CSP, test without extensions, or proxy it.
Read guide - How do I keep passwords, tokens and personal data out of LogRocket recordings?
LogRocket skips password inputs but records other fields and network calls by default. Use data-private, DOM sanitizers and network sanitizers.
Read guide - Why are my environment variables undefined in Storybook?
Storybook passes only STORYBOOK_ and VITE_ names (NEXT_PUBLIC_ with nextjs-vite) to stories. Rename the variable and set it where Storybook builds.
Read guide - invariant expected app router to be mounted
useRouter from next/navigation throws this when a story has no App Router context. Set nextjs.appDirectory to true in Storybook preview, or per story.
Read guide - Why does my Storybook on Vercel show 404 NOT_FOUND?
A Storybook deploy on Vercel shows 404 NOT_FOUND when the project builds the app, not Storybook, or the output directory is not storybook-static. Fix it.
Read guide
Check your own repo
Questions only your own code can answer: where a key is read, which tables are open, which variables are missing.
- How do I check if my Supabase service role key is in client code?
Grep the repo for SUPABASE_SERVICE_ROLE_KEY, sb_secret_ keys and public-prefixed names in browser files, then grep the built bundle for the key value.
Read guide - Are VITE_ environment variables exposed to the browser, and how do I find a secret in one?
Yes. Vite copies every VITE_ value into the browser bundle at build time. List the VITE_ names your repo uses and move any secret to a server function.
Read guide - Which env vars does my app read that are missing in Vercel production?
List the names your code reads with git grep, compare them with vercel env ls production, and redeploy after adding one. Deno.env names live in Supabase.
Read guide - Which of my Supabase tables can anyone read with the anon key?
Review Supabase anon read access with table and column grants, RLS and policies. A SQL query narrows the review; test the actual columns and role too.
Read guide - How do I find Supabase queries with no row limit in my app?
Find every .from().select() with no .limit(), .range() or .single(). Supabase caps a response at 1,000 rows by default, which hides the problem.
Read guide - Do my Next.js API routes have rate limiting, and how do I check?
List your route handlers and server actions, mark the ones that cost money, and find a limit in front of each: a Vercel WAF rule or a limiter in the code.
Read guide - Does my Next.js app send a Content-Security-Policy header?
Check the live response with curl -sI, then find where the repo sets it: headers() in next.config, proxy.ts (middleware.ts before Next.js 16) or vercel.json.
Read guide - Is my .env file committed to git, and what do I do if it is?
git ls-files shows the env files git tracks, git log --all every commit that touched one. If you find one, rotate the keys first, then untrack the file.
Read guide - Do my Supabase migrations match what is live in production?
supabase migration list --linked compares migration timestamps and supabase db diff --linked the schema. A non-empty diff means live changes the repo lacks.
Read guide
Vibe-coded apps
From "it works on my machine" to real users: securing, deploying and launching an app you built with an AI agent.
- I vibe coded an app. Now what?
You vibe coded an app and it works. The steps to real users: secrets, RLS, auth, payments, env vars, monitoring, backups, domain and email, legal, launch day.
Read guide - How do I secure a vibe-coded app?
Secure a vibe-coded Vercel + Supabase app in order of risk: RLS on every table, secret keys off the client, signed webhooks, locked-down functions. With SQL.
Read guide - How do I deploy a vibe-coded app to Vercel and Supabase?
Deploy a vibe-coded app to Vercel + Supabase: env vars per environment, preview vs production, migrations, Stripe live keys and webhooks, a custom domain.
Read guide - Is vibe coding production ready?
Vibe coding can ship production apps, but its gaps are predictable: open RLS, secret keys in the client, unsigned webhooks. What the evidence shows.
Read guide - What are the security risks of vibe coding?
The concrete security risks in vibe-coded apps: open RLS, keys in client bundles, unsigned webhooks, security definer functions, .env in git, no rate limits.
Read guide - What went wrong in the real vibe coding horror stories?
Documented vibe coding incidents from 2025 and 2026: open Supabase databases, deleted production data, an auth bypass. What happened, the root cause, the fix.
Read research - Claude Code Security vs a pre-deploy review: what does each one do?
What Anthropic's Claude Code Security, /security-review and Code Review do, from Anthropic's docs, and how a Vercel + Supabase pre-deploy review differs.
Read comparison
Supabase RLS and keys
Row level security, the anon and service role keys, grants and the Security Advisor, answered from the Supabase docs.
- Is the Supabase anon key safe to expose?
Yes. The anon and publishable keys are public by design; RLS and grants decide what they reach. npx -y viberaven check finds tables without RLS.
Read guide - What is the Supabase anon key, and where do I find it?
Supabase anon key: Settings > API Keys in the dashboard, the long key starting eyJ. Its replacement, the publishable key (sb_publishable_), is also in Connect.
Read guide - Where do I find the Supabase service role key?
Find SUPABASE_SERVICE_ROLE_KEY in Settings > API Keys (eyJ, or sb_secret_). In a public .env, a repo or a NEXT_PUBLIC_ variable? Treat it as leaked.
Read guide - Why is my Supabase RLS policy not working?
Empty rows mean the request ran as anon (auth.uid() is null) or no policy matched; 42501 is a missing grant; the service_role key skips RLS. Fix per symptom.
Read guide - Why does my Supabase select return an empty array with no error?
A Supabase select that returns [] and error null usually means row level security hid every row: RLS on with no SELECT policy, or no user session.
Read guide - Cannot coerce the result to a single JSON object
PGRST116 "Cannot coerce the result to a single JSON object" means .single() got 0 rows or more than 1. Use .maybeSingle(), or fix the filter or RLS policy.
Read guide - Supabase Realtime not working: find the missing update
SUBSCRIBED but no updates? Trace Supabase Postgres Changes through publication, user access, filters and UI state, with a diagnostic probe and test worksheet.
Read guide - How do I test Supabase RLS policies?
Test Supabase RLS with a pgTAP file per table: switch to anon and authenticated, set the user id, and assert what each can read, insert, update and delete.
Read guide - What is the difference between USING and WITH CHECK in a Supabase RLS policy?
USING filters which existing rows a command can see or change; WITH CHECK decides which new rows may be written. Which commands take which, with examples.
Read comparison - What does using (true) mean in a Supabase RLS policy, and when is it wrong?
using (true) makes a Supabase RLS policy match every row for its roles: fine for public reads, wrong on update, delete or all. How to find and replace them.
Read guide - Supabase service role key leaked or exposed: how do I rotate it?
A service role key in a browser bundle, a NEXT_PUBLIC_ or VITE_ variable or git is leaked. Fix the leak, move servers to a new secret key, then retire the old.
Read guide - Is my SUPABASE_SERVICE_ROLE_KEY exposed in a public .env file?
Check a .env in a public repo, /.env on your domain, NEXT_PUBLIC_ or VITE_ in the bundle, and GitHub alerts. If the key is out, rotate it and redeploy.
Read guide - Supabase API keys: publishable, secret, anon or service role?
The publishable key (sb_publishable_) replaces the anon key and the secret key (sb_secret_) replaces service_role. Same roles, same RLS. Legacy keys go in 2026.
Read guide - Is Supabase safe for production?
Yes, with RLS on every exposed table, policies that check the caller and the secret key kept on your server. The Supabase platform is SOC 2 Type 2 compliant.
Read guide - What do the Supabase Security Advisor warnings mean, and how do I fix them?
What rls_disabled_in_public, security_definer_view, function_search_path_mutable and other Supabase Security Advisor warnings mean, and the fix for each.
Read guide - What does rls_disabled_in_public mean, and how do I fix it?
rls_disabled_in_public: a public Supabase table with row level security off. Enable RLS, add policies. npx -y viberaven check finds them in migrations.
Read guide - What does security_definer_view mean, and how do I fix it?
security_definer_view is a Supabase Security Advisor error: a view that runs as its owner and skips RLS. Set security_invoker = true, then check the fix.
Read guide - What does function_search_path_mutable mean, and how do I fix it?
function_search_path_mutable is a Supabase Security Advisor warning: a function with no fixed search_path. Set it to empty, qualify names, then check.
Read guide - What does rls_enabled_no_policy mean, and how do I fix it?
rls_enabled_no_policy is a Supabase Security Advisor notice: RLS is on but the table has no policy, so API reads come back empty. Add policies, then check.
Read guide - What does permissive_rls_policy (rls_policy_always_true) mean, and how do I fix it?
permissive_rls_policy, reported as rls_policy_always_true, is a Supabase Advisor warning for a policy with check (true) or using (true) on writes. The fix.
Read guide - What does sensitive_columns_exposed mean, and how do I fix it?
sensitive_columns_exposed is a Supabase Security Advisor error: an API table with RLS off and a column like password, token or ssn. Enable RLS, then check.
Read guide - What does auth_rls_initplan mean, and how do I fix it?
auth_rls_initplan is a Supabase Performance Advisor warning, not a security one: auth.uid() runs once per row. Wrap it in select, then check the fix.
Read guide - What does authenticated_security_definer_function_executable mean, and how do I fix it?
authenticated_security_definer_function_executable: any signed-in user can call a security definer function that skips RLS. Revoke it from authenticated.
Read guide - Can anyone call my Supabase RPC functions with the anon key?
Lint 0028: anon can call it at /rest/v1/rpc, and one owned by postgres skips RLS. Revoke EXECUTE, set search_path. Find them: npx -y viberaven check.
Read guide - Supabase "permission denied for table" (42501) on new tables since October 30, 2026: the Data API grants change
Since October 30, 2026 new public tables on existing Supabase projects get no Data API grant and return 42501. Grant them; npx -y viberaven changes lists them.
Read guide - Supabase "permission denied for table" (42501): the missing grant and the fix
Supabase "permission denied for table" (42501): the anon or authenticated role has no grant. Not an RLS policy. Fix: grant select on the table to that role.
Read guide - Supabase "email rate limit exceeded": why sign-up emails stop, and the fix
Supabase Auth returns email rate limit exceeded (429) after 2 emails an hour on the built-in provider. Set up custom SMTP, then raise the limit in Rate Limits.
Read guide - Why is my Supabase confirmation email not arriving, and how do I turn off Confirm email?
Supabase sends 2 auth emails an hour on its built-in provider, only to your team. Add custom SMTP, or turn off Confirm email, and fix where the link lands.
Read guide - Why does Supabase login redirect to localhost in production?
Supabase sends users to the Site URL, often localhost:3000, when redirectTo is not in the Redirect URLs list. Set the Site URL and allow your production URL.
Read guide - Supabase Storage upload fails with "new row violates row-level security policy" or "must be owner of table objects": the fix
Storage uploads need an INSERT policy on storage.objects, and upsert also needs SELECT and UPDATE. Never alter storage.objects: RLS is already on.
Read guide - new row violates row-level security policy
Supabase "new row violates row-level security policy" (42501): no INSERT or UPDATE policy passed the row. Add one with WITH CHECK, and SELECT for .select().
Read guide - Invalid API key
Supabase "Invalid API key" (401): the apikey header holds a key this project does not accept, such as one from another project. Copy both from one project.
Read guide - No API key found in request
Supabase 401 "No API key found in request": the request reached the API gateway with no apikey header. Send the publishable key, set the env var, redeploy.
Read guide - AuthSessionMissingError: Auth session missing!
Supabase AuthSessionMissingError: getUser() or updateUser() ran on a client with no session: a signed-out visitor, or server code without the auth cookies.
Read guide - Edge Function returned a non-2xx status code
Supabase "Edge Function returned a non-2xx status code" hides the real error: read error.context for the status and body, then fix the function or its secrets.
Read guide - Failed to send a request to the Edge Function
supabase-js throws FunctionsFetchError when the request never got a response: a wrong project URL, a function not deployed, CORS, or a timeout.
Read guide - infinite recursion detected in policy for relation
Postgres raises 42P17 when an RLS policy queries its own table, often an admin check on profiles. Move the check into a security definer function.
Read guide - permission denied for schema public
Postgres 42501 for a schema means the API roles lost USAGE on it. Grant usage on schema public to anon, authenticated and service_role, then the tables.
Read guide - Could not find the table 'public.<table>' in the schema cache
PGRST205 means the Supabase API has no table by that name: a typo, a migration not applied to this project, or a stale cache. Check, then reload the schema.
Read guide - JWT expired
Supabase returns 401 JWT expired when a request carries an access token past its exp, often one copied into a header or cookie and never refreshed.
Read guide - Error sending confirmation email
Supabase returns 500 "Error sending confirmation email" when the SMTP server refuses the message. With Resend, check the API key, sender domain and port.
Read guide - connect ENETUNREACH
connect ENETUNREACH from Railway to db.<ref>.supabase.co: the direct host is IPv6 only and Railway egress is IPv4 by default. Use the session pooler on 5432.
Read guide - Too many subrequests by single Worker invocation.
Each supabase-js call in a Worker is a subrequest: 50 per request on Free, 10,000 on Paid. Replace per-row queries with in() or an embed, or raise the limit.
Read guide - Secrets scanning found secrets in build
Netlify fails the build when a variable marked secret, such as VITE_SUPABASE_ANON_KEY, is in the bundle. Omit public keys only; the service key must fail.
Read guide - How do I find Supabase tables missing RLS in my migrations?
Find tables missing RLS in ordered public-schema migrations, with reproducible SQL examples and a pg_tables query. Confirm production with the Security Advisor.
Read guide - What can a repo scan prove about Supabase security, and what needs a live test?
A repo scan reads what your migrations and code say. Applied migrations, live grants, dashboard settings and how policies treat real users need the database.
Read comparison - What Is RLS on Supabase? (AI-Built Apps)
What is RLS on Supabase for AI-built apps: row-level security basics, policies, service-role risk, and how to verify database access before launch.
Read guide - Supabase Auth and RLS Checklist for AI-Built Apps
Check Supabase auth, RLS policies, service-role key usage, storage access, migrations, and production data boundaries before launching an AI-built app.
Read checklist - Clerk + Supabase third-party auth: RLS on the auth.jwt() sub claim, the grant to authenticated since October 30, 2026 (42501), and the JWT template it replaced
Clerk + Supabase in 2026: native third-party auth, Clerk's token as accessToken, RLS on auth.jwt() sub, and since Oct 30 a grant to authenticated, or 42501.
Read guide - Supabase AI App Production Checklist
Launch your Supabase app with checks for migrations, login, RLS, Storage and Edge Functions. Know what should pass, what to fix and what needs a live test.
Read checklist - Supabase OrioleDB public beta (October 28, 2026): how to enable it, what is not supported yet, and whether RLS and grants change
OrioleDB is in public beta on every Supabase plan since October 28, 2026. You pick it when you create a project. The limits, and what happens to RLS and grants.
Read guide - Supabase Compute private alpha (October 27, 2026): run agents and background jobs inside your Supabase project
Supabase Compute runs agents, jobs and APIs next to your database, from Node, Deno or a Dockerfile. Private alpha since October 27, 2026, us-west-2 only.
Read guide - How do I give my Supabase app its own MCP server, so ChatGPT and Claude act as the signed-in user under RLS?
Supabase's MCP Server block puts an MCP server in an Edge Function. Users sign in with OAuth 2.1, each tool call runs as them, and RLS decides what it reads.
Read guide - How do I run several local Supabase projects at once, one per coding agent or git worktree, with or without Docker?
Supabase CLI v2.119.0 runs one local project per git worktree on its own ports, and a native runtime with no Docker. Turn on stack, drop the fixed ports.
Read guide - Supabase personal access token scopes: how do I give an agent or CI a token for one project with only the permissions it needs?
Supabase Dashboard tokens are scoped by default: projects, Read or Read-write per resource, an expiry. What an agent needs, the 403, and the CLI.
Read guide
Launch checklists by stack and tool
Step-by-step checks before real users, for the builder, coding agent, auth and monitoring you use.
- My Lovable + Supabase app launches Friday. What should I check first?
What to check first before a Lovable + Supabase app goes live: RLS on every public table, which key ships to the browser, a two-account test and auth URLs.
Read checklist - How do I move a Bolt app's database, auth users and storage to my own Supabase project?
Move a Bolt app to your own Supabase: claim its Bolt Database (Pro or Teams) to transfer the Supabase project. Connect swaps the database. Files need a script.
Read guide - What should I check before handing an AI-built app to a client?
Before handing an AI-built Vercel + Supabase app to a client: transfer the projects, rotate keys, list env vars, check Stripe live mode, auth URLs and backups.
Read checklist - What is an AI app readiness check, and what should it cover before launch?
An AI app readiness check covers what a demo cannot show: RLS, secret keys, env vars, auth URLs, webhooks, storage, backups, errors and rollback.
Read guide - AI App Production Checklist
AI app production-ready checklist: auth, billing, database, deploy, monitoring and test gaps before launch, and what a repo check covers on Vercel + Supabase.
Read checklist - Lovable Post-Launch Checklist
Recheck the published Lovable URL, not the preview: sign-in on your domain, data that survives a reload, private rows, no secret keys in frontend, live Stripe.
Read checklist - How do I test a Lovable app before launch?
Test a Lovable app in 4 steps: browser testing on the preview, private rows checked with two accounts, the Quick and Deep scans, then retest the published URL.
Read guide - How do I monitor a Lovable app after launch?
What Lovable shows after you publish (Analytics, Logs, Usage, Project monitoring), what Supabase adds, how to add Sentry, and what to check daily after launch.
Read guide - What does Lovable's security scan check, and what can it not see?
Lovable's Quick scan runs on every publish; the Deep scan reviews your code. What each checks, what Lovable says they can't promise, and what a repo check adds.
Read guide - Lovable Cloud vs your own Supabase: which should you use, and how do you move off Lovable Cloud?
Lovable Cloud runs a Supabase backend Lovable manages; your own Supabase gives you the dashboard and keys. No switch button: moving off is export and restore.
Read comparison - Lovable Test and Live environments retired on October 23, 2026: Test databases are deleted December 1, and drafts use your live data
Lovable retired Test and Live on October 23, 2026 and deletes the detached Test databases on December 1. Drafts preview code, not data: they use your live DB.
Read guide - Lovable AI model retirement dates: Gemini 3.6 Flash on November 19, 2026, Gemini 3.7 Flash on January 28, 2027, and what your app gets after
Lovable retires Gemini 3.6 Flash for app AI features on Nov 19, 2026 and 3.7 Flash on Jan 28, 2027, routing them to Gemini 3.8 Flash. Some retired models fail.
Read guide - Railway stops reading railway.json and railway.toml on December 1, 2026: migrate to .railway/railway.ts with railway config migrate
Railway stops reading railway.json and railway.toml on December 1, 2026. Run railway config migrate; npx -y viberaven changes finds them in your repo.
Read guide - Railway security incident of October 21, 2026: roll the Supabase, Stripe and AI keys in your Railway variables, then fix failing deploys
Railway says an attacker decrypted environment variables for a subset of workspaces in October 2026. Roll every secret stored there, then reconnect GitHub.
Read guide - Cursor Production Readiness Checklist
Check a Cursor-built app before launch: auth, env vars, billing, database, deploy, monitoring and tests, plus what a repo check covers on Vercel + Supabase.
Read checklist - Claude Code Production Checklist
Check a Claude Code-built app before launch: auth, env vars, database rules, Stripe webhooks, Vercel deploy, monitoring, tests and the next Claude prompt.
Read checklist - What did our Claude Code rules vs hooks pilot show?
A local Claude Code pilot compares project rules and generated hooks: an approved commit was blocked, with coverage limits and a manual compaction followup.
Read research - Codex Production Readiness Guide
Production readiness for Codex-built apps: map the stack, verify auth and billing, check deploy and monitoring, and write focused Codex prompts.
Read guide - AI App Auth Production Checklist
Check an AI-built app's auth before launch: server-side enforcement, callback URLs, sessions, route protection, user ownership and the next coding-agent prompt.
Read checklist - Clerk Production Setup Checklist for AI-Built Apps
Clerk production checklist for AI-built apps: production instance, live keys, domains, redirect URLs, OAuth, webhooks, Vercel env vars and authorization.
Read checklist - "@clerk/nextjs: Clerk keys are missing from your environment": the fix now that keyless mode is gone
Since @clerk/nextjs 7.8.0, a Next.js app with no Clerk keys throws instead of running keyless. Set both keys locally and on Vercel, then redeploy.
Read guide - Clerk secret key not showing in the Dashboard: since October 19, 2026, the full key is shown only once, when you add it
Since October 19, 2026, the Clerk Dashboard shows a Secret key in full only when you add it. Add a new key, set CLERK_SECRET_KEY, redeploy, delete the old.
Read guide - Clerk +clerk_test email not received: since October 26, 2026, Clerk sends no email to test addresses while Test mode is on
Since October 26, 2026, Clerk sends no email to +clerk_test addresses in Test mode. Sign in with code 424242, or use a real inbox for links and invitations.
Read guide - Auth.js Production Checklist for AI-Built Apps
Check Auth.js or NextAuth before production: AUTH_SECRET, AUTH_URL, provider callbacks, cookies, middleware, adapters, preview URLs, and server authorization.
Read checklist - [next-auth][error][NO_SECRET]
NextAuth stops in production without a secret: set AUTH_SECRET or NEXTAUTH_SECRET in Vercel and redeploy. On Vercel you need no NEXTAUTH_URL or AUTH_TRUST_HOST.
Read guide - [auth][error] UntrustedHost: Host must be trusted
Auth.js v5 throws UntrustedHost when trustHost is off in production. On Vercel the VERCEL variable turns it on; self-hosted, set AUTH_TRUST_HOST=true.
Read guide - [auth][error] MissingSecret: Please define a secret
Auth.js v5 logs MissingSecret when no AUTH_SECRET reaches the server. Generate one with npx auth secret, add it in Vercel for each environment, redeploy.
Read guide - Invalid origin
Better Auth answers 403 Invalid origin when the Origin is not in trustedOrigins. Add your preview URL pattern, scoped to your project, not *.vercel.app.
Read guide
Monitoring and analytics
Errors, monitoring and product analytics after deploy: Sentry setup, and PostHog events that do not arrive.
- Do AI-Built Apps Need Sentry Before Launch?
Do AI-built apps need Sentry before launch? When error monitoring is required, what to check first, and what the one VibeRaven monitoring note covers.
Read guide - Sentry Setup Checklist for AI-Built Apps
Set up Sentry in a Next.js or Vite + React app on Vercel, from Sentry's docs: wizard, DSN, environment, release, source maps, test errors and one alert.
Read checklist - PostHog events not showing in a Vite app on Vercel
No events after a Vercel deploy? Trace one action from the Vite build to PostHog: env names, region, consent, blocked requests and duplicate pageviews.
Read guide - Invalid Sentry Dsn: undefined
Sentry logs Invalid Sentry Dsn: undefined when an unset DSN variable became the text "undefined". Set it where the app builds, pass it as is, redeploy.
Read guide - Why does Sentry show minified stack traces for my Next.js app on Vercel, and how do I upload source maps?
Minified Sentry stack traces on Vercel mean no source maps reached Sentry for that build. Set SENTRY_AUTH_TOKEN in Vercel, use withSentryConfig, redeploy.
Read guide - Is the PostHog project API key safe to expose in the browser?
PostHog says the phc_ project token can be public: it sends events and evaluates flags. A phx_ personal API key or a phs_ secret key must stay on the server.
Read guide
Stripe and webhooks
Webhook signatures, live mode and billing state for Stripe, Paddle and Polar.
- Stripe webhooks in Next.js and Supabase apps: the questions, answered
Stripe webhook errors in AI-built Next.js, Vercel and Supabase apps, one page each: signature errors, raw body, secrets, Checkout, duplicates, Edge Functions.
Read guide - Why does Stripe say "No signatures found matching the expected signature for payload"?
Stripe "No signatures found matching the expected signature for payload": the body was parsed before verification or the whsec_ secret is wrong. Use req.text().
Read guide - How do I read the raw body for a Stripe webhook in the Next.js App Router?
In a Next.js App Router route handler, read a Stripe webhook body with await req.text() and pass it to constructEvent unchanged. No bodyParser config needed.
Read guide - Is the Stripe webhook secret different in test and live mode?
Yes: every Stripe endpoint has its own whsec_ secret, a different one per mode, and stripe listen prints a third. Which secret goes in which environment.
Read comparison - Do I need a Stripe webhook if I use Stripe Checkout?
Yes, if access depends on the payment. Stripe says the Checkout success page is not reliable for fulfillment, and subscriptions need webhooks. What to handle.
Read guide - How do I stop a Stripe webhook from processing the same event twice?
Stripe can deliver the same webhook event more than once. Record each event ID with a primary key, in the same transaction as the grant, and skip repeats.
Read guide - Why does Stripe say "SubtleCryptoProvider cannot be used in a synchronous context" in a Supabase Edge Function?
Stripe throws "SubtleCryptoProvider cannot be used in a synchronous context" in Supabase Edge Functions. Verify with constructEventAsync instead.
Read guide - Stripe "The payment_method_types parameter is no longer supported": the Endive fix
Stripe API 2026-09-30.endive removed payment_method_types, and stripe-node 23 pins it. Delete the param, or pass allowed_payment_method_types instead.
Read guide - Stripe MCP after November 30, 2026: full-access sk_ keys and untagged rk_ keys get a 401, so switch to OAuth or an agent API key
From December 2026 Stripe MCP rejects full-access secret keys and restricted keys without the Agent tag with a 401. Use OAuth or an agent API key instead.
Read guide - Neither apiKey nor config.authenticator provided
stripe-node throws it when new Stripe() gets an empty key, such as STRIPE_SECRET_KEY unset at build time. Invalid API Key provided means Stripe rejected it.
Read guide - No such price: 'price_...'
Stripe says No such price when the price ID is not in the account or mode of your secret key, often a test price with a live key. Use that mode's price ID.
Read guide - Stripe webhooks to a Vercel preview: Deployment Protection and x-vercel-protection-bypass
Vercel Deployment Protection stops Stripe before your route on preview URLs. Add x-vercel-protection-bypass to the endpoint URL, with a secret just for Stripe.
Read guide - [Paddle] Webhook signature verification failed
Paddle signs ts:rawBody with the destination secret. Verification fails if the body was parsed, the pdl_ntfset_ key is wrong, or the ts is over 5 seconds old.
Read guide - How do I verify Polar webhooks in a Next.js App Router route and grant access after a subscription event?
Verify Polar webhooks in a Next.js route with Webhooks from @polar-sh/nextjs and POLAR_WEBHOOK_SECRET, then grant access on subscription.active.
Read guide - Why does Lemon Squeezy X-Signature webhook verification fail in Next.js?
Lemon Squeezy signs the raw body with HMAC SHA-256 in X-Signature. Read it with request.text(), use that webhook's signing secret, compare hex digests.
Read guide - No matching signature found
A Resend webhook into a Supabase Edge Function needs verify_jwt = false, then svix on the raw body. Parsing JSON first fails with No matching signature found.
Read guide - How do I check the Stripe webhooks, env vars and Supabase policies in an app Claude Code wrote?
Check an app Claude Code wrote: Stripe webhook signatures over the raw body, env vars per Vercel environment, and Supabase RLS policies tested as real roles.
Read guide - Stripe Webhook Checklist for AI-Built Apps
Stripe webhook checklist for AI-built SaaS: checkout, signing secret, idempotency, subscription state, entitlements and prompts that verify billing end to end.
Read checklist
Vercel and env vars
Preview to production on Vercel, and the environment variables a deploy needs.
- Vercel for AI-built apps: the deploy, env var and function questions
The Vercel problems AI-built apps hit after deploy, one question per page: env vars, NEXT_PUBLIC_ keys, 404 on refresh, function crashes and timeouts.
Read guide - Vercel Preview to Production Checklist
Use this Vercel preview-to-production checklist for AI-built apps: env vars, domains, redirects, webhooks, build settings, monitoring, and rollback readiness.
Read checklist - Why does my Vercel app not see the environment variable I just added?
Vercel applies environment variable changes only to new deployments. Redeploy without the build cache; NEXT_PUBLIC_ values change only in a new build.
Read guide - Vercel "This Serverless Function has crashed": what FUNCTION_INVOCATION_FAILED means and how to fix it
"This Serverless Function has crashed" (500 FUNCTION_INVOCATION_FAILED): read the first error in the Logs tab. Often an env var is unset for that environment.
Read guide - Why does my Vercel function time out with FUNCTION_INVOCATION_TIMEOUT?
A Vercel function that runs past its max duration returns 504 FUNCTION_INVOCATION_TIMEOUT. The limit on each plan, how to raise maxDuration, and when to stream.
Read guide - Why does my Vite or React app 404 on refresh on Vercel?
A Vite or React single-page app on Vercel returns 404 on refresh because no file exists at that path. One rewrite to index.html in vercel.json fixes it.
Read guide - Are NEXT_PUBLIC_ environment variables exposed to the browser?
Yes. Next.js inlines every NEXT_PUBLIC_ value into the JavaScript it sends to the browser at build time. Which keys are safe there, and which never are.
Read guide - What are sensitive environment variables on Vercel?
Vercel now calls sensitive environment variables Secret: write-only once saved. What that protects, and why a NEXT_PUBLIC_ value still reaches the browser.
Read guide - Which env vars does the Supabase Vercel integration add?
The Supabase integration syncs POSTGRES_URL, the Supabase keys and two NEXT_PUBLIC_ variables to Vercel. Which one each part of your app should read.
Read guide - "Your project's URL and Key are required to create a Supabase client!" on Vercel: the fix
Your project's URL and Key are required (or supabaseUrl is required.) means the Supabase URL or key env var was empty. Set both in Vercel and redeploy.
Read guide - Node.js Version "20.x" is discontinued and must be upgraded on Vercel: the fix
Vercel stopped building with Node.js 20 on 2026-10-01. Change engines.node in package.json, or the Project Settings version, to 24.x or 22.x, then redeploy.
Read guide - Next.js "Uncached data was accessed outside of <Suspense>": why new apps hit it, and the fix
Since create-next-app 16.4, a page that reads cookies() or uncached data outside Suspense fails next build. Wrap the read in Suspense, or cache it.
Read guide - Failed to collect page data for
"Failed to collect page data for /route": importing that route threw during next build, such as a client made from a missing env var. Read the error above it.
Read guide - ERR_PNPM_OUTDATED_LOCKFILE
Vercel builds with CI=1, so pnpm refuses a pnpm-lock.yaml that no longer matches package.json. Run pnpm install locally and commit it with package.json.
Read guide - MIDDLEWARE_INVOCATION_FAILED
Vercel returns 500 MIDDLEWARE_INVOCATION_FAILED when middleware.ts or proxy.ts throws, often a client made from a missing env var. Read the runtime log first.
Read guide - DEPLOYMENT_NOT_FOUND
Vercel returns 404 DEPLOYMENT_NOT_FOUND when no deployment answers that URL: a typo, a deleted preview, or a domain not added to the project. Check the URL.
Read guide - useSearchParams() should be wrapped in a suspense boundary at page "/..."
next build fails when a Client Component reads useSearchParams() on a static page with no <Suspense> above it. Wrap the smallest part that reads it.
Read guide - Failed to find Server Action "...". This request might be from an older or newer deployment.
A page from an old build called a Server Action ID the new build does not have, so Next.js answers 409. Use Skew Protection or a fixed encryption key.
Read guide - Next.js security release on November 3, 2026: seven medium vulnerabilities, and the October 14 fixes to install first (16.4.1, 15.5.28)
Next.js fixes seven medium vulnerabilities on November 3, 2026. Until then, run 16.4.1 or later, or 15.5.28, for the critical October 14 fixes.
Read guide - Vercel CI beta (October 28, 2026): how to set it up with turbo.json, what agents can do through the CLI and MCP, and how it compares with GitHub Actions
Vercel CI runs the Turborepo tasks you tag ci on every git push and posts a GitHub check. Beta since October 28, 2026: setup, CLI and MCP, limits, pricing.
Read guide - How do I cut client JavaScript in Next.js 16.4 with next analyze and the next-bundle-optimizer agent skill?
Next.js 16.4 adds the next-bundle-optimizer agent skill and next analyze export. Install it, run it in report mode, compare before and after snapshots.
Read guide - Environment Variables with a public framework prefix cannot use visibility: secret
Vercel will not store a NEXT_PUBLIC_ or VITE_ variable as a Secret, because the build ships it to the browser. Public value: Config. Secret: drop the prefix.
Read guide - Route segment config "dynamic" is not compatible with nextConfig.cacheComponents
Next.js 16 rejects export const dynamic when cacheComponents is on. Delete it, move request-time reads into Suspense, and use "use cache" for force-static.
Read guide - Failed to fetch dynamically imported module
An open tab asked for a lazy chunk your new deploy deleted. Reload on the vite:preloadError event and serve index.html with Cache-Control no-cache.
Read guide - Failed to load module script: Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of "text/html"
A blank page with this error means the script URL returned HTML, often index.html from a SPA fallback. Fix the Vite base or the path the host serves it from.
Read guide - AI SDK stream cut off on Vercel: maxDuration, Fluid compute and docs that disagree
A streamText reply that stops partway on Vercel hit maxDuration. Fluid compute defaults to 300 s; a maxDuration = 30 left from an old example cuts it at 30 s.
Read guide - remaining connection slots are reserved for roles with the SUPERUSER attribute
Neon refuses direct connections (53300) once max_connections fills, often from Vercel functions. Use the -pooler host in DATABASE_URL, one pool per instance.
Read guide - Failed to parse private key: Error: Invalid PEM formatted message.
firebase-admin throws it when the private key env var holds literal \n instead of line breaks, as pasted from the JSON. Replace \\n with \n where you read it.
Read guide - Firebase: Error (auth/unauthorized-domain).
Firebase throws auth/unauthorized-domain when the page host is not in Authorized domains. Add the Vercel host in the Firebase console; previews need theirs.
Read guide - My Firestore rules say allow read, write: if true. How do I lock them down before launch?
allow read, write: if true lets anyone who has your project ID read, change or delete Firestore data. Require sign-in, scope rules to the owner, test, deploy.
Read research - It looks like you're running in a browser-like environment
openai-node refuses to run in browser code because the key would reach every visitor. Move the call to a server route; drop the NEXT_PUBLIC_ or VITE_ prefix.
Read guide - Why does my Vercel app hit "Max client connections reached" on Supabase?
On Vercel, connect to Supabase through the transaction pooler on port 6543, not the 5432 session pooler; set prepare: false (pgbouncer=true in Prisma).
Read guide - Why does Google login work in preview but fail on my custom domain?
Diagnose Google login failures after a custom-domain launch. Separate Lovable Cloud settings, Supabase callbacks and app redirect URLs before changing code.
Read guide - Error 400: redirect_uri_mismatch
Google shows Error 400: redirect_uri_mismatch when the OAuth client lacks the Supabase callback URL. Add https://<ref>.supabase.co/auth/v1/callback to it.
Read guide
Comparisons
Compare databases, app builders and authentication providers by capabilities, cost and the work you keep.
- Supabase vs Neon: which Postgres backend fits your app?
Compare Supabase and Neon for Postgres, backend services, preview branches, pooling and costs. Decide with a realistic app workflow and migration checklist.
Read comparison - PostHog vs Google Analytics 4: which should you choose?
Compare PostHog and GA4 for acquisition, product funnels, replay, identity, cost and implementation. Decide what to measure and when both tools make sense.
Read comparison - Supabase vs Firebase: which backend should you choose?
Compare Supabase and Firebase for SQL, documents, offline apps, auth, pricing and migration. Choose a backend around the application you actually need.
Read comparison - Lovable vs Bolt: which AI app builder should you choose?
Compare Lovable and Bolt for building apps, databases, GitHub, hosting, pricing and handoff. Choose around your workflow, not a screenshot contest.
Read comparison - Supabase Auth vs Clerk: which login system should you choose?
Compare Supabase Auth and Clerk for login UI, organizations, pricing, database permissions and migration. Learn when to choose either or use them together.
Read comparison - Supabase security tools compared: what each one catches and misses
No single tool covers a Supabase app. 15 tools for migrations, the database, the deployed app and secrets: what each catches, misses and costs.
Read comparison - MCP servers for a Vercel + Supabase app: what each one reads and changes
The Supabase, Vercel, Stripe and PostHog MCP servers: URL, what each reads and changes, how it signs in and the safety settings to use. Checked 2026-10-23.
Read guide - Which AI app generators produce production-ready code?
Which AI app generators produce production-ready code? None by itself. What Lovable, Bolt, v0, Replit Agent and coding agents check, and what stays yours.
Read guide - Vibe Coding Tools: From Building to Launch
Compare vibe coding tools by job: Lovable, Bolt, Cursor, Claude Code, CodeRabbit, VibeRaven, Vercel, Supabase and Sentry, with checks before launch.
Read comparison - VibeRaven vs Code Review Tools
VibeRaven, CodeRabbit, GitHub Copilot code review or Greptile? Compare review workflows, app maintenance and the live checks still needed before release.
Read comparison
About VibeRaven
The command, the npm package, a real run, and pages written for AI assistants.
- npx viberaven
Open the local Studio for an existing AI-built app, connect your coding agent, review changes, or run an optional repository check from the terminal.
Read guide - @viberaven/cli npm package
The @viberaven/cli npm package (npx -y viberaven) checks AI-built Vercel + Supabase apps for repo launch gaps and gives your coding agent one scoped fix prompt.
Read guide - We Ran VibeRaven on a Real AI-Built App
A first-hand teardown of how VibeRaven approaches an AI-built Vercel + Supabase app: repo evidence, provider checks, named repo gaps and the next agent prompt.
Read research - AI App Launch Gap Index
An index of common launch gaps in AI-built apps, from VibeRaven dogfooding and repo patterns: auth, billing, data, deployment, monitoring and tests.
Read guide
Deep-dive articles
Original research, debugging and implementation workflows.
- What Makes an AI-Built App Production-Ready?
Before you launch an AI-built app, verify the systems behind the demo: authentication, data access, payments, deployment, monitoring, and recovery. This overview explains what readiness means and when to move to a detailed launch checklist.
Read checklist - Vercel env vars not working in production: 5 checks
When Vercel environment variables are not working in production, a variable that works locally but is undefined on Vercel is usually missing from the Production environment, read under a different name, or newer than the deployment: Vercel applies variable changes to new deployments only. Check the name, the environment, build time vs runtime, redeploy, then test the result.
Read checklist - We Read the Supabase Migrations of 512 Public Lovable Apps
We read the policies an AI app builder ships with, not the live databases. One in six public Lovable projects lets anyone change or delete a whole table, often under a policy name that says otherwise.
Read research - In 47% of 512 Lovable Apps, the Anon Key Can Call a Security Definer Function
Nearly half of the Lovable projects we read ship a Postgres function that skips RLS and that anyone with the public anon key can call. We read the functions in 18 of them to see what a signed-out caller could actually do.
Read research - 5.7% of 512 Lovable Apps Commit Their Supabase Service Role Key
29 of 512 public Lovable repos (5.7%), each read at its last commit before October 3, 2026, commit a Supabase service role or secret key, the key that skips RLS. The key is rarely in the app itself. It sits in a one-off script, a deploy guide, or the .env.example that was meant to hold placeholders.
Read research