How I build with Claude Code
One session per project, three at most, every change checked on my own laptop first, and a rules file that learns from my corrections. The whole setup, written so you don’t need to code to follow it.
Adam Perlis
October 2026 · about 12 minutes
- 371
- Claude Code sessions on this laptop
- 3
- projects at once, at most
- 10
- skills I’ve built and shared
- 24GB
- of memory: one ordinary laptop
People keep asking how I actually work with Claude Code. Not the prompts, the setup.
How many sessions, which one does what, when to look at the work, what a branch is for. So here it is, with the pictures I end up drawing on calls when I explain it.
First, the part that surprises people: I almost never open the code. I haven’t needed to dig into it to fix something in six to eight months. When something comes out wrong, the cause is usually my prompt. My job is the part Claude can’t do alone: deciding what we’re making, showing it what good looks like, and saying no fast.
I’m the quarterback
Each project gets its own Claude Code session, and I talk to it directly. When a new idea comes up mid-session, Claude offers to spin it off as a side task. Side tasks run alongside the main one, and they even check with each other before touching the same thing. A coloured dot next to each session tells me which one needs me.
I keep three projects going at most. Past that my laptop maxes out, and so does my head. I’m reading what each one is doing and redirecting it when it heads the wrong way, and I can’t do that for four.
A setup I see a lot puts an agent in the middle instead: a “quarterback” that takes your request, writes a brief, and hands it to worker agents, whose results get stitched together before you see anything. It sounds efficient. In practice every hand-off costs time and context, and one thread trying to understand everything at once ends up asking more questions than it answers.
Where an agent in the middle does help
Research, and questions that cut across the whole business. I keep an always-on assistant in ChatGPT for that. I asked it to review a month of my X and LinkedIn posts and tell me what worked, and on its own it caught a mistake in a report I was about to send. Claude’s version of this is in preview. Jobs that repeat on a schedule, like a weekly newsletter, run as scheduled tasks instead.
If you already run a quarterback, test it. Give the same small task to it and to a plain project session, side by side. Compare how long until you see a preview, how long in total, and how thorough each one was. Let the numbers decide.
Plan in Claude Code too
I do my planning inside Claude Code now, not in the regular Claude chat, because the chat can’t see my project folders. One long chat per project works fine. It compacts its own history as it goes and spins off side tasks when the work splits.
See it in seconds, ship it once
When every change rides the full pipeline, a round can take most of an hour, even for “add a little space under the headings”. So I split the work into two loops. A fast one runs on my laptop, for looking and adjusting. A slow one runs once, when a feature is done.
Setting it up
Every project I work on has a preview of itself running on my laptop, called a dev server. I don’t start it myself. I ask:
can you spin up the dev server
- Open it in your own browser. Claude gives you an address like
localhost:3000. I prefer Chrome to the preview built into Claude, and the page updates as Claude edits. - Make it look real. I point my local copy at the real database, so it matches what users see. Not textbook, but it works for me. If that makes you nervous, ask Claude to make realistic sample data instead.
- Batch the small stuff. Send the whole list of wording, image and spacing fixes in one message and watch them land.
- Run the full checks once, when a feature is done and merged. Running them on every tweak is slow, and on GitHub it burns through the free minutes.
Branches and worktrees, without the jargon
Claude creates these for you. Your job is to know where a change belongs, and to be the one who says “merge”.
- Main
- What’s live. Nothing lands here until you say so.
- A branch
- A separate line of work for something big or risky. It can live for days or weeks without touching main.
- A worktree
- A second copy of the project folder with its own branch, so two sessions can work on the same project at once without colliding. It’s short-lived and merges back when you approve. My Source folder has a dozen of these sitting next to it right now.
Which one is it?
A review list usually mixes tiny fixes with real features. Here’s where each kind goes.
- “This wording is wrong.” “Wrong photo.” “More space under the headings.”
- Right in the session you’re in. Check it on your laptop, and send the whole list at once.
- “If someone doesn’t have an invite, show them a different button.”
- A side task. Claude spins up a worktree, it runs alongside, and it merges back when it looks right.
- “Let’s add a whole new feature that could break things.”
- Its own branch. It stays off main until it’s ready for users.
At the end of a session I say some version of this. If a change could break something else that isn’t ready yet, I hold the merge.
This looks good. Merge to main and push to production.
Write the rules down
Every time Claude gets something wrong and I correct it, I ask it to add the fix to the rules. Each project has a short file called CLAUDE.md, plus an AGENTS.md so Codex follows the same rules. A global file covers every project on my laptop. Sessions read all of it before they start, so I stop repeating myself.
Two real ones from my global file
- Never commit secrets. Files holding real keys or passwords are never committed or pasted into a message, in any project, even private ones.
- Check the Mac before an App Store upload. My Mac often runs a beta of macOS, and Apple rejects apps built on one with a misleading error. Now Claude checks before every upload, in every app.
Design that sticks
Out of the box, Claude’s design is bad. With deliberate direction, it nails it. Give it something concrete to study, then turn what it learned into a written system it has to follow.
This is the message that started this site, sent with two motion reels I’d saved from X:
study the style of this i want my website to look and feel just like it. look at the fonts, architecture, hierarchy, layout, animations, movement.
- Feed it videos. On X, tap the share arrow on a post, copy the link, and hand it to the Watch skill. It steps through the video frame by frame and pulls the transcript, so it understands motion as well as layout.
- Feed it live sites. A cloning skill studies a site’s layout and structure, so Claude builds with the same bones. Keep the bones, then make it yours.
- Pick one component kit and say so in
CLAUDE.md. I use Tailwind with shadcn/ui, so Claude reaches for pieces that already exist instead of inventing new ones. - Define colours, type sizes and spacing in one place, then add the rule: use these, never one-off values. When it needs something new, it adds it to the system and tells you.
The skills I lean on
A skill is a saved set of instructions Claude loads for a certain kind of job. Some of mine I built and share for free; the rest come from people I follow. I counted how often each one actually ran, across all 371 Claude Code sessions on my laptop.
Other people’s, that I use all the time
- Watch ↗ give it a video link (X, YouTube, Loom) and it studies the video frame by frame and pulls the transcript. My go-to for motion and UI references
- GSAP ↗ the official skills for GSAP, the animation library behind most of my scroll and motion work
- Ditto ↗ turns a reference site’s layout into code, so Claude builds with the same bones. I keep the structure and throw away the look
- Security Audit ↗ Cloudflare’s free skill: checks a codebase for exposed keys and security holes
- Ralph loop ↗ keeps Claude working on a task until it’s actually done, instead of stopping after the first pass. I pair it with Full Code
- UX Copywriting writes and reviews the words inside a product: buttons, errors, empty states, onboarding
The ones I’ve built
All free on GitHub. Most live in my plugin marketplace, so you add it once and install any of them by name:
claude plugin marketplace add adamperlis/adam-plugins
claude plugin install fullstack-coding@adam-plugins
fullstack-coding for any name in grey below.- Full Code ↗ fullstack-coding My build skill. It plans first, builds, writes tests, and checks the work against the plan. Everything takes about 20% longer and needs far less rework
- SEO / AEO / GEO ↗ seo-aeo-geo Gets a site found on Google and cited by ChatGPT, Perplexity and Gemini. The research behind it refreshes every week
- Frontend Design Director ↗ frontend-design-director Designs, builds and critiques marketing sites, starting from what kind of site it is
- Design Constraints ↗ design-constraints Designs UI from explicit spacing and type rules instead of letting the model guess
- Video Skills ↗ video-skills Eleven skills for product demos, brand films, feature clips and thumbnails. Feature Video is one of them
- Awwwards Motion ↗ awwwards-motion Spring physics, shaders and interactive 3D for award-level sites
- UI Motion ↗ ui-motion Kinetic type heroes, scroll-linked blur sections and a shader field you smear with a finger
- Social Video ↗ social-video Briefs, scripts and shot lists for Reels, TikTok and Shorts
- Webflow to Astro ↗ Moves a Webflow site to Astro and Tailwind on Cloudflare, page for page, so you can cancel the Webflow plan
- Gaia Brand ↗ gaia-brand Our baby app’s whole brand as a skill, and a good model for making a design system stick
The libraries, and where I find good stuff
You don’t need to learn these. Name your stack in CLAUDE.md, so Claude doesn’t reach for a new library every week. This is what shows up across my projects most.
- Apps and sites
- TypeScript, React, Next.js, Vite, and Astro with Sanity for marketing sites
- Look and feel
- Tailwind CSS, shadcn/ui, Lucide icons, GSAP and Lenis, Framer Motion, Three.js
- Data and accounts
- Neon, Supabase, Prisma, Zod, Zustand
- Hosting
- Vercel and Cloudflare
- Mobile and desktop
- Expo for iPhone apps, Tauri for desktop, fastlane for the stores
- Watching it run
- PostHog, Sentry, Vitest, Playwright
Where I find good stuff
Bookmark these. When something catches your eye, paste the link into Claude and ask for something like it. Most of them are built for exactly that.
- ui.shadcn.com ↗ the component kit I build on. Claude knows it inside out, so it stays consistent
- tailwindcss.com ↗ the styling system almost all my projects use
- libraries.dev ↗ ready-made React effects, like a glow that travels around a border, made to paste into Claude Code
- transitions.dev ↗ forty-odd ready UI transitions, and an agent that finds and fixes janky animation
- aicss.dev ↗ components for AI products: thinking states, tool calls, streaming text
From my saves on X
Things I’ve bookmarked or liked lately that are worth a look.
Components to copy
- React Bits ↗ animated React components
- Rewamp UI ↗ free open-source blocks and landing pages
- ObsidianUI ↗ React and Tailwind components and templates
- Origin Kit ↗ a free animated component library
- Scrolltide ↗ 200+ animated components, each with its build prompt
- EvilCharts ↗ animated charts for dashboards
- Astryx ↗ an open-source design system with 170+ components
Effects and motion
- Canvas UI ↗ WebGL effects over live HTML
- Border Beam ↗ a light that travels around a border
- Light Stroke Rail ↗ glowing light effects in a few clicks
- Liquid Glass ↗ Apple’s glass look on the web, still in progress
Handy tools
- ui-skills.com ↗ a directory of design skills for AI agents
- save.design ↗ shows the tech behind an effect you like
- OpenDesk ↗ a free, open-source support inbox and live chat
Inspiration
- Refero ↗ real app and web screens to reference
- Noiced ↗ daily web design inspiration
- posts.design ↗ the best social post designs
Keeping it all running
Let the laptop breathe
My laptop is an M4 MacBook Pro with 24GB of memory, and three heavy sessions is its ceiling. Old dev servers and iPhone simulators pile up and eat memory and disk. When things slow down, I open a fresh session and say something like:
Take a look at all our running servers. Anything super old, kill it. Any old iOS simulators, kill those. Delete any cache data we don’t need.
Two plans, rotated
I pay $100 a month for Claude and $100 for ChatGPT. When I’m around 80% of my Claude limit, I ask each session to wrap up, then paste its notes into Codex in the same project folder and keep going. Same folder, same code, so either one can pick up where the other left off.
Commit everything in this project, then write instructions I can pass over to Codex to pick this back up where we left off.
The App Store, when you get there
Set up an Apple developer account (about $100 a year) and let Claude do the setup. It handles roughly three quarters of it on its own; the rest is tedious clicking. Once it works, add fastlane ↗, which sends builds from your project straight to the App Store and Google Play, so you never click through their sites to submit.
The short version
- Be the quarterback. Talk to each project’s session yourself. Keep agents in the middle for research, not building.
- One project, one session, three at most. Past that, you stop steering and start skimming.
- Look first, ship once. Keep a preview running on your laptop. Only finished work goes through the checks and goes live.
- Main is what’s live. Side tasks get a worktree, big experiments get a branch, and nothing merges until you say so.
- Write the rules down. Every correction goes into
CLAUDE.md, so you never say it twice. - Show it, don’t describe it. A reel or a live site carries more than any adjective. Then make the system a rule.
- Review the result, not the code. Check that it does what you asked. When it doesn’t, look at your prompt first.