Errors, explained
The errors apps built with AI hit most, in plain English: what each one means, why it happens, how to fix it, and a prompt that gets your AI to find the cause instead of guessing.
Paste your errorSupabase
- permission denied for tableThe database refused before checking any row: the role your app uses (anon or authenticated) has no permission to use this table at all.
- new row violates row-level security policy for tableRow Level Security is on, and no policy allows this particular row to be added or saved.
- JWT expired / Auth session missingSign-in tokens are short-lived on purpose, often one hour.
- relation does not exist / Could not find the table in the schema cacheThe database you are connected to has no table with that name.
- supabaseUrl is requiredThe Supabase client was created with an empty project URL: the environment variable it reads is not set where the app is running..
- Supabase project is pausedFree Supabase projects pause after a period without activity.
- FATAL: Tenant or user not foundThe Supabase connection pooler did not recognise the user in your connection string.
Browser console
- Access to fetch has been blocked by CORS policyYour page asked a server on another address for data, and that server did not say your site is allowed to read the answer, so the browser blocked it.
- Mixed Content: the page was loaded over HTTPS, but requested an insecure resourceYour secure (https) page tried to load or call something over plain http, and the browser blocked it.
- TypeError: Failed to fetchThe browser could not complete the request at all, so there is no status code to read.
Vercel
Google sign-in
Supabase Auth
- email rate limit exceededYour auth service's built-in email sender allows only a few emails an hour.
- Email link is invalid or has expiredThe sign-in or confirmation link could not be used.
- Confirmation email link goes to localhost:3000Your auth provider builds email links from a site address you set during development.
- Database error saving new userSign-up failed inside the database, not in your app.
- Invalid login credentialsThe email and password did not match an account that can sign in with a password.
OpenAI
Stripe webhooks
Stripe
Next.js
- Body exceeded 1 MB limit / 413 Payload Too LargeThe upload or form was bigger than your server accepts.
- ReferenceError: window is not definedCode that only works in a browser ran on the server, where there is no window, document or localStorage.
- useState only works in a Client Component. Add the "use client" directiveIn the Next.js app router, components run on the server by default, and server components cannot use state, effects or event handlers.
- useSearchParams() should be wrapped in a suspense boundaryThe page is built ahead of time, but part of it reads the address bar, which only exists when someone visits.
- 405 Method Not AllowedThe address exists, but it does not accept this kind of request.
Postgres
React
- Hydration failed because the server rendered HTML didn't match the clientThe page the server sent and the page the browser then drew were different, so React threw the server's version away.
- TypeError: Cannot read properties of undefined (reading 'map')Your code used something before it existed.
- Too many re-renders. React limits the number of renders to prevent an infinite loopA component keeps changing its own state, which re-renders it, which changes the state again.
- Objects are not valid as a React childThe page tried to show a whole object (or a date, or a promise) where React needs text, a number or elements.
- Invalid hook call. Hooks can only be called inside of the body of a function componentA React hook (useState, useEffect…) ran somewhere React does not allow: outside a component, inside a condition or loop, or with two copies of React installed..