claudecraft
main ~/start.md 01 / 10
~ — claude-code — 80×24

How Claude Code crafts the web

An eight-stop tour through how Claude turns an ambiguous request into a finished, polished site. The page you’re reading is the worked example — each stop ahead is a step in the workflow that built it. You click through it; it never scrolls past you.

← → arrow keys · the dots above · or the buttons below move between stops

$ cat README.md why this exists
stop · 0 · intro
README.md

Why this exists

Most guides about Claude Code tell you how it works — lists of features, enumerated flags, sketched flowcharts. This one is different. It shows you, by walking through the build of itself.

Every stop you’ll read maps to a real moment in this site’s construction — a real decision, a real tradeoff, a real piece of code. Nothing here is hypothetical. The thing you’re using is the thing being explained.

If you’ve ever wondered what it actually feels like to design and ship software with Claude as a collaborator, this is the closest you can get without opening a terminal yourself.

How to read it

Show, don’t tell.

Every stop is structured as a real moment in the build — what was being thought about, what was decided, why a path was chosen and another abandoned. The site is both the lesson and the lesson plan. The argument and the evidence. Pull on any thread and you’ll find the work underneath it.

The medium is the message — the site you’re using is the proof that the workflow works.
Begin where Claude begins: not with code, but with a way of thinking.
$ cd thinking/ && cat mindset.md loaded · 5 habits
stop · t · mindset
thinking.md

Think first. Type later.

Before the first character of code, Claude is doing the unglamorous work — reading context, asking the right questions, mapping the shape of the problem. Half the win comes from how you start.

Good code starts with good understanding. The model that prepares well writes less code, fixes less code, and ships with more confidence. A few minutes spent reading the surrounding files, naming the real constraint, and sketching the shape of the change pays back many times over — fewer wrong turns, fewer rewrites, fewer surprises waiting in the next pull request. Thinking isn’t a delay before the work. It is the work.

Five habits, in order

01 · CONTEXT

Read what’s already there.

Look at the codebase, the conventions, the user’s recent messages. Don’t propose anything until you’ve read enough to know what you’re walking into.

02 · INTENT

Get the literal request, then find the real one.

What someone types is rarely the whole picture. A clarifying question costs seconds; an unwanted feature costs hours.

03 · SHAPE

Decompose before deciding.

Break the problem into pieces small enough that each one has an obvious next move. Sequence them.

04 · STEPS

Prefer small reversible moves.

A series of tiny edits you can undo beats one giant change you have to defend. Mistakes get cheaper.

05 · TOOLS

Use the right tool for the moment.

Read for known files. Grep for symbols. Subagents for parallel research. Plan mode for non-trivial scopes. Match the move to the task.

Underneath all of it

Pause is a feature.

There is a strong gravity toward typing. A blinking cursor feels like progress; a quiet moment of reading does not. But the model that pauses to read a file, ask one good question, or sketch a plan is doing the most valuable work in the session — not the least. The pause is where the wrong solutions get filtered out before they cost anything.

The cheapest moment to change your mind is before you’ve written anything.
Try it: When Claude starts on your next task, watch for these five habits — or notice when they’re missing. The moments when the workflow feels slow are usually the ones earning their keep.
$ git checkout step/01-understand switched branch
stop · 01 of 06
01-understand.md

Understand what’s actually being asked

The literal request and the intended one are rarely the same. The first job is to find the gap and close it before it costs anything.

Most requests are compressed. The user has a fuller picture in their head than the words on the screen carry. Take the literal interpretation and you’ll often produce something technically correct and entirely useless — a working answer to the wrong question. The real work is decompression: expanding the sentence back out into the picture it came from. That picture is where the build actually lives.

A live example: this site

The opening request for this site was four words.

> we are going to make a now website

In most contexts, “now website” points to a /now page — the small personal status pages popularized by nownownow.com. A reasonable guess. But it was a guess, and acting on it would have built the wrong thing.

So the response wasn’t code — it was a clarifying question. Standalone or part of an existing site? Plain or designed? A content draft, or a starter you’d build on? The reply made clear the request had nothing to do with a /now page at all.

