Every error here follows the same format: 🔴 What it means in plain English 🧠 Most likely reasons (in order of how often they cause it) 🔧 What to try first
"Access to fetch has been blocked by CORS policy" / "has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header"
🔴 Your website tried to talk to your backend, but the backend said "I don't know this address." 🧠 Most likely reasons:
- Your backend (n8n, Supabase, an API server) doesn't have your website's address on its approved list
- You're using
www.yoursite.combut onlyyoursite.comis approved — or the other way around. One letter difference matters completely. - You added the address but the wrong version (http vs https) 🔧 Go to your backend's CORS settings and add your exact website address. Add both the www and non-www versions if you're not sure which one you're sending from.
Important: CORS is not a one-time fix. Every new domain, subdomain, or staging URL needs its own entry. If you deploy to a new address, you'll hit this again.
🔴 Your code tried to use something that doesn't exist in this file — like trying to use a tool you left in another room. 🧠 Most likely reasons:
- You forgot to import it at the top of the file (
from config import Xorimport X) - You spelled it differently in two places — Python is case-sensitive,
Tokenandtokenare different things - It's defined in another file but was never brought into this one
🔧 Add the right import line at the top of the file. If it's in
config.py, write:from config import X
🔴 You're asking for something that doesn't exist in that file — the name is either missing or spelled differently there. 🧠 Most likely reasons:
- The variable or function named X was never added to that module
- It exists but under a different name 🔧 Open the file you're importing from and check what names are actually defined there. Add X if it's missing. Copy the name exactly — no spelling changes.
🔴 You started a try block but never finished it. In Python, try always needs a partner.
🧠 Most likely reason: A try: block without a matching except: block below it
🔧 Find the try: and add at minimum: except Exception as e: print(e) directly below it.
🔴 Python can't read your code at all. It couldn't even start running — something in the text itself is wrong. 🧠 Most likely reasons:
- Missing colon at the end of an
if,for,while,def, orclassline - Mismatched brackets — opened
(but forgot to close it, or[without] - Wrong indentation — Python is strict: use 4 spaces, not a mix of tabs and spaces
- A terminal command was pasted into the code file by accident (like
python app.pyappearing inside the code) 🔧 Look at the line number in the error. The real problem is often one line before that. Read that section out loud — incomplete Python sentences usually become obvious when you say them.
🔴 You tried to turn a word into a number but it isn't a number.
🧠 Most likely reason: A user typed "hello" or left the input empty where a number was expected
🔧 Add a check before converting: if not x.strip().isdigit(): print("Please enter a number")
🔴 Your code is trying to use a package that hasn't been installed yet. 🧠 Most likely reasons:
- The package was never installed in this environment
- You're running the code inside Docker but installed the package on the server (outside the lunchbox)
🔧 Run
pip3 install X. If you're using Docker, add X torequirements.txtand rebuild the container.
🔴 Docker is looking for a machine that hasn't started yet, or that crashed before it could be found. 🧠 Most likely reasons:
docker-compose upwas never run, or failed before the container could start- The container crashed during startup (often a missing environment variable or bad config)
🔧 Run
docker-compose up(notdocker-compose start) and watch what it prints. If it exits immediately, rundocker-compose logsto read why it stopped.
🔴 Your app lives inside a Docker container — a sealed lunchbox. You installed something on the table outside the lunchbox. The lunchbox doesn't know about it.
🧠 The cause: Docker containers are isolated. Server-level installs don't reach inside them.
🔧 Add the package name to requirements.txt. Then run: docker-compose down && docker-compose up --build. The --build flag repacks the lunchbox with the new ingredient inside.
Permission denied (publickey) / git@github.com: Permission denied
🔴 GitHub doesn't recognise your computer. It's asking for a secret handshake your computer hasn't set up yet.
🧠 Most likely reason: You're trying to use SSH but haven't generated or registered your SSH key with GitHub
🔧 Easiest fix — switch to HTTPS: get the HTTPS URL from GitHub (starts with https://, not git@), then run:
git remote set-url origin https://github.com/your/repo.git
HTTPS uses your username and password/token instead of SSH keys.
🔴 You tried to add a GitHub address but one is already saved.
🧠 Most likely reason: You ran git remote add origin twice, or the project already had a remote set
🔧 Update the existing address instead of adding a new one:
git remote set-url origin https://github.com/your/repo.git
🔴 GitHub has changes your computer doesn't know about yet. You can't send your version until you receive theirs first.
🧠 Most likely reason: Something changed on GitHub since you last pulled — could be a README edit, a file created through the GitHub website, or another machine pushing
🔧 Run git pull origin main first. Resolve any conflicts if it asks. Then git push again.
🔴 Your computer and GitHub have never talked before through SSH. Your computer is asking "is this really GitHub?"
🧠 Most likely reason: First-time SSH connection from this machine
🔧 Type yes and press Enter — it's a one-time confirmation. Or switch to HTTPS to avoid SSH entirely (see above).
🔴 npm isn't installed — or the terminal can't find it. 🧠 Most likely reason: Node.js isn't installed yet. npm comes bundled with Node.js — no Node means no npm. 🔧 Install Node.js from nodejs.org. Restart your terminal after installing. Then try the command again.
🔴 Your code is trying to use a package that isn't downloaded in this project yet.
🧠 Most likely reason: The package is in the code but was never installed
🔧 Run npm install X (replace X with the package name from the error). Then try again.
🔴 Something is looking for a file that doesn't exist at that path. 🧠 Most likely reasons:
- The file was deleted or never created
- A folder name in the path is misspelled
- You're running the command from the wrong folder — the terminal's current location matters
🔧 Check the path shown in the error. Make sure every folder in that path exists. If the issue is your location, navigate to the right folder first (
cd your-project-folder).
🔴 Your app can see Supabase's front door but the office inside is locked. There are two separate locks and only one was opened. 🧠 Most likely reason: Exposing the schema and granting permissions are two separate steps. Most people do one and skip the other. 🔧 Run this in the Supabase SQL Editor:
GRANT USAGE ON SCHEMA yourschema TO anon, authenticated;
GRANT ALL ON ALL TABLES IN SCHEMA yourschema TO anon, authenticated;Replace yourschema with your actual schema name (e.g. public, aridunu, etc.)
🔴 Row Level Security is turned on but no rules were written for who can read or write. Default when RLS is on: nobody can do anything. 🧠 Most likely reason: RLS was enabled but policies were never created 🔧 In Supabase dashboard: Authentication → Policies → New Policy. Or in SQL Editor:
-- Allow anyone to read
CREATE POLICY "allow_read" ON your_table FOR SELECT USING (true);
-- Allow logged-in users to write
CREATE POLICY "allow_write" ON your_table FOR INSERT WITH CHECK (auth.uid() IS NOT NULL);🔴 Your code is looking for a secret key (API key, password, URL) that hasn't been set up in this environment. 🧠 Most likely reasons:
- The
.envfile exists on your computer but not on the server or Vercel where the app is actually running - The variable name is spelled differently in the code vs the
.envfile — it's case sensitive (API_KEYandapi_keyare different) - On Vercel: environment variables set locally don't automatically go to Vercel — they have to be added separately in Vercel's dashboard
🔧 Go to wherever your app is running (Vercel → Settings → Environment Variables, or your VPS
.envfile, or yourdocker-compose.ymlenv section) and add the variable there with the exact same name and value.