AI Workflows for
Digital Product Design
A playbook for the design-leaning founder, solo product designer, or a small design team scaling to 4–5 designers who needs to ship production-quality screens fast and build a foundation that scales when the team grows.
Why this approach
The short version of why this workflow exists and what it's better at than the traditional Figma-based process.
What you get
What this workflow is, who it's for, and what it costs.
Tools overview
Four tools. Three daily drivers. One fills a specific gap.
The full progression
Three temporal modes not a single linear sequence. Setup happens once. Designing & building is a repeating loop. Maintenance runs in the background every week.
Skills & instruction files
Give your agent persistent, reusable context so you stop re-explaining the same things every session. These files are the foundation everything else builds on, and they're plain markdown, so they work with any harness. One reading note: this playbook says "CLAUDE.md" throughout because Claude Code is the daily driver. Read it as shorthand for your instruction file; the same content lives in AGENTS.md for Codex, Hermes, and everything else (see Keep it portable).
Skills: modular context files your agent reads on demand
/skills folder in your project root. One .md file per domain: brand.md, a11y.md, copy.md, performance.md, decisions.md, components.md. These are your reference skills: the rules, the exceptions, and what good output looks like, with concrete examples. Plain markdown, readable by any agent, versioned in git..claude/skills/[name]/SKILL.md whose frontmatter description tells the agent when the skill applies, so it loads automatically whenever the task is relevant. Other harnesses have equivalents (Codex and Cursor read the same skill format or rules files), and the universal fallback works everywhere: "Read /skills/brand.md before we begin."/new-screen or a weekly audit, packaged the same way. Build them after your reference skills stabilize; see the custom slash commands & skills appendix./skills/*.md and the auto-invocation wrapper in .claude/skills/. The knowledge files are vendor-neutral: they work pasted into any model, referenced from Cursor rules, or read by another agent CLI. The wrapper is the only Claude-specific part, and it's three lines.Complete instruction file example
Keep it portable
This playbook runs on Claude Code, but nothing in it should depend on Claude Code. Models leapfrog each other, tools get sunset, and pricing changes. The workflow survives all of that if you build it on the four layers that are now vendor-neutral standards. And portability is not just insurance; it's the operating model. Done right, a designer works from whichever harness fits the problem in front of them and picks the work back up in another without losing the thread, because the thread was never in the tool.
AGENTS.md the shared instruction file
AGENTS.md; the stack rules, folder structure, absolute rules, and skill file map are tool-agnostic anyway.MCP the vendor-neutral tool layer
.mcp.json) so the whole team, and every agent, gets the same connections.Vendor-neutral artifacts everything important is a file in git
The payoff: work from any harness, resume in any harness
Prompt like a Designer
Claude Code responds well to designer language visual, spatial, felt. You don't need to translate your instincts into technical instructions. Describe what you see and what you want, the way you'd talk to another designer. One framing before the techniques: the industry now calls this discipline context engineering rather than prompt engineering, because what the agent has loaded (your tokens, skill files, real components) shapes the output more than how you phrase any single request. The skills and CLAUDE.md setup from the previous sections is the heavy lifting; the language below is how you steer once the context is right.
Structure how to frame a prompt
Designer language contrast & visual weight
Designer language space & density
Designer language type & emphasis
Designer language feel & tone
Designer language layout & composition
Interaction design language
Tips & tricks
Prompting techniques, workflow shortcuts, and ways to get more out of Claude Code that aren't obvious from the main process.
Generate multiple options before committing
Scheduled design critiques from Claude
Second opinions from a different model
Reframe before you refine
Ask Claude to pressure-test your own decisions
Use Claude to explain your work to non-designers
Teach Claude your taste over time
/memory) is what Claude happened to note; CLAUDE.md is what you decided matters.Spot-check with real device previews
Upload screenshots to show Claude exactly what you mean
Build your HTML/CSS literacy to improve your prompting
var(--color-action-primary) references a value defined in tokens.css lets you catch when Claude hardcodes a hex instead of using a variable and correct it immediately.Responsive web presentations from your design system
Use the harness: plan mode, checkpoints, hooks
Design the loop, not just the prompt
When things go wrong
The most common failure modes in this workflow what causes them, what the symptoms look like, and how to recover. Each failure has a pattern: read it once so you recognize it fast when it happens.
Wrong style from the start
Design system drift
Stuck in an iteration loop
Visual problems need screenshots, not descriptions
Prepare your brand input
Claude Code needs everything in text or pasteable form. Convert assets before you open the terminal.
What to gather before opening Claude Code
Complete brand.md example
Scaffold the design system
One prompt to go from brand file to a working, themed shadcn scaffold.
The initial Claude Code prompt
tailwind.config.ts is legacy. This is good news for this workflow: the entire theme now lives in the same tokens.css + globals.css pair that is already your source of truth. One less file for values to drift into.What to review after generation
--color-primary should map to your brand color, not shadcn's default. This mapping is where "generic shadcn" sneaks in./design-system in browser. Does it feel like your brand, or generic shadcn?.dark block shadcn's default mappings need manual verification against your brand's dark colorway./design-system is your Figma replacement for system-level review. Share the Vercel preview URL stakeholders see the real thing, not a mockup of it.The system you're building is agent context
Export design tokens for dev
Generate design-tokens.json before building any screens. This gives engineering the token contract early so both sides work from the same source of truth from day one.
Generate the token file
Token structure primitive → semantic → component
button-bg-primary) are optional but valuable for native platforms. The three-layer structure is what makes the JSON useful to engineering not just a color dump.Keep tokens in sync as the system evolves
design-tokens.json as a build artifact regenerate it whenever tokens.css changes, not manually.Accessibility audit
Accessibility is built in from the token level up not checked at the end. Run a proactive audit immediately after scaffolding, then again after every major build phase. The modern pattern is two layers: deterministic scanners (axe-core, Lighthouse) catch the mechanical violations in CI, and the agent sits on top doing what scanners can't: judging whether alt text is actually descriptive, whether focus order is logical, whether a screen is technically compliant but practically unusable. The prompts below are that judgment layer.
Token-level audit before any screens are built
Component-level audit after scaffold, before flows
The a11y skill file
Ongoing screen-level audit on the weekly branch
Publish your design system site
A living public site generated from your codebase, auto-updated on every merge. Engineering has a single URL to bookmark. The changelog writes itself. The system is never more than a week out of date.
Generate the minisite route
Auto-generate the changelog
Weekly merge discipline keeps the site current
design-tokens.json and notify engineering that a new token version is available for the next sprint.Share it and replace Figma as the reference
Build major flows
Start with one flow end-to-end. Build it completely before moving to the next. Let inconsistencies surface naturally you'll extract them into patterns later.
Build one flow completely before starting the next
Tweak in conversation, not in code
Build the next flow, then compare
Definition of done for a flow
Canvas & prototype views
Do this after your first flow is complete, not before. The canvas is how you spot structural problems: missing states, awkward transitions, flows that seem fine screen-by-screen but break down when seen as a sequence. It's a review step, not a build step: build first, then zoom out here before starting the next flow.
flows.config.ts the register both tools read from
flows.config.ts. Adding a new screen = one line in the config. Both views update automatically.Build the canvas view at /canvas
Build the prototype view at /prototype/[flow]
git tag v0.3-user-test. You can always share the exact version a stakeholder or tester saw, even after screens have changed.Localization
Treat copy the same way you treat color as a token, not hardcoded text. Structure it from the start and localization becomes a content swap, not a rebuild.
Content tokens the same pattern as design tokens
/locales/en.json, /locales/es.json, /locales/fr.json structured the same way design tokens live in tokens.css. Keys are semantic, not descriptive: onboarding.cta.primary, not get-started-button-text.Language switcher in the canvas and prototype views
/canvas with a locale selector in the toolbar. Switching locale re-renders all screens with the selected language you see layout impact immediately: German strings that break a button, Arabic RTL that reflows a card.Voice and tone per market
/skills/copy-[locale].md alongside your existing copy.md: "For es-MX: warm and conversational, avoid formal usted constructions in UI copy, contractions are fine, error messages should feel reassuring not clinical."Localize continuously, not as a phase
Extract & enforce patterns
Do this after your second major flow, not your first. Patterns only become visible through repetition; extracting from a single flow produces components that are too specific to generalize. Wait until you have enough surface area to see what actually repeats, then consolidate once rather than incrementally.
Ask Claude to find inconsistencies across all flows
Consolidate into named canonical components
StatusCard, TransactionRow, StepIndicator not BigCard or ListItemDark.Ask the system to enforce canonical components everywhere
Decision log & changelog
Set this up before your second flow, not after you've shipped. Decisions made in the first flow are still fresh; once you're in the third or fourth flow, the context for why you built the system a particular way is already gone. The log is worthless if it's written retrospectively.
The decisions skill file
Logging decisions as you work
Generating the changelog
Version history in the canvas view
Querying the decision history
Content & copy
Copy is a design material: it lives in the system alongside tokens and components, not in a separate doc. Without a copy skill, Claude generates placeholder language that never gets replaced and ships. Setting this up means copy gets reviewed on every screen, not at the end of the project.
The copy skill file
Generating copy for screens
Copy audit consistency sweep across flows
Copy as a design system export
Build app-specific skills
You don't have to write skills from scratch Claude can derive them from the codebase you've already built together. Write them after patterns stabilize, not before.
The skill files to build first
Ask Claude to generate skill files from what you've built
Performance budget
AI-generated component code can be bloated unused dependencies, heavy bundles, unoptimized assets. A performance audit runs before every weekly merge so issues are caught before they compound across the codebase.
The performance budget skill file
Weekly performance audit prompt
Catching bloat as it's generated
Handoff & dev collaboration
Your Claude Code output is the handoff. Engineers get a branch with working code, not a Figma link.
Handoff via code, not specs
DB & backend integration
Day-to-day dev collaboration
Designing on real code
Instead of handing off to engineering and waiting, you design directly on top of the production codebase read-only access to the real repo, Claude Code doing the work, engineering reviewing and approving before anything merges. Design intent becomes production-ready code without a translation layer.
Read-only access to the engineering repo
Designing against real data shapes
The design PR how you submit work for engineering review
Engineering review gates what requires approval before merge
Using Claude to pre-check before submitting for review
Keeping in sync as engineering changes the codebase
git log reads, one Claude summary, one picture of what changed on both sides.Deploy & environments
Designer-owned: local and preview. Engineering-owned: staging and production.
The environment ladder
git tag v0.3-user-test always recoverable to exactly what a user saw..env.example documenting which variables point to which environment keeps staging and prod clearly separated.Git sync & design rhythm
A weekly and daily cadence for keeping your design system in sync with the team pulling in changes, reviewing impact, refactoring patterns, and escalating decisions that need a human call.
Weekly sync pull, review, merge
Daily branches isolated work, clean history
design/YYYY-MM-DD-task-name. Makes it easy to find, sort, and understand the history at a glance.Weekly design branch new styles, patterns & components
design-system/week-of-2024-01-15. Keep feature work and system work on separate branches.Claude reviews incoming changes by scope
Refactoring screens for updated patterns
refactor: update all screens to [ComponentName] v2.Escalation when Claude flags a decision for you
Weekly merge closing out the system branch
design-tokens.json and notify engineering that a new token version is available.git tag design-system/v[week] gives engineering a stable reference point for each week's token set.
Appendix
Extended techniques, tooling, and team workflow →
▼
Meta improvements Untested
Every time you set something up from scratch skill files, CLAUDE.md rules, token structure you're building what could be a template. Don't wait until you're experienced to start systemizing. Capture these improvements while building your first project or two and every project after starts ahead.
A starter template pre-wired for this workflow
setup.md at the root: "Step 1 fill in /skills/brand.md. Step 2 run this Claude Code prompt." One page, no ambiguity.shadcn as the permanent base never start from scratch
A standalone canvas & prototype app
design-viewer that can be pointed at any project's flows.config.ts and renders the canvas and prototype views without any per-project setup.A shared skill library across projects
shared-skills repo with the universal skills: a11y.md, performance.md, decisions.md, shadcn.md. These rarely change and should be identical across projects.A cross-project pattern library
shared-components repo stripped of brand tokens, themed purely through CSS variables so any project's token file skins them automatically.When you're ready to grow
The solo workflow is worth proving before you scale it. The right moment to bring in a second designer is when the system is doing the work, when CLAUDE.md and the skill files are stable enough to hand to someone else without explaining everything verbally.
Signs the workflow is ready to scale
What to look for in a second designer
Team & governance
At 2 designers, governance is a conversation. At 5, it needs structure. These rules define ownership by team size, branch authority, and how conflicting decisions get resolved. Add them gradually as the team grows.
Ownership at each team size
Keeping the system consistent as the team grows
Roles what each person owns
Branch rules for teams
Resolving conflicting design decisions
Onboarding a new designer
Beyond prototypes Untested
Once your first major flow is built, these three services let you design against something that feels like a real app (persistent data, real emails, live rate limiting) before engineering has built anything. Add them when you need to validate decisions that mock data can't answer. Claude Code scaffolds every integration from a single prompt.
Unexplored design tools Untested
Tools I haven't used extensively enough to be prescriptive about. They're worth knowing exist and experimenting with, but I can't speak to them with the same confidence as the rest of this playbook.
AI imagery & video
AI custom SVGs
Custom illustrations
Motion & animation
prefers-reduced-motion from the a11y skill.Texture & custom graphics
Custom slash commands & capability skills Untested
The playbook is full of prompts that work. Two native mechanisms make them permanent: slash commands (you invoke them: one keystroke instead of a 10-line prompt) and capability skills (Claude invokes them: auto-loaded when the task matches). Same markdown, different trigger. Start with commands; promote a command to a skill when you notice you always want it to run without asking.
How to create a command
.claude/commands/. The filename becomes the slash command..claude/commands/ directory in your project. Each .md file in that directory becomes a slash command new-screen.md becomes /new-screen.$ARGUMENTS a placeholder for anything typed after the command. /new-screen onboarding passes "onboarding" as the argument..claude/commands/ directory to git commands are project-level, shared with anyone who works on the repo.Commands to build for this workflow
.claude/skills/[name]/SKILL.md so it fires without you remembering to type it.Multi-agent parallelism Untested
Claude Code can spawn sub-agents that run concurrently. Instead of doing things one at a time in a single session, you coordinate a team each agent handles one job while the others run in parallel. What used to be a prompt trick is now first-party infrastructure: defined subagents, agent teams, and git worktrees for isolation.
How sub-agents work
Agent tool. Each sub-agent gets its own context, runs its own task, and returns a result. The main session synthesises the results and decides what to do next..claude/agents/: a markdown file per agent (an auditor that reads a11y.md and brand.md, a copy reviewer that reads copy.md) with its own system prompt and tool permissions. Committed to git, shared with the team, invoked by name.CLAUDE_CODE_EXPERIMENTAL_AGENT_TEAMS=1, so treat it as something to try deliberately rather than a default. You compose a critique from that: one teammate briefed on brand, one on a11y, one on conversion, each reviewing the same flow and pushing back on the others. That is the multi-agent version of the weekly design critique. Each teammate is a separate session, so a team costs several times the tokens of a single one; reserve it for decisions worth that spend.Design workflow patterns for parallel agents
components.md. Documentation is never a backlog item.Designing agentic products
Everything else in this playbook is about designing with agents. This section is about the other thing the phrase "AI design" gets used for: designing products that contain agents. The two get conflated constantly; they're different competencies, and clients will increasingly ask for the second one. A short field guide so you can tell them apart and know where to start.
Generative UI interfaces assembled at runtime
Agentic UX patterns the new interaction vocabulary
Metrics-driven flow refinement Untested
The AutoResearch pattern propose a change, measure it, keep only improvements applied to product flows. The design system defines what's proposable. The metrics define what's better. Claude runs the loop.
The design system as a constrained search space
What the loop looks like in practice
program.md that tells the agent what to optimize and what it cannot touch. "Optimize the onboarding flow for step-3 completion rate. You may vary: CTA copy, button variant (primary/secondary), field ordering in the form. You may not change: the number of steps, brand colors, typography, or component structure."Maintaining design fidelity at scale
program.md is the design review it defines the entire search space the agent will explore. A well-written program file means every variant that emerges is something you'd have approved anyway.What you need before this is viable
Write the eval: taste as a testable rubric
/skills/evals.md and make it a standing gate: before any screen is presented to you, an agent scores it against the rubric and cites every failure. You review work that already passed your own written bar.Data & analytics Untested
Connect your behavioral and revenue analytics to the canvas and prototype views. See real user data in the context of what you designed then ask Claude what to change and why.
Analytics in design context
Wiring behavioral analytics to the canvas
analytics.config.ts. Each screen has a corresponding funnel step name in the analytics platform. This mapping is what lets the canvas fetch the right metric for each screen./api/metrics?screen=onboarding-step-3 and gets back the completion rate, time-on-screen, and exit rate for that screen.Revenue context from Stripe
Querying Claude with live data
Gstack live QA in the terminal Untested
A suite of Claude Code skills built by Garry Tan, CEO of Y Combinator: twenty-plus specialist roles (QA lead, design reviewer, security officer) of which the headless browser, /browse, is the one this section covers. Point it at your running app and Claude can navigate, interact, screenshot, and diff without leaving the terminal. github.com/garrytan/gstack
What Gstack does
git clone --depth 1 https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup, then invoke skills like /browse directly in Claude Code. Note: gstack's /browse and the Playwright MCP server solve the same problem (agent eyes on the running app); pick one, not both.How to use it in a design workflow
Full skills reference
| Skill | Your specialist | What they do |
|---|---|---|
| /office-hours Essential | YC Office Hours | Start here. Six forcing questions that reframe your product before you write code. Pushes back on your framing, challenges premises, generates implementation alternatives. |
| /plan-ceo-review Essential | CEO / Founder | Rethink the problem. Find the 10-star product hiding inside the request. Four modes: Expansion, Selective Expansion, Hold Scope, Reduction. |
| /plan-eng-review Essential | Eng Manager | Lock in architecture, data flow, diagrams, edge cases, and tests. Forces hidden assumptions into the open. |
| /plan-design-review Essential | Senior Designer | Rates each design dimension 0–10, explains what a 10 looks like, then edits the plan to get there. AI Slop detection. Interactive. |
| /plan-devex-review | DX Lead | Interactive DX review: explores developer personas, benchmarks against competitors' TTHW, designs your magical moment, traces friction points step by step. |
| /design-consultation | Design Partner | Build a complete design system from scratch. Researches the landscape, proposes creative risks, generates realistic product mockups. |
| /review | Staff Engineer | Find the bugs that pass CI but blow up in production. Auto-fixes the obvious ones. Flags completeness gaps. |
| /investigate | Debugger | Systematic root-cause debugging. Iron Law: no fixes without investigation. Traces data flow, tests hypotheses, stops after 3 failed fixes. |
| /design-review | Designer Who Codes | Same audit as /plan-design-review, then fixes what it finds. Atomic commits, before/after screenshots. |
| /devex-review | DX Tester | Live developer experience audit. Actually tests your onboarding: navigates docs, tries the getting started flow, times TTHW, screenshots errors. |
| /design-shotgun | Design Explorer | Generates 4–6 AI mockup variants, opens a comparison board in your browser, collects your feedback, and iterates. Taste memory learns what you like. |
| /design-html | Design Engineer | Turn a mockup into production HTML that actually works. Pretext computed layout: text reflows, heights adjust, layouts are dynamic. 30KB, zero deps. |
| /qa Essential | QA Lead | Test your app, find bugs, fix them with atomic commits, re-verify. Auto-generates regression tests for every fix. |
| /qa-only | QA Reporter | Same methodology as /qa but report only. Pure bug report without code changes. |
| /pair-agent | Multi-Agent Coordinator | Share your browser with any AI agent. Works with OpenClaw, Hermes, Codex, Cursor, or anything that can curl. Each agent gets its own tab. |
| /cso | Chief Security Officer | OWASP Top 10 + STRIDE threat model. Zero-noise: 17 false positive exclusions, 8/10+ confidence gate, independent finding verification. |
| /ship | Release Engineer | Sync main, run tests, audit coverage, push, open PR. Bootstraps test frameworks if you don't have one. |
| /land-and-deploy | Release Engineer | Merge the PR, wait for CI and deploy, verify production health. One command from "approved" to "verified in production." |
| /canary | SRE | Post-deploy monitoring loop. Watches for console errors, performance regressions, and page failures. |
| /benchmark | Performance Engineer | Baseline page load times, Core Web Vitals, and resource sizes. Compare before/after on every PR. |
| /document-release | Technical Writer | Update all project docs to match what you just shipped. Catches stale READMEs automatically. |
| /retro | Eng Manager | Team-aware weekly retro. Per-person breakdowns, shipping streaks, test health trends. /retro global runs across all your projects and AI tools. |
| /browse | QA Engineer | Real Chromium browser, real clicks, real screenshots. ~100ms per command. /open-gstack-browser launches GStack Browser with sidebar and anti-bot stealth. |
| /setup-browser-cookies | Session Manager | Import cookies from your real browser (Chrome, Arc, Brave, Edge) into the headless session. Test authenticated pages. |
| /autoplan | Review Pipeline | One command, fully reviewed plan. Runs CEO → design → eng review automatically. Surfaces only taste decisions for your approval. |
| /learn | Memory | Manage what gstack learned across sessions. Review, search, prune, and export project-specific patterns, pitfalls, and preferences. Learnings compound over time. |