# Set Up Your Environment

Course: Vibe Coding: Build Real Apps with AI Agents — Lesson 1 of 4

Get your Mac or Windows PC ready to build and ship real apps — install the essential tools, create your first project from a template, and run it locally with an AI coding agent.

You need a few tools before you can build anything. Set up the workshop once, then the agent
does the heavy lifting.

Commands differ on **Mac** and **Windows**, so pick your OS below. Follow the steps **in
order**; each tool depends on the ones before it. Everything is free, and the 1.5–2 hours is
mostly downloads and sign-ups. If a command fails, check **Troubleshooting**, or paste the
command and the error into **Claude** or **ChatGPT**.

We build on the [Mark-Life/netxjs-monorepo](https://github.com/Mark-Life/netxjs-monorepo)
template: a Next.js + Bun + Turborepo + Biome + shadcn/ui starter you copy in one command.

> **Prefer to let the agent do it?** Install an agent from
> [**Step 8**](#step-8-install-a-coding-agent), then paste it the link to this page with a
> prompt like *"Follow this lesson and set up my computer for coding for this course."* It
> usually needs **you** only for the GitHub sign-up and the `gh` browser login
> ([Step 3](#step-3-github-account-and-cli)). Use the steps below to follow along or
> troubleshoot.

## What you'll end up with

A terminal, Git, a GitHub account, VS Code, the Bun runtime, Node.js, an AI coding agent, and
a real app running on your own machine.

### macOS

## What you'll install (macOS)

| Tool | What it's for | How we install it |
| :---- | :---- | :---- |
| **Xcode Command Line Tools** | Gives you `git` and compilers | `xcode-select` |
| **Homebrew** | The package manager for Mac (installs everything else) | official installer |
| **Terminal** | Your command line (zsh is already the default shell) | built-in |
| **Git** | Track code history, push to GitHub | Comes with Xcode CLT |
| **GitHub account + GitHub CLI (`gh`)** | Host code, log in, create repos | Homebrew |
| **VS Code** | The code editor | Homebrew |
| **Bun** | Runs the project + installs packages (the core) | official installer |
| **Node.js via fnm** | Required: portless and build tooling need Node | Homebrew + fnm |
| **Claude Code / Codex CLI** | An AI coding agent in your terminal | native installer |
| **Claude / Codex desktop app** *(optional)* | A windowed version of your agent | provider download |

---

## Step 0: Before you start (5 min)

Open **Terminal**: press `⌘` + `Space`, type `Terminal`, press `Enter`. The default shell is
already **zsh**.

Install the **Xcode Command Line Tools**, which give you `git` and the compilers other tools
rely on:

```bash
xcode-select --install
```

Click **Install** in the dialog and wait a few minutes. If it says they're already installed,
you're good.

Next, **[Homebrew](https://brew.sh)**, the Mac package manager: one command installs, updates
and removes tools cleanly.

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

It may finish by printing two `eval` lines to add to your shell so the `brew` command is
found. On Apple Silicon Macs that's usually:

```bash
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```

Verify it works:

```bash
brew --version
```

---

## Step 1: Terminal & shell (your command center)

The built-in **Terminal** is all you need, and zsh is already your default shell. Most of the
time you use the terminal inside VS Code (`Ctrl` + `` ` ``), so you rarely leave the editor.

---

## Step 2: Git (version control)

[Git](https://git-scm.com) keeps a safety net of every change you make. Step 0 already
installed it. Verify:

```bash
git --version
```

You set your name and email in the next step, so they match your new GitHub account.

> Optional: Apple's git lags the latest release. For the newest version later, `brew install
> git`. Not needed for this course.

---

## Step 3: GitHub account + GitHub CLI

**3a. Create the account** (if you don't have one): go to [github.com](https://github.com)
→ **Sign up**. Use a real email and pick a username you're happy to show employers later.

**3b. Install the [GitHub CLI](https://cli.github.com):**

```bash
brew install gh
```

Then log in:

```bash
gh auth login
```

Answer the prompts like this:

- **What account?** → `GitHub.com`
- **Preferred protocol?** → `SSH` *(recommended: no password typing later)*
- **Generate a new SSH key?** → `Yes` (press Enter to accept defaults, you can leave the passphrase empty)
- **Authenticate?** → `Login with a web browser` → copy the code, press Enter, paste in your browser, click authorize.

Verify:

```bash
gh auth status
```

You should see `Logged in to github.com`.

**3c. Set your Git identity.** Use the **same name and email you signed up with**, so your
commits link to your GitHub profile and show your avatar:

```bash
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
git config --global init.defaultBranch main
```

---

## Step 4: VS Code (the editor)

Install [VS Code](https://code.visualstudio.com):

```bash
brew install --cask visual-studio-code
```

This also gives you the `code` command. Install the two extensions the template expects:

```bash
code --install-extension biomejs.biome
code --install-extension bradlc.vscode-tailwindcss
```

- **Biome** formats and lints on save (the template is preconfigured for it).
- **Tailwind CSS IntelliSense** autocompletes Tailwind classes.

---

## Step 5: Bun

Bun is both the **package manager** (installs dependencies) and the **runtime** (runs the
code). The template pins it via `"packageManager": "bun@1.3.9"`.

Install with [Bun](https://bun.sh)'s official command:

```bash
curl -fsSL https://bun.sh/install | bash
```

**Close and reopen the terminal** (or open a new tab), then verify:

```bash
bun --version
```

You should see `1.3.x` or higher.

---

## Step 6: Node.js + fnm

**V8** is the JavaScript engine in every browser; **Node** is the most common one outside it.
**Bun** is faster, but not every Node API or host supports it yet, so you install both.
**[fnm](https://github.com/Schniz/fnm)** installs Node and switches versions per project.

```bash
brew install fnm
```

Enable fnm so it auto-switches Node versions when you change folders. Add this line to your
`~/.zshrc`:

```bash
echo 'eval "$(fnm env --use-on-cd)"' >> ~/.zshrc
```

Close and reopen the terminal (or run `source ~/.zshrc`), then install the latest LTS Node
and verify:

```bash
fnm install --lts
fnm use lts-latest
node --version
```

---

## Step 7: Run your first project 🚀

### First, make a home for your code (one-time)

Create a `code` folder in your home directory, **once**:

```bash
mkdir ~/code
cd ~/code
```

It keeps projects out of Downloads and means every `git` and `bun` command runs in the right
spot. Start here every time: `cd ~/code`.

### Now create the project

Inside the `code` folder, create a repo from the template and start it:

```bash
# 0. Be in your code folder (your projects home)
cd ~/code

# 1. Create a private repo from the template AND clone it into the code folder
gh repo create my-website --template Mark-Life/netxjs-monorepo --private --clone

# 2. Move into the new project folder
cd my-website

# 3. Install all dependencies (this also installs TypeScript, locally)
bun install

# 4. Open the project in VS Code
code .

# 5. Start the dev server (the first run sets up local HTTPS — see note below)
bun dev
```

**Every future project** follows the same pattern: `cd ~/code`, then either
`gh repo create <name> --template Mark-Life/netxjs-monorepo --private --clone` for a fresh
one, or `gh repo clone <your-username>/<repo>` to download an existing one.

The template uses [**portless**](https://portless.sh), installed by `bun install`, so instead
of a bare `localhost:3000` your app gets a stable HTTPS URL based on its name:
[**https://web.localhost**](https://web.localhost).

**On the very first `bun dev`,** portless sets up local HTTPS and macOS shows a **Keychain
prompt**. Enter your Mac password and click **Always Allow**. That trusts portless's
local-only authority, so your browser shows no warnings. Once per machine.

Open [**https://web.localhost**](https://web.localhost) in Safari or Chrome, which resolve
`.localhost` automatically. You should see the running app.

**To stop the dev server,** press `Ctrl` + `C` (two or three times, since
portless runs the proxy plus the app together). If it won't stop, close the terminal tab.

Project names: lowercase, dashes instead of spaces, e.g. `weather-app`.

---

## Step 8: Install a coding agent

A coding agent is an AI in your terminal: you describe a change in plain English and it edits
files and runs commands inside your project. That's the heart of vibe coding. Pick the one
that matches your subscription; you only need one. Both install with one command and keep
themselves updated.

### Have a Claude / Anthropic subscription? → Claude Code

Docs: [code.claude.com/docs](https://code.claude.com/docs). Claude Code has **no free tier**,
so you need a paid Claude plan or an Anthropic API key.

```bash
curl -fsSL https://claude.ai/install.sh | bash
```

Open a new terminal, then start it inside your project:

```bash
cd ~/code/my-website
claude
```

It walks you through signing in with your **Claude account** (`/login` switches accounts
later). Then type what you want in plain English, e.g. *"add a dark-mode toggle to the
header."* It asks for approval before editing files or running commands.

### Have a ChatGPT account (free or paid)? → Codex CLI

Docs: [developers.openai.com/codex/cli](https://developers.openai.com/codex/cli). OpenAI's
**Codex CLI** works with **any ChatGPT account**: even a **free** one gets some usage, paid
plans give more, and an OpenAI **API key** works too.

```bash
curl -fsSL https://chatgpt.com/codex/install.sh | sh
```

Open a new terminal, then verify and run it inside your project:

```bash
codex --version
cd ~/code/my-website
codex
```

Pick **Sign in with ChatGPT** on first run (`/login` switches accounts later). Describe what
you want in plain English; Codex asks for approval before editing files or running commands.
Re-run the install command to update.

---

## Step 9: A desktop app for your agent (optional)

Same agent in a window, with diffs you can review and several sessions at once. It's a
**separate download** that shares your login, so do Step 8 first and the app picks up the same
account.

### Have a Claude / Anthropic subscription? → Claude desktop app

Download from [**claude.com/download**](https://claude.com/download), open the file, and drag
**Claude** into **Applications**. Sign in with your **Claude account**, open your project
folder (`~/code/my-website`), and start chatting.

### Have a ChatGPT account? → Codex app

Download from [**developers.openai.com/codex/app**](https://developers.openai.com/codex/app)
and install it. Choose **Sign in with ChatGPT**, open your project folder
(`~/code/my-website`), and start chatting.

---

## Verify everything (final check)

Every line should print a version, not an error:

```bash
brew --version
git --version
gh --version
code --version
bun --version
node --version
claude --version   # only if you installed Claude Code
codex --version    # only if you installed Codex CLI
```

---

## Daily commands cheat sheet

Run these from inside the project folder:

| Command | What it does |
| :---- | :---- |
| `bun dev` | Start the dev server ([https://web.localhost](https://web.localhost)) |
| `Ctrl` + `C` (press 2–3×) | Stop the dev server (or just close the terminal) |
| `bun run build` | Build the app for production |
| `bun run check` | Check for lint/formatting problems |
| `bun run fix` | Auto-fix lint/formatting problems |
| `bun run typecheck` | Check for TypeScript errors |
| `bun run upgrade` | Update Next.js, shadcn/ui, and all dependencies |
| `bun add <package>` | Add a new dependency |
| `bunx shadcn@latest add button -c packages/ui` | Add a shadcn/ui component to the shared UI package |

Git basics:

| Command | What it does |
| :---- | :---- |
| `git status` | See what you've changed |
| `git add .` | Stage all changes |
| `git commit -m "message"` | Save a snapshot |
| `git push` | Upload commits to GitHub |

---

## Troubleshooting (macOS)

**"command not found" right after installing something** → Open a new terminal tab; PATH only
updates in *new* sessions. If still missing, run `source ~/.zshrc` or restart the Mac.

**`brew` not found after installing Homebrew** → You missed the `eval` line at the end of the
install. Add `eval "$(/opt/homebrew/bin/brew shellenv)"` to `~/.zprofile`, then open a new
terminal.

**VS Code formats weirdly / fights you on save** → Check the **Biome** extension is installed
(Step 4) and that you opened the *project folder* (`code .`), not a single file. The template's
settings apply only inside the folder.

**`https://web.localhost` won't open, or shows a certificate warning** → If you missed or
declined the Keychain prompt, run `bunx portless trust` inside the project, enter your Mac
password, then run `bun dev` again. Use **Safari or Chrome**, which resolve `.localhost`
automatically.

**`bun dev` can't start the proxy / "port 443 in use"** → Another program is using HTTPS port
443. Close it, or serve over plain HTTP once with `bunx portless proxy start --no-tls` (app is
then at `http://web.localhost`).

**`claude` or `codex` not found after installing** → Open a new terminal; PATH updates only in
fresh sessions. If still missing, run `source ~/.zshrc` or restart the Mac.

### Windows

## What you'll install (Windows)

| Tool | What it's for | How we install it |
| :---- | :---- | :---- |
| **Windows Terminal + PowerShell 7** | Your command line (the Windows version of zsh) | winget |
| **Git** | Track code history, push to GitHub | winget |
| **GitHub account + GitHub CLI (`gh`)** | Host code, log in, create repos | winget |
| **VS Code** | The code editor | winget |
| **Bun** | Runs the project + installs packages (the core) | official installer |
| **Node.js via fnm** | Required: portless and build tooling need Node | winget |
| **Claude Code / Codex CLI** | An AI coding agent in your terminal | native installer |
| **Claude / Codex desktop app** *(optional)* | A windowed version of your agent | provider download |

---

## Step 0: Before you start (2 min)

Open the **Start menu**, type `PowerShell`, right-click **Windows PowerShell** → **Run as
administrator**, and run these one-time settings:

```powershell
# 1. Allow PowerShell to run install scripts (needed by Bun's installer)
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force

# 2. Turn on long file path support (deep node_modules folders need this)
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem" `
  -Name "LongPathsEnabled" -Value 1 -PropertyType DWORD -Force
```

Then turn on **Developer Mode** (lets tools create symlinks, which Bun uses): **Settings →
System → For developers → Developer Mode → On**.

**`winget` is your installer**, Microsoft's built-in package manager (like `brew` on Mac),
preinstalled on Windows 11. Check it works:

```powershell
winget --version
```

If it's missing (older Windows 10), install **"App Installer"** from the Microsoft Store,
then reopen PowerShell.

---

## Step 1: Terminal & shell (your command center)

This is the Windows equivalent of your zsh terminal.

```powershell
winget install --id Microsoft.WindowsTerminal -e
winget install --id Microsoft.PowerShell -e
```

- **Windows Terminal** = the modern terminal app (tabs, themes). Often preinstalled on Win 11.
- **PowerShell 7** = the modern shell you'll type commands into.

**Now close this window and reopen Windows Terminal** so the new versions load. Click the **v
dropdown** in the tab bar → set **PowerShell** (the 7.x one) as your default profile.

**Prefer a bash-style shell?** Git (next step) also installs **Git Bash**, where Linux/Mac
commands like `ls`, `rm`, `cat` work as-is. PowerShell is the native default we use here.

---

## Step 2: Git (version control)

```powershell
winget install --id Git.Git -e
```

Close and reopen the terminal, then verify:

```powershell
git --version
```

You set your name and email in the next step, so they match your new GitHub account.

---

## Step 3: GitHub account + GitHub CLI

**3a. Create the account** (if you don't have one): go to [github.com](https://github.com)
→ **Sign up**. Use a real email and pick a username you're happy to show employers later.

**3b. Install the [GitHub CLI](https://cli.github.com):**

```powershell
winget install --id GitHub.cli -e
```

Close and reopen the terminal, then log in:

```powershell
gh auth login
```

Answer the prompts like this:

- **What account?** → `GitHub.com`
- **Preferred protocol?** → `SSH` *(recommended: no password typing later)*
- **Generate a new SSH key?** → `Yes` (press Enter to accept defaults, you can leave the passphrase empty)
- **Authenticate?** → `Login with a web browser` → copy the code, press Enter, paste in browser, click authorize.

Verify:

```powershell
gh auth status
```

You should see `Logged in to github.com`.

**3c. Set your Git identity.** Use the **same name and email you signed up with**, so your
commits link to your GitHub profile and show your avatar:

```powershell
git config --global user.name "Your Name"
git config --global user.email "you@example.com"

# Recommended on Windows: don't let Git rewrite line endings (Biome handles formatting)
git config --global core.autocrlf false

git config --global init.defaultBranch main
```

---

## Step 4: VS Code (the editor)

Install [VS Code](https://code.visualstudio.com):

```powershell
winget install --id Microsoft.VisualStudioCode -e
```

Close and reopen the terminal so the `code` command works, then install the two extensions
the template expects:

```powershell
code --install-extension biomejs.biome
code --install-extension bradlc.vscode-tailwindcss
```

- **Biome** formats and lints on save (the template is preconfigured for it).
- **Tailwind CSS IntelliSense** autocompletes Tailwind classes.

---

## Step 5: Bun

Bun is both the **package manager** (installs dependencies) and the **runtime** (runs the
code). The template pins it via `"packageManager": "bun@1.3.9"`.

Install with [Bun](https://bun.sh)'s official command (run in PowerShell):

```powershell
powershell -c "irm bun.sh/install.ps1 | iex"
```

**Close and reopen the terminal**, then verify:

```powershell
bun --version
```

You should see `1.3.x` or higher.

---

## Step 6: Node.js + fnm

**V8** is the JavaScript engine in every browser; **Node** is the most common one outside it.
**Bun** is faster, but not every Node API or host supports it yet, so you install both.
**[fnm](https://github.com/Schniz/fnm)** installs Node and switches versions per project.

```powershell
winget install --id Schniz.fnm -e
```

Enable fnm in PowerShell so it auto-switches Node versions per project. Open your profile:

```powershell
notepad $PROFILE
```

If Notepad asks to create the file, click **Yes**. Paste this line, save, close:

```powershell
fnm env --use-on-cd | Out-String | Invoke-Expression
```

Close and reopen the terminal, then install the latest LTS Node and verify:

```powershell
fnm install --lts
fnm use lts-latest
node --version
```

---

## Step 7: Run your first project 🚀

### First, make a home for your code (one-time)

Create a `code` folder on your Desktop, **once**:

```powershell
# Go to your Desktop, create the "code" folder, and move into it
cd ~\Desktop
mkdir code
cd code
```

It keeps projects out of Downloads and means every `git` and `bun` command runs in the right
spot. Start here every time: `cd ~\Desktop\code`.

### Now create the project

Inside the `code` folder, create a repo from the template and start it.

```powershell
# 0. Be in your code folder (your projects home)
cd ~\Desktop\code

# 1. Create a private repo from the template AND clone it into the code folder
gh repo create my-website --template Mark-Life/netxjs-monorepo --private --clone

# 2. Move into the new project folder
cd my-website

# 3. Install all dependencies (this also installs TypeScript, locally)
bun install

# 4. Open the project in VS Code
code .

# 5. Start the dev server (the first run sets up local HTTPS — see note below)
bun dev
```

**Every future project** follows the same pattern: `cd ~\Desktop\code`, then either
`gh repo create <name> --template Mark-Life/netxjs-monorepo --private --clone` for a fresh
one, or `gh repo clone <your-username>/<repo>` to download an existing one.

The template uses [**portless**](https://portless.sh), installed by `bun install`, so instead
of a bare `localhost:3000` your app gets a stable HTTPS URL based on its name:
[**https://web.localhost**](https://web.localhost).

**On the very first `bun dev`,** portless sets up local HTTPS and a **Windows security prompt**
asks to install a certificate. Click **Yes**. That trusts portless's local-only CA, so your
browser shows no warnings. Once per machine.

Open [**https://web.localhost**](https://web.localhost) in Edge or Chrome, which resolve
`.localhost` automatically. You should see the running app.

**To stop the dev server,** press `Ctrl` + `C` (two or three times, since
portless runs the proxy plus the app together). If it won't stop, close the terminal window.

Project names: lowercase, dashes instead of spaces, e.g. `weather-app`.

---

## Step 8: Install a coding agent

A coding agent is an AI in your terminal: you describe a change in plain English and it edits
files and runs commands inside your project. That's the heart of vibe coding. Pick the one
that matches your subscription; you only need one. Both install with one command and keep
themselves updated.

### Have a Claude / Anthropic subscription? → Claude Code

Docs: [code.claude.com/docs](https://code.claude.com/docs). Claude Code has **no free tier**,
so you need a paid Claude plan or an Anthropic API key.

```powershell
irm https://claude.ai/install.ps1 | iex
```

Open a **new** terminal, then start it inside your project:

```powershell
cd ~\Desktop\code\my-website
claude
```

It walks you through signing in with your **Claude account** (`/login` switches accounts
later). Then type what you want in plain English, e.g. *"add a dark-mode toggle to the
header."* It asks for approval before editing files or running commands.

### Have a ChatGPT account (free or paid)? → Codex CLI

Docs: [developers.openai.com/codex/cli](https://developers.openai.com/codex/cli). OpenAI's
**Codex CLI** works with **any ChatGPT account**: even a **free** one gets some usage, paid
plans give more, and an OpenAI **API key** works too.
It runs **natively on Windows**, no WSL2 required. Its sandbox needs Microsoft's C++ runtime,
so install that first:

```powershell
# Microsoft Visual C++ Redistributable (used by Codex's native Windows sandbox)
winget install --id Microsoft.VCRedist.2015+.x64 -e

# Install Codex (native installer)
powershell -ExecutionPolicy ByPass -c "irm https://chatgpt.com/codex/install.ps1 | iex"
```

Open a **new** terminal, then verify and run it inside your project:

```powershell
codex --version
cd ~\Desktop\code\my-website
codex
```

Pick **Sign in with ChatGPT** on first run (`/login` switches accounts later). Describe what
you want in plain English; Codex asks for approval before editing files or running commands.

**Windows notes for Codex**

- Codex runs commands in a **native Windows sandbox** by default. The first time, Windows may ask for **administrator approval** to set it up. Approve it.
- Sandboxed commands may have **no internet access** by design (a safety feature).
- On managed work/school PCs, IT policies can block the sandbox setup.

Re-run the install command to update.

---

## Step 9: A desktop app for your agent (optional)

Same agent in a window, with diffs you can review and several sessions at once. It's a
**separate download** that shares your login, so do Step 8 first and the app picks up the same
account.

### Have a Claude / Anthropic subscription? → Claude desktop app

Download the Windows build from [**claude.com/download**](https://claude.com/download) and run
the installer. Sign in with your **Claude account**, open your project folder
(`~\Desktop\code\my-website`), and start chatting.

### Have a ChatGPT account? → Codex app

Download from [**developers.openai.com/codex/app**](https://developers.openai.com/codex/app)
and run the installer. Choose **Sign in with ChatGPT**, open your project folder
(`~\Desktop\code\my-website`), and start chatting.

---

## Verify everything (final check)

Every line should print a version, not an error:

```powershell
winget --version
git --version
gh --version
code --version
bun --version
node --version
claude --version   # only if you installed Claude Code
codex --version    # only if you installed Codex CLI
```

---

## Daily commands cheat sheet

Run these from inside the project folder:

| Command | What it does |
| :---- | :---- |
| `bun dev` | Start the dev server ([https://web.localhost](https://web.localhost)) |
| `Ctrl` + `C` (press 2–3×) | Stop the dev server (or just close the terminal) |
| `bun run build` | Build the app for production |
| `bun run check` | Check for lint/formatting problems |
| `bun run fix` | Auto-fix lint/formatting problems |
| `bun run typecheck` | Check for TypeScript errors |
| `bun run upgrade` | Update Next.js, shadcn/ui, and all dependencies |
| `bun add <package>` | Add a new dependency |
| `bunx shadcn@latest add button -c packages/ui` | Add a shadcn/ui component to the shared UI package |

Git basics:

| Command | What it does |
| :---- | :---- |
| `git status` | See what you've changed |
| `git add .` | Stage all changes |
| `git commit -m "message"` | Save a snapshot |
| `git push` | Upload commits to GitHub |

---

## Troubleshooting (Windows)

**"command not found" right after installing something** → Close the terminal and open a new
one; PATH only updates in *new* windows. If still missing, restart the PC.

**Bun installer blocked / "running scripts is disabled"** → You skipped Step 0. Run
`Set-ExecutionPolicy -Scope CurrentUser RemoteSigned -Force`, then retry.

**`bun install` errors about long paths or symlinks** → Confirm Step 0: long paths registry
key set, and Developer Mode is **On**. Then retry.

**`winget` not recognized** → Install **"App Installer"** from the Microsoft Store, reopen
the terminal.

**VS Code formats weirdly / fights you on save** → Check the **Biome** extension is installed
(Step 4) and that you opened the *project folder* (`code .`), not a single file. The template's
settings apply only inside the folder.

**`https://web.localhost` won't open, or shows a certificate warning** → If you missed or
declined the certificate prompt, run `bunx portless trust` inside the project (use an
**Administrator** PowerShell if it errors), then run `bun dev` again. Use **Edge or Chrome**,
which resolve `.localhost` automatically.

**`bun dev` can't start the proxy / "port 443 in use"** → Another program is using HTTPS port
443. Close it, or serve over plain HTTP once with `bunx portless proxy start --no-tls` (app is
then at `http://web.localhost`).

**`claude` or `codex` not found after installing** → Open a **new** terminal; PATH updates
only in fresh windows. If still missing, restart the PC.

**Codex can't set up its sandbox** → Approve the Windows **administrator** prompt on first run,
and make sure the **VC++ Redistributable** is installed (Step 8). On managed work/school PCs,
IT policies may block it.

**Want the prettier prompt you see on Mac (git branch, colors)?** → Optional:
`winget install JanDeDobbeleer.OhMyPosh` then follow [ohmyposh.dev](https://ohmyposh.dev),
the "Oh My Zsh" of PowerShell.

## Make it yours: settings, configs & quality of life

Everything you installed is configurable, and **your agent can set it up for you**. Notice
what makes you sigh and turn it into a prompt:

- *"How can we make my terminal nicer to use? Set up some helpful aliases for me."*
- *"How can we improve my VS Code experience with settings? Turn on word wrap and anything else worth having."*
- *"Every time I do X it's annoying, can we configure something to fix that?"*

The agent knows where these settings live and how to change them safely.

### A couple of concrete examples

**Shell aliases** are short nicknames for longer commands. Define them once and they work in
every terminal:

```bash
# In your shell config (~/.zshrc on Mac, your $PROFILE on Windows)
alias cl="clear"
alias cc="claude --dangerously-skip-permissions"
```

Normally your agent asks for approval before every edit or command (you saw this in Step 8).
The `--dangerously-skip-permissions` flag, often called **YOLO mode**, turns that off: the
agent does the work without stopping to ask.

> **The trade-off:** with permissions skipped, the agent *can* run any command, including
> destructive ones, so it could delete files it shouldn't. I run agents only this way, since
> approving every action drove me up the wall. Keep your code in Git so anything can be
> undone. If in doubt, leave it off and add the alias later.

Do the same for whatever you use most: Git commands, project shortcuts, your dev server. Tell
the agent *"add an alias `cc` that runs Claude with permissions skipped"* and it edits the
right file for you.

---

## You did it

You have a working setup and a real app running on your own machine, created from the
[Mark-Life/netxjs-monorepo](https://github.com/Mark-Life/netxjs-monorepo) template in one
command, without knowing what any of the code means yet.

## What's next

Next we open that project up: how a Next.js app is organized, how pages and components work,
and how to make it look the way you want. Once `bun dev` shows the app at
[https://web.localhost](https://web.localhost), you're ready to build. 🎉

## Links

- Lesson page: https://andrey-markin.com/courses/vibe-coding/set-up-your-environment
- Course: https://andrey-markin.com/courses/vibe-coding.md
- Next lesson: https://andrey-markin.com/courses/vibe-coding/tour-your-project.md