> it is goimg to be a informational website on how to use
> claude code to dezin and make thing s like the wedsite.
> ... ues agents for each page ... color be white orenge and black.

Two short sentences. The literal first message would have produced a personal status page. The actual ask was a multi-page interactive guide — the very thing you’re reading.

One question saved hours.

What makes a good clarifying question

Not every question helps. The good ones share a shape.

  • Multiple-choice, not open-ended — give the user concrete options to react to.
  • Surface the assumption you’d make if you didn’t ask — so they can correct it cheaply.
  • One or two questions, not a survey — pick the ones that change what gets built.
  • Ask before you scope, not after — questions after a plan turn into rework.
The trap to avoid

Don’t perform certainty you don’t have.

Pretending to understand is a tax the user pays later — in rewrites, in walked-back features, in the slow erosion of trust that comes from a build that keeps missing.

Asking is faster than guessing, even though it feels slower in the moment. The pause before the work is the cheapest part of the work.

A clarifying question costs seconds. A misread request costs the whole build.
Scope in, scope out. For any task, write down the one or two things that are in scope and the one or two things that aren’t. The boundary is the work.
$ ./plan --decompose --sequence --parallelize 8 pieces · 1 foundation
stop · 02 of 06
02-plan.md

Plan the whole arc, then the next move

Once the request is clear, the work splits into pieces. A good plan names the pieces, sequences them, and finds what can happen at the same time.

Planning isn’t about producing a polished document. It’s about getting alignment — between you and the model, between the work and the intent. With Claude Code, the plan is usually a short conversational proposal: here’s what I’ll do, here’s the order, here’s what I’d skip — sound right? That exchange is the artifact. Nothing more is needed.

Three moves of planning

01 · DECOMPOSE

Name the pieces

Break the work into pieces small enough that each one has a single, obvious next action. If a piece is fuzzy, it’s not small enough yet.

02 · SEQUENCE

Find the order

Find the dependencies. What has to exist before the next piece can start? Foundations first; finish work last.

03 · PARALLELIZE

Spot the independence

Spot the pieces that don’t depend on each other. Those can be done at the same time, by separate agents, with no coordination cost.

Live example: planning this site

After the request became clear, the plan was a short proposal — eight pages, built by eight agents in parallel, but only after a shared design system was in place.

Pages (8 total):
  index.html       — landing / intro
  thinking.html    — how Claude approaches a problem
  01-understand    — understanding the request
  02-plan          — planning the approach
  03-design        — design decisions
  04-build          — writing the code
  05-refine        — iterating & polishing
  06-finished      — the finished product

Build approach:
  1. Write shared styles.css + transitions.js first
  2. Spawn ~8 agents in parallel — one per page
  3. Assemble & spot-check at the end

The user said “go ahead.” That confirmation is the plan being approved.

The hidden move

Find the foundation.

The most important planning question is rarely what should we build first? It’s what has to exist for everything else to be consistent? For this site, that was the shared CSS. Without it, eight parallel agents would have produced eight different-looking pages — eight micro-aesthetics colliding at the seams. With it, they could all move at once and still arrive at one place.

The foundation goes first. Everything else can then go fast.

Parallelism is cheap once the contract is shared.
The plan you can throw away. A good plan is one you’d happily abandon when the work tells you something better. The point is alignment, not commitment.
$ design --tokens --constrain 3 colors · 2 typefaces · 1 rhythm
stop · 03 of 06
03-design.md

Design with constraints, not options

Three colors. Two typefaces. One layout rhythm. The fewer the choices, the more obvious each one becomes.

A blank canvas is paralyzing. A canvas with three colors and two typefaces is a problem you can actually solve. Design is not about generating options. It is about closing them. Every constraint you accept up front is a hundred decisions you will never have to revisit later — no debate over a fourth color at midnight, no second-guessing a third typeface on page nine.

The work shifts from invention to application. You stop asking “what could this be?” and start asking “given what we agreed, what does this want to be?” That is a much smaller, much more answerable question.

