Build Beautifully

Session 4  ·  Build Like a Pro  ·  Advanced vibe coding

buildbeautifully.lovable.app

🛟 If you get lost, you are not behind.

Type any of these to Claude. She'll pick you back up exactly where you are.

Where am I in the course? Catch me up. Explain that in plain English. Give me a simpler version. Undo that.

Starting Up

Everything happens in VS Code

If VS Code opens its own chat panel, close it — that isn't Claude.

Two places to type

The chat. You type English. Claude does the work.

The terminal. You type commands. Your computer does the work, and Claude isn't involved.

The terminal is built into VS Code: Ctrl + backtick (above Tab, left of the 1), or Terminal → New Terminal.

Claude tells you which one, every time.

Today's Map — Your Instructor Calls Each One

4 min
Introduction
/introduction

Two new concepts and one new tool.

16 min
Setup
/step-1-setup

Your language, name and mascot. The workspace tour. Your first MCP.

7 min
CLAUDE.md
/step-2-claude-md

Your colors and feeling, written into the file that holds your instructions.

20 min
Plan & Build
/step-3-plan-and-build

Plan → build → iterate. Your app comes to life.

34 min
The Gauntlet
/step-4-gauntlet

Live preview, then a 20-minute capped loop of builders and critics.

9 min
Make It Speak
/step-5-audio

Real pronunciation audio, through an API call you make yourself.

8 min
Ship It
/step-6-ship

Save to GitHub. Connect to Vercel at home.

Remember
This is a phone app

Everything gets built and judged at phone width. Keep your preview window narrow.

The Two New Words

MCP

A plug-in pack of new abilities for Claude. A USB port for Claude.

You install it once, with one line. You never write code to use it.

Today's is Playwright — it gives Claude eyes in a real browser. She can open your app, screenshot it, read its errors, and click through it.

The Gauntlet Loop

When Claude checks her own work she's grading her own homework, and she's a generous grader.

So we split the job. Claude breaks your app into pieces. For each piece: one agent builds it, and a completely separate agent judges it — one that never saw the builder's reasoning.

Every piece loops until its own judge is happy. There's no set number of rounds.

Commands You'll Type

In the terminal panelWhat it does
claude mcp add --scope user playwright -- npx -y @playwright/mcp@latest --output-dir ~/playwright-outputInstalls your browser MCP, everywhere on your machine. The last bit keeps screenshots out of your project.
claude mcp listChecks it worked. Look for Connected. If it says failed, wait 5 seconds and run it again — it's still downloading.
npx live-serverOpens your app in a browser that refreshes itself every time a file changes.
npm init -ySets up a project file. Always before installing anything.
npm install @fal-ai/client dotenvThe two packages the audio needs.
node generate-audio.mjsRuns the script that makes your audio files.
Stop the live preview before you generate audio. Click into that terminal and press Ctrl+C. A dozen new sound files means a dozen page reloads, which breaks playback. Start it again with npx live-server afterwards.

VS Code — Three Things That Matter

1 · The file tree

The list down the left side — every file and folder in your project. When Claude makes something, you watch it appear there.

2 · Diffs

A diff is a before-and-after view of the same file. Current version one side, new version the other, changed lines highlighted. Green is being added, red is being removed.

3 · Rewind

Hover over any message you sent and click rewind. Your files go back to how they were at that point.

Why Sonnet?

The Gauntlet spawns a lot of agents at once, each carrying its own context. Sonnet is built for that and keeps you comfortably inside your plan. Check yours any time with /usage.

CLAUDE.md — Where Your Instructions Live

The one sentence to take home: things you only say to Claude can disappear. Things written in CLAUDE.md come back — she re-reads it off the disk.

Two rules for writing one

Keep it under a page. If it gets long, Claude follows it less closely.

Write lines she can check. "Buttons have a pressed state" beats "make it look polished" — she can look at the screen and tell you whether she did it.

Making your own at home

Ask for it: "create a CLAUDE.md for this project", or type /init for a first draft.

1. Plan2. Write your CLAUDE.md3. Build4. Iterate. Correcting the same thing twice? It belongs in the file.

Where Secrets Live

🔒 Never paste an API key into a chat window. Not to Claude, not to anyone, not "just to check". It goes in a file on your own computer and nowhere else. A key is a password with a credit card attached.

The two files

.env          →  FAL_KEY=your_key_here
.gitignore    →  .env

.gitignore is a list of things that never leave your laptop. Your key lives in .env, .env is listed in .gitignore, so when your app goes online your key stays home.

The gotcha nobody warns you about

Creating .env isn't enough — Node doesn't read it by itself. Your script needs this as its very first line:

import 'dotenv/config'

If your API calls fail with an auth error and you're sure the key is right, this is almost always why.

Troubleshooting

What you seeWhat to do
Failed to connect on the MCPWait 5 seconds, run claude mcp list again. It's still downloading.
claude: command not foundThe VS Code extension doesn't add claude to your terminal — separate install. Mac: curl -fsSL https://claude.ai/install.sh | bash
Can't find Claude in VS CodeOrange spark, top right. If VS Code's own chat opens instead, close it.
Your app flickers and reloads constantlyScreenshots are landing in your project. The MCP needs the --output-dir part — reinstall it with that flag.
The Gauntlet won't stopIt has no off switch, by design. Close the Claude tab, then reopen and type /resume. Nothing is lost.
Audio fails with an auth errorCheck import 'dotenv/config' is the first line of the script. Then check .env for stray quotes or spaces.
Cannot find moduleYou skipped npm init -y, or you're in the wrong folder. Check with pwd.
Claude forgot your brandThat's what CLAUDE.md is for. Point her at it and watch it snap back.

Glossary

MCPA plug-in pack of new abilities for Claude.
Gauntlet LoopOne builds, one judges, for every piece — until it beats the bar.
IDEThe editor professionals live in. Yours is VS Code.
File treeThe list of your files down the left side.
DiffBefore and after of the same file, side by side.
AgentAn AI worker that uses tools and decides what to do next.
APIOne program asking another program to do something.
API keyA password that belongs to a program, not to you.
.envThe file your secrets live in. Never leaves your laptop.
.gitignoreThe list of things that never get uploaded.

What You Actually Learned

1 · You can give Claude abilities she doesn't ship with

There are hundreds of MCPs and they all install the same way yours did. One line, once.

2 · Written down beats said out loud

Your CLAUDE.md held your brand through an hour of building — and through closing the whole conversation and reopening it.

3 · Secrets live in .env, listed in .gitignore

And never in a chat window. This is the habit that saves you real money one day.

4 · One builds, one judges, against a real bar

Run the Gauntlet on anything you can look at — a deck, a landing page, a cold email.

Tonight: connect your repo to Vercel — same as your Workshop 2 game, about two minutes. Then open it on your phone, which is what it was built for, and send the link to one person.
Want the deep version? The Gauntlet Loop came from Matt Shumer. The original write-up and prompt are at somethingbig.ai/gauntlet-loop, and everything about how it works is in reference/02-the-gauntlet-loop.md in your workshop folder.