Part 2 of 3, for Janika_

The Ship It
Graduate
Deck.

You know the alphabet. Now let’s write with it. Same widget, second time through, but this time with a proper site office behind you.

When you’re ready, scroll on.
ProjectShip It Stage02 of 03 Scale1:1, Hands-on RevA
Chapter 01 · Welcome back

First, a quick
memory check.

Tap each card and try to say the answer out loud before you reveal it. Saying it aloud is how the knowledge sets in the concrete, rather than staying as scaffolding.

What’s the whiteboard Claude sees?
Context. Everything Claude can see in this exact chat: your messages, the files you’ve shown it, the commands it’s run. Wipes when you start a new session.
tap to reveal
What’s the file that survives every session?
CLAUDE.md. Claude reads it at the start of every chat. Your project’s code sheet. Keep it short and universal.
tap to reveal
The three Claudes, fast to slow?
Haiku, Sonnet, Opus. Haiku for quick lookups. Sonnet for most work. Opus for deep thinking.
tap to reveal
How do you start Claude with your Doppler keys?
doppler run -- claude. The doppler run -- bit hands your keys to Claude for that one session. Nothing saved in a file.
tap to reveal
Three bits of a strong prompt?
What, for whom / where, and constraints. The thing you want, the context Claude couldn’t guess, the rules it must obey.
tap to reveal
What’s a skill?
A named shortcut. You type /review or /commit and Claude runs a pre-written workflow. Like calling a standard detail by number.
tap to reveal
Honest score

If you got four or more without peeking, you’re ready. If not, no shame. Flip back to Part 1 for ten minutes, then come back. This deck builds on every one of those.

Chapter 02 · Keys to the kingdom

API keys,
but safely.

Before anything else we’re going to sort out API keys. Think of them as the security passes you wear on site: one each for the services we’ll use, kept in a locked safe, scanned when needed.

What Doppler is, in one line

Doppler is a free online safe for your API keys. It stops you ever pasting one into a file and accidentally committing it to the public internet (which happens to everyone eventually).

Setup · Once, then never again

Get your passes, put them in the safe.

Good news: you can ask Claude to do most of this for you. “Run doppler setup for the tfl-widget project” will work. The steps below are just so you know what it’s doing.

1. Make a Doppler account Open doppler.com, sign up (the free tier is generous). Install the small Mac tool with one line:
brew install dopplerhq/cli/doppler
Then log in:
doppler login
2. Grab your TFL key (you already have this) From Part 1 you registered at api.tfl.gov.uk. Find your app key, copy it. This is the only one you need for today’s widget.
3. Point Doppler at your project Inside your Superset workspace folder:
doppler setup
Pick or create a project called tfl-widget.
4. Save your TFL key in the safe
doppler secrets set TFL_APP_KEY="paste-yours-here"
5. Run Claude with access to the safe Instead of plain claude, start sessions with:
doppler run -- claude
This hands Claude the keys for that session only. Nothing saved in your files.
6. For later: OpenAI and Gemini keys You don’t need these today. But when you want to experiment with different models (Ship It’s design skills love them), come back and run:
doppler secrets set OPENAI_API_KEY="sk-..."
doppler secrets set GEMINI_API_KEY="..."
OpenAI keys from platform.openai.com/api-keys. Gemini keys from aistudio.google.com/app/apikey.
The cardinal rule

Never paste an API key into a file. Never commit one. Never put one in a screenshot. If you ever do, rotate it immediately (the provider’s website has a “regenerate” button). Keys leaked to the public internet get abused within minutes.

Chapter 03 · The playbook, introduced

Meet the Ship It repo.

Ship It is a project bible someone (hello) wrote after building one app the hard way. It’s not code. It’s a folder full of guides, templates, and reusable skills you copy into any new project. It saves you the mistakes.