Four design slots, made up front

01 · COLOR

Three colors, no exceptions

White as the page, black as the ink, orange as the accent. If you need a fourth, you don’t — you need to use one of the three differently.

02 · TYPE

One typeface, one job

Space Grotesk for display, Inter for body, JetBrains Mono for code. Each typeface has one job. Mixing roles produces noise.

03 · RHYTHM

Alternating slabs

Black hero slabs alternate with white reading sections. The reader’s eye learns the pattern after the second stop.

04 · MOTION

Confirm, never perform

A blur-and-fade for navigation, a quiet rise for reveals. Motion exists to confirm what just happened — never to perform.

Live example: how this palette was chosen

The user gave the palette: white, orange, black. That’s a constraint with a payoff.

Those three colors fixed dozens of downstream decisions on the spot. What color is a card hover? Orange. What color is a code block? Black. What color is the page? White. What color is a link? Orange, until it’s read, then still orange. No deliberation, no swatch boards, no afternoons lost to “is this teal a little too cool?” The answer was already on the wall.

:root {
  --black:        #0A0A0A;
  --white:        #FAFAF7;
  --orange:       #FF6B35;
  --orange-deep:  #E04A12;
  --orange-soft:  #FFE9DF;
}

Five tokens cover the whole site. Five.

On motion

Move with purpose, or not at all.

Every animation on this site is doing one of exactly two jobs. The first is confirming a navigation — a transition that ties what you left to what you arrived at, so the jump feels like a step instead of a cut. The second is revealing the next chunk of reading — a quiet rise as a stop arrives, so the page meets you at your pace. Nothing loops. Nothing decorates. Nothing bounces for the sake of bouncing.

If a reader notices the animation, the animation is wrong.
Pick the smallest box you can. Before you start designing, write down the constraints you’ll accept. Three colors, two typefaces, one layout. The work after that is not invention — it’s application.
$ parallel-agents --count 8 --start 8 jobs dispatched
stop · 04 of 06
04-build.md

Build in parallel where you can

The slow way is sequential — one piece at a time, in order. The fast way is to do the foundation alone, then everything else at once. The trick is knowing which is which.

Anything that everything else depends on has to exist — and be stable — before parallel work starts. For this site, the foundation was two files: styles.css and transitions.js. Eight pages were going to be built in parallel by eight separate agents. If those agents had also been writing the CSS, they’d have written eight different design systems — eight type scales, eight color palettes, eight ideas of what a card looks like. The foundation gets written once, by one mind, before anyone else gets to touch the project.

Why subagents change the math

A subagent is a fresh thread with its own context window. Spin up eight at once and the work that would have taken an hour takes minutes — but only if you set them up to succeed.

01 · INDEPENDENT

No cross-talk

Subagents work best on tasks that don’t need each other’s output. Eight pages, eight prompts, no cross-talk.

02 · CONTEXT-PRESERVING

Clean main thread

Each agent gets only what it needs. The main thread’s context stays clean for assembly and review.

03 · CONSISTENT

One contract, eight outputs

If every agent inherits the same design contract in its prompt, the eight outputs feel like one site, not eight.

Live example: dispatching eight agents

Once the shared CSS and JS were written, eight Agent calls went out in a single message — one per page. Each agent received the same design contract and the content brief for its specific page.

// All in one message, dispatched in parallel:
Agent({ description: "Write index.html",     prompt: "[brief + content for home]" })
Agent({ description: "Write thinking.html",  prompt: "[brief + content for mindset]" })
Agent({ description: "Write 01-understand",  prompt: "[brief + content for step 01]" })
Agent({ description: "Write 02-plan",        prompt: "[brief + content for step 02]" })
Agent({ description: "Write 03-design",      prompt: "[brief + content for step 03]" })
Agent({ description: "Write 04-build",       prompt: "[brief + content for step 04]" })
Agent({ description: "Write 05-refine",      prompt: "[brief + content for step 05]" })
Agent({ description: "Write 06-finished",    prompt: "[brief + content for step 06]" })

