Prerequisites
This step is a one-off. Anything already on your machine, you can skip past.
If more than half of the commands here feel unfamiliar, glance at the “Who this guide was written for” section in Getting started first. The starting level the manual assumes is spelled out there.
Things that differ by operating system
Section titled “Things that differ by operating system”| Item | macOS | Windows | Linux |
|---|---|---|---|
| Which terminal you use | Terminal.app or iTerm2 | I recommend Ubuntu on WSL2. PowerShell is technically possible, but the instructions get longer. | Whatever shell ships with your distribution |
| Verified status | Verified | Install WSL2 first, then run every command inside it | Verified |
| Docker | Docker Desktop | Docker Desktop with WSL2 integration on | docker engine |
If you are on Windows, finish the WSL2 install guide before coming back here. Every command in this manual assumes you are inside the Ubuntu shell on WSL2.
1) Node.js 20 or newer
Section titled “1) Node.js 20 or newer”On macOS and Linux: nvm is the easy route
Section titled “On macOS and Linux: nvm is the easy route”Open a terminal and run these one line at a time.
# Install nvm (Node Version Manager)curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Either open a new terminal, or paste these two lines to load nvm right nowexport NVM_DIR="$HOME/.nvm"[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Install Node 20 and switch to itnvm install 20nvm use 20Verify
Section titled “Verify”node --version # should print v20.x.xnpm --version # should print something like 10.x.xIf either command prints nothing at all, jump to the “Node will not install” entry in 09-troubleshooting.md.
If node --version is missing again in a fresh terminal, the two-line nvm loader did not make it into your shell startup file. The seat differs by shell on macOS and Linux: ~/.zshrc for zsh, ~/.bashrc for bash. Open that file and check that the export NVM_DIR=... lines from the end of the nvm install printout are there. If not, paste them in by hand and open a new terminal.
2) git
Section titled “2) git”xcode-select --installThis command does not install git on its own — it brings down Apple’s Command Line Tools bundle. A small dialog window pops up to take your consent, and the install starts. If git is already there, it prints a short notice and exits. Usually wraps up under five minutes.
Linux — Ubuntu and Debian
Section titled “Linux — Ubuntu and Debian”sudo apt update && sudo apt install -y gitThe same line works inside Ubuntu on WSL2. The Ubuntu on WSL2 shares its package system with regular Ubuntu.
Verify
Section titled “Verify”git --version # git version 2.x.xRegister your name and email with git once
Section titled “Register your name and email with git once”git config --global user.name "Your Name"This name and email get stamped on every commit you make from here on. If you want to separate work email from a personal one, you can override on a per-repo basis later — for now anything usable will do.
3) Docker
Section titled “3) Docker”This base needs Docker for running Supabase locally. The supabase start command spins up Postgres, Auth, and Storage as containers. Without Docker, you stop at that step.
macOS and Windows — Docker Desktop
Section titled “macOS and Windows — Docker Desktop”Download the installer for your OS from docker.com/products/docker-desktop and install it. After install, run it once to register and sign in. Docker Desktop has to be running for supabase start to launch containers.
On Windows, in Docker Desktop settings, head to Resources → WSL Integration and toggle on your Ubuntu distro. That is what makes the docker command work inside a WSL2 terminal.
Linux — docker engine
Section titled “Linux — docker engine”sudo apt update && sudo apt install -y docker.iosudo usermod -aG docker $USER # so you can run docker without sudoAfter the second line, log out and back in for the group change to take effect.
Verify
Section titled “Verify”docker --version # Docker version 24.x or higherdocker ps # an empty table is fine. A permission error means usermod has not been applied yetIf docker ps errors out on permissions, check that Docker Desktop is running on macOS, or that you logged out and back in on Linux after the usermod. The first run is usually one of those two.
4) Supabase — account and CLI
Section titled “4) Supabase — account and CLI”Create an account
Section titled “Create an account”Sign up at supabase.com with your GitHub account. The free tier is enough. You do not need to create a new project right now — that part happens in 04-real-backend.md.
For this step, signup is the only thing needed. The account has to exist before supabase login can connect to it in the next part.
Install the CLI
Section titled “Install the CLI”# macOSbrew install supabase/tap/supabase
# Linux and WSL2curl -fsSL https://github.com/supabase/cli/releases/latest/download/supabase_linux_amd64.tar.gz \ | sudo tar -xz -C /usr/local/bin supabaseVerify
Section titled “Verify”supabase --versionsupabase login # a browser tab opens for account authOnce supabase login finishes, the CLI is tied to your account. One-time setup.
5) Stripe account
Section titled “5) Stripe account”Sign up at stripe.com, then flip the Test mode toggle in the top-right of the dashboard. In test mode, no real money moves — you get to drive the full checkout flow with test card numbers. Test mode is the default right after signup, but it is worth confirming once.
In the left menu, head to Developers → API keys. Two kinds of keys live there: a Publishable key (starts with pk_test_...) and a Secret key (starts with sk_test_...). Note both. You use them at the end of 04-real-backend.md or after 05-customize-design.md when you turn on the checkout flow.
Up until you take real payments, only test mode matters. Real business registration and turning on live charges are decisions for when your SaaS reaches actual users. The scope of this manual is one full lap inside test mode.
6) Claude Code
Section titled “6) Claude Code”The official install guide lives at docs.claude.com/en/docs/claude-code/quickstart. After install, run claude once to log in or register an API key.
claude --versionIf a version number prints, you are set. The OpenAI Codex CLI also works in place of Claude Code — in that case, the entry point is AGENTS.md at the repo root, and the same flow applies. If this is your first time, Claude Code is the gentler path.
7) Optional — code editor
Section titled “7) Optional — code editor”If you want to watch the code being written, VS Code is a fine default. Since the AI writes the code for you, an editor is not strictly required. It just helps when you want to peek at what just happened.
If all six items are in place, head to 02-clone-and-install.md.