Skip to content

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.

ItemmacOSWindowsLinux
Which terminal you useTerminal.app or iTerm2I recommend Ubuntu on WSL2. PowerShell is technically possible, but the instructions get longer.Whatever shell ships with your distribution
Verified statusVerifiedInstall WSL2 first, then run every command inside itVerified
DockerDocker DesktopDocker Desktop with WSL2 integration ondocker 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.

Open a terminal and run these one line at a time.

Terminal window
# 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 now
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
# Install Node 20 and switch to it
nvm install 20
nvm use 20
Terminal window
node --version # should print v20.x.x
npm --version # should print something like 10.x.x

If 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.

Terminal window
xcode-select --install

This 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.

Terminal window
sudo apt update && sudo apt install -y git

The same line works inside Ubuntu on WSL2. The Ubuntu on WSL2 shares its package system with regular Ubuntu.

Terminal window
git --version # git version 2.x.x

Register your name and email with git once

Section titled “Register your name and email with git once”
Terminal window
git config --global user.name "Your Name"
git config --global user.email "[email protected]"

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.

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.

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.

Terminal window
sudo apt update && sudo apt install -y docker.io
sudo usermod -aG docker $USER # so you can run docker without sudo

After the second line, log out and back in for the group change to take effect.

Terminal window
docker --version # Docker version 24.x or higher
docker ps # an empty table is fine. A permission error means usermod has not been applied yet

If 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.

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.

Terminal window
# macOS
brew install supabase/tap/supabase
# Linux and WSL2
curl -fsSL https://github.com/supabase/cli/releases/latest/download/supabase_linux_amd64.tar.gz \
| sudo tar -xz -C /usr/local/bin supabase
Terminal window
supabase --version
supabase login # a browser tab opens for account auth

Once supabase login finishes, the CLI is tied to your account. One-time setup.

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.

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.

Terminal window
claude --version

If 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.

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.