Eight outputs in roughly the time of one.

The contract that makes it work

The shared brief is the glue.

Each agent’s prompt didn’t say “make a page about X.” It spelled out the exact CSS classes available, the required HTML skeleton, the journey nav (with the right item marked current), the prev/next links, and the content for that specific page. The more precise the contract, the more consistent the result. Vague briefs produce eight different sites; tight briefs produce one.

A subagent inherits no context. The brief is everything it knows.
What goes in the prompt: the file path, the design tokens, the exact markup for shared regions (nav, footer), the content brief, and a hard rule that the agent must not modify shared files. Anything you’d want a brand-new collaborator to know on day one.
$ git diff | review --strict 8 files · ok
stop · 05 of 06
05-refine.md

Refine until it earns its place

The first draft of anything is a guess that came out of the keyboard. Refining is the work of asking, of every line: does this need to be here?

Subagents are confident. Their summaries describe what they meant to do — not necessarily what they did. The moment the parallel work returns, the main thread’s job is to actually look. Open the pages. Click the links. Check that the journey nav is consistent across files. Verify the prev/next chain end to end. Spot a card that didn’t get the reveal class and add it. The diff between intent and reality is small, but it is never zero.

Three passes of refinement

01 · CHECK

Read what came back

Open every output. Click every link. Compare what was promised to what landed. Fixes here are cheap.

02 · SIMPLIFY

Cut, don’t refactor

Cut anything that doesn’t earn its place. A removed line is faster than a refactored one.

03 · POLISH

Care for the small things

Hover states, focus rings, motion timing, the small things that make a page feel cared for. Done last, never first.

Live example: assembling this site

When the eight page agents returned, the assembly job was a quick read of every file.

  • Did each page mark its own journey link as is-current?
  • Are the prev/next links a clean chain — no dangling, no duplicates?
  • Did every page get the reveal class on its content blocks?
  • Does the design feel of-a-piece across all eight, or did anything drift?

Most of the work was small. Most refinement is.

The hardest cut

Delete the clever bit.

There is always a paragraph you are proud of, a flourish you want to keep, a card that took an afternoon. If it doesn’t earn its place on the page, it has to go. The page is better when nothing in it is showing off — when every part is just doing its job, quietly, in service of the reader.

If you can’t justify a line in one short sentence, the line shouldn’t be there.
The diff is the truth. An agent’s report describes intent. The actual changed bytes describe reality. When in doubt, read the diff.
$ ./build --release --open shipped
stop · 06 of 06
06-finished.md

You’re looking at it.

Every stop in this deck is a step in the workflow that built it. The artifact and the case study are the same object. That was the whole point.

What just happened

Eight pages of source content, built in roughly the time of one. Here’s the recap.

  1. An ambiguous four-word request became a concrete brief, after one clarifying question.
  2. The brief decomposed into eight pages and a shared design system.
  3. The design system — three colors, two typefaces, one layout rhythm — went first, written by hand.
  4. Eight subagents wrote the eight pages in parallel, each inheriting the same contract.
  5. The main thread assembled, spot-checked, and refined.
  6. Then the eight pages were folded into one stepped deck — the experience you’re clicking through now.
What to take away

The workflow scales down.

This site happens to be eight pages, but the same five moves — clarify, plan, design the foundation, parallelize the rest, refine — work just as well for a single function or a whole product. The shape of the work doesn’t change with the size of the project.

What changes is how many of each move you make. A one-line fix might need thirty seconds of clarifying and no parallelization at all. A larger system might need a week of planning and a dozen subagents. The order is the same. The discipline is the same.

The model that pauses, plans, and asks one question at the start ships more than the model that types right away.
The medium is the message. If a guide on how to build with Claude Code can’t be built with Claude Code, it isn’t much of a guide.
$ echo "// the end" done

Try it with Claude Code.

Open it on a project of your own. Start with something small. Notice when the workflow slows down — and notice that the slow part is usually where the value is.

Get Claude Code →
$ claudecraft — built with claude code, may 2026  ·  claude.com/claude-code