ship-it/ ├─ guide/ , the specification documents ├─ templates/ , drawing templates for a new project ├─ skills/ , the standard details library ├─ book-keeping/ , the daily site log (next slide explains) ├─ quick-ref/ , site instructions pinned to the hoarding ├─ examples/ , case studies, “here’s what good looks like” └─ meta/ , how the playbook keeps itself tidy

How to use it.

You won’t be copying folders by hand. You tell Claude, and it handles the ceremony. Paste this into a fresh project folder:

Paste this to set up any new project Claude, please set up a new project from the Ship It templates in ~/ship-it.
Copy templates/ into my new project folder, copy the core skills from skills/ into .claude/commands/, and tell me when you’re done.
What this actually does
1
Copies ready-made templates (CLAUDE.md, SPECS.md skeleton, feature pack template) so day one isn’t a blank page.
2
Copies skills into .claude/commands/, which is exactly where Claude Code looks for them. Put them anywhere else and Claude won’t find them.
3
Leaves guide/ untouched in Ship It itself. You’re borrowing the patterns, not the library.
Chapter 04 · The project’s heartbeat

Four files Claude
writes for itself.

Every project has a pulse: where you left off yesterday, what’s in flight, what went wrong last time, what you decided and why. These four files carry that pulse between sessions so nothing gets lost.

01

NOW.md

book-keeping/NOW.md

Where we left off and what’s next. The “pick up the pencil” note. Claude reads it at the start of every session so you don’t have to re-explain yourself.

02

IMPLEMENTATION_PROGRESS.md

book-keeping/IMPLEMENTATION_PROGRESS.md

Running phase-completion tracker. Which phases are done, which are in flight, which haven’t started yet. Keeps everyone (you, Claude, future you) on the same page.

03

KNOWN_PITFALLS.md

book-keeping/KNOWN_PITFALLS.md

Traps the team fell into, so future-Claude doesn’t fall into them again. Grows slowly, one lesson at a time. Invaluable at month three.

04

DECISION_LOG.md

book-keeping/DECISION_LOG.md

The “why we chose X over Y” record. When someone asks six months later why the API is shaped this way, you have an answer with reasoning.

Architectural parallel

Like the daily site log, the variation register, the lessons-learned log, and the decision-and-variation log. Every serious construction project has them. Pretending you don’t need them is how projects go wrong.

Two more files live alongside these and come alive once you’re mid-build: OPEN_QUESTIONS.md (things you haven’t yet decided, so they don’t get forgotten) and FUTURE_IDEAS.md (things worth coming back to later). Don’t worry about those yet.

Hands-on

Ask Claude: “Based on what we did today, please draft a NOW.md for tomorrow.” Read what it writes. Tomorrow you’ll start where you left off.

Chapter 05 · Architecture of a project

Same discipline
as a drawing set.

SITE PLAN root folder FLOOR PLAN feature folders DETAIL individual files

Your repo has three scales, like a drawing set does:

The site plan

The root folder. Shows what the whole project is about. Contains CLAUDE.md, SPECS.md, and top-level folders.

The floor plans

Feature folders. Each one contains everything about one feature: its spec, its rules, its tests. Self-contained.

The details

Individual files. One thing each. A small function, a single page, a single skill. Tight scope.

Why it matters

Good structure lets Claude work without getting lost. Claude can open just the detail it needs, without loading the whole project onto its whiteboard. Same reason you don’t carry the site plan to decide a door ironmongery schedule.

Chapter 06 · Everything points at something

Drawings reference
spec clauses.

On a real project, a floor plan doesn’t restate a spec clause. It says “see spec section 07 21 16” and your eye jumps to the right place. When the spec changes, the drawing still points correctly.

Ship It does the same. Every file that mentions a rule references it by name, not by copying it. Change the rule in one place, and every reference still works.

The wrong way

# chat_mode.md

Do not quote user content longer than 40 characters.

# report_mode.md

Do not quote user content longer than 40 characters.

# voice_mode.md

Do not quote user content longer than 40 characters.

Three places to update. Two will be forgotten.

The Ship It way

# chat_mode.md

Follow SPECS.md > Privacy > Quoting.

# report_mode.md

Follow SPECS.md > Privacy > Quoting.

# voice_mode.md

Follow SPECS.md > Privacy > Quoting.

One place to update. Every reference follows.

Architectural parallel

A drawing that says “fire rating: 60 minutes” will drift. A drawing that says “refer to fire strategy, 60-minute compartment” stays right forever, because there’s one fire strategy and everyone reads it.

Chapter 07 · The skills you’ll use today

Five skills,
one widget.

Ship It ships with dozens of skills. You don’t need dozens today. You need five. They chain together beautifully. Read each one slowly, they’re the vocabulary of the next forty minutes.

/spec-writer Start here

The conversational brief-taker.

Walks you through a Socratic conversation, one question at a time, to produce a proper product spec (SPECS.md). It draws out edge cases, failure modes, and things you hadn’t thought of. At the end it hands you a written brief so solid that no builder can misinterpret it.

When to use On day one of any project, before a single line of code. About 20 minutes of chat.
/init Built-in

The CLAUDE.md starter.

Scans your project and drafts a sensible first-pass CLAUDE.md, the file Claude reads at the start of every session. You refine from there. Ships with Claude Code, so it’s always available.

When to use Once, right after /spec-writer. Also re-run occasionally if your project has grown a lot.
/feature-plan Detailed drawing

The feature architect.

Takes one feature and plans it properly: produces a spec, a contract of what it does and doesn’t do, its states, and its acceptance criteria. Think of it as pulling one detail drawing out of the site plan.

When to use After /spec-writer has set the overall project direction, and you’re about to build one concrete thing.
/commit Save checkpoint

The revision-stamper.

Reads what you just did, writes a clean commit message, and saves the checkpoint locally. It does not push to GitHub or open a pull request, those are separate on purpose. For pushing, say “please push” to Claude. To commit + push + open a PR in one go when deliberately closing a pack, use /commit-push-pr.

When to use Every time something works. Small commits are good commits.
/review Quality gate

The second pair of eyes.

Spins up specialist sub-agents to review your recent changes for bugs, silent failures, sloppy types, drifted names, and missing tests. They all run in parallel and report back. It’s like having your whole review team on call, on tap.

When to use Before you open a pull request, or whenever something feels a bit off and you want a sanity check.
They chain

A real build day is richer than it looks here. The short version: /spec-writer once at the start, /init straight after, then for each phase: /feature-plan → build → /commit when something works → /review before opening a PR. At session end, /wrap tidies your book-keeping files; a separate push sends your commits to GitHub. Part 3 opens each step up properly.

Chapter 08 · Your co-pilot

Start every session with
a guide on your shoulder.

Ship It has one skill that’s different from the others. It’s not a tool, it’s a teacher. Run it first thing every session.

First thing every session /implementation-guide

On invocation it actively reads your NOW.md and progress tracker, then tells you where you left off and what comes next.

Before you say “ready for the next phase”, it quietly runs a visual-phase gate: have you completed the design audit for this phase? Are there device screenshots committed? Has the context-budget been checked? If any of those are missing, it refuses to greenlight. Not punitive, protective.

In practice it might say: “You’re about to move to Phase 3 but I don’t see a design-audit artefact from Phase 2. Shall we do that first?” Or: “Context is at 78%. Consider a /wrap and fresh session before the next phase.”

Architectural parallel

It’s like having a senior architect beside you on every site visit. Not doing your job, just making sure you don’t miss the obvious.

Chapter 09 · The whole workflow

Six stages.
One rhythm.

Same rhythm you already know: understand, plan, build, check, hand over. Each stage has one or two skills that live there naturally.

Stage 1
Spec
understand what you’re building
/spec-writer
Stage 2
Blueprint
break it into buildable slices
/feature-plan
Stage 3
Plan
phase the build out
/build-pack
Stage 4
Build
make it work, one phase at a time
/build-team
Stage 5
Review
let specialists check your work
/review
Stage 6
Ship
hand it over
release

You don’t have to remember the names. Just notice the rhythm: understand, plan, build, save, check, ship. Over and over again, for every feature you add.

Part 3 goes inside each stage and shows the real moving parts. For today, knowing the rhythm is enough.

Chapter 10 · The real thing, done properly

Now rebuild the widget,
the grown-up way.

Last time we shipped it with three prompts. That was enough to prove the idea. Now we’ll do it again, using the skills you just learned. You’ll notice two things: it’s slower to start, and it’s much, much faster to finish.

You’re rebuilding deliberately, not because Part 1 failed, but because the second time through is where the pattern sticks. This is the same reason you’ll sketch a junction detail twice on a new project, even though you know it.

Before you start

Allow about 60 to 90 minutes for all five steps. You do not need to finish in one sitting. If you run out of time at Step 3, save the session and come back tomorrow, your NOW.md will tell Claude where to pick up.

Step 1 of 5 · Spec it properly

Start with /spec-writer

Open a fresh Superset workspace. You’ll need the Ship It skills copied in. Tell Claude the path to your local ship-it folder (tip: drag the folder from Finder into the terminal to paste its path) and say: “please copy every skill from that folder’s skills/ directory into .claude/commands/ here”. Then start Claude with:

Paste /spec-writer

I want to build a small, beautiful iPhone widget for London tube arrivals and line status. You know the drill, please run the five-phase flow.

Claude will ask you questions, one at a time. Answer honestly. At the end you’ll have a SPECS.md that’s way better than the scribbled plan we made last time.

Step 2 of 5 · Prime the project memory

Then /init

Paste /init

Claude reads your new SPECS.md and drafts a CLAUDE.md. Look it over. Tighten anything that feels too vague or repeats the spec. Keep it under a hundred lines.

Step 3 of 5 · Plan the build

Now /feature-plan

Paste /feature-plan

The widget is a single feature. Please plan it as one feature pack, kept small.

This produces the feature’s own little spec pack, the detailed drawing for this one thing.

Step 4 of 5 · Build and checkpoint

Build, then /commit

Now ask Claude to start building against the plan. Work in small chunks. Every time something works, type:

Paste (often) /commit

You’ll end up with a lovely history of small, readable checkpoints. If anything goes wrong you can rewind one step at a time.

Step 5 of 5 · Sign-off

Finish with /review

Paste /review

Check the widget for bugs, silent failures, and anything I might have missed. Make sure the TFL API key is only ever read from Doppler, never pasted in a file.

You’ll get a structured report. Fix anything urgent, commit those fixes, and ship. Congratulations, you’ve just built software the way professionals do.

The difference

Last time you got to working code. This time you got to confident code: something you can extend, hand off, or come back to in a month without being lost. That’s the graduation.

Chapter 11 · Ask before you build

Let Claude
ask first.

Most AI mistakes come from Claude guessing instead of asking. The single biggest upgrade to your workflow is making “ask first, build second” the default. Five minutes of questions upfront beats an hour of debugging wrong assumptions later.

You
Add a filter to the tube widget.
Claude
Happy to. Three things before I start:
  1. What should the filter do? Hide arrivals later than 10 minutes, or toggle which lines show?
  2. Where does the control live? A row of chips above the list, or a dropdown in the top right?
  3. Should the choice stick? Remember it across page refreshes, or reset every load?

Three assumptions caught in thirty seconds. Answer, and Claude builds what you meant.

Two ways to turn it on.

01

Ad hoc · say it in the prompt

Good for any one-off task. Tack this onto your opening message:

Before you write any code, ask me 3 to 5 questions that will shape the design.

Zero setup. Claude pauses and asks. When you’re happy, answer all five and it starts.

02

Always on · one line in CLAUDE.md

Good when you want this for every task, every session. Add this rule near the top of your project’s CLAUDE.md:

Before any non-trivial change, ask me 3 to 5 clarifying questions before writing any code.

Now it’s the house rule. Every future session opens with Claude pausing to think, not typing.

Why this is the cheapest change you can make

Every wrong assumption becomes wrong code. Questions expose those assumptions before a single line is typed. One ten-second answer spares you rewriting a whole component. You already know this pattern from architecture: specify before you draw, measure twice, cut once. Same rule.

Hands-on

Open your tfl-widget project’s CLAUDE.md and add the line from Card 02. Save. Restart Claude. Ask for any small tweak, like “add the Bakerloo line to the defaults”. Count how many of your quiet assumptions Claude surfaces before it touches a file.

Chapter 12 · The site safety officer

Hooks run the checks
you’d forget to.

You just built something. You noticed Claude sometimes does the obvious thing wrong: forgets to format, edits the wrong file, bypasses a check. A hook is how you stop that from happening twice.

A hook is a little script that fires at a fixed moment in every tool call, before Claude edits a file, after it runs a test, at session start. It’s always on, even when you forget to ask. Like the site safety officer: enforces process constraints without taking part in the design.

Three hooks worth having from day one.

01

Auto-format

Fires every time Claude writes a file. Runs Prettier (or your equivalent) so the code stays tidy without asking. You never have to say “please format that.”

02

Scope guard

Before Claude edits a file, checks whether it’s in the current phase’s scope. If not, asks first. Catches scope creep before it starts.

03

No-verify blocker

Blocks git commit --no-verify, which is how agents accidentally skip pre-commit checks. One line of defence.

Hooks live in .claude/settings.json at the top of your project. Ship It has a starter pack in templates/. You can also describe one in plain English with the /hookify skill and it writes the config for you.

Hands-on

Ask Claude: “add the auto-format hook from ship-it templates to this project.” Then save any file and watch the formatter fire.

Tests before code

Related habit: write the test from the acceptance criteria before writing the code. Research (METR, 2025) found experienced developers are 19% slower using AI without this loop. With it, Claude catches its own mistakes before you ever see them.

Chapter 13 · Pause and reflect

Before you close this,
write three things.

This is the most important page in the deck. Take two minutes. Type into each box. These words become the shape of what you know.

Three things I can do today that I couldn’t do yesterday.

Your words. Not anyone else’s. What is genuinely new for you?

01
02
03

One thing I’m still unsure about.

Naming the gap is how it gets filled. This is your next question for me, or for Claude.

?

(Your written answers are saved in this browser. Recap card states reset on reload.)

Chapter 14 · Keeping it tidy

A monthly
ten-minute ritual.

A project, like a building, needs maintenance. Every month, sit down for ten minutes and do these five things. Future-you will be so grateful.

01

Prune CLAUDE.md

Ask Claude to read it and suggest what to cut. If anything’s out of date, edit it.

02

Review your skills

Any skill you didn’t use this month? Either delete it or rename it so its purpose is clearer.

03

Rotate your API keys

Go to each provider, rotate the key, update it in Doppler. Five minutes of paranoia well spent.

04

Check the spec still matches

Skim SPECS.md. If the app does something the spec doesn’t mention, update the spec.

05

Tidy the repo

Old branches you’ll never use again? Delete them. A clean repo is a clear head next month.

End of Part 2.

You know the alphabet. You know the basic grammar. You’ve built something twice, felt the difference.

Your one next action
Run /spec-writer on a project you already have but haven’t started. You’ll feel it click.

Coming when you’re ready

Part 3: The Full Workflow

Feature packs. Phase gates. Screen inventory. Asset generation. Parallelism. The real end-of-pack review. Open it when you want to see inside each stage.

Open Part 3  →

Made with care for Janika, who builds actual buildings.