Setup guide · last checked October 17, 2026
A system that builds an on-brand website whose pages stay consistent with each other
You write your brand information and permitted examples into a single design file (DESIGN.md). A coding agent builds the pages from that file, one chosen design skill and the components in your project; then you check them at phone width.
Compiled from the official documentation. The basis for each step is listed under it.
What you get
Written design rules (DESIGN.md) and a site that uses them, with at least two pages speaking the same visual language, checked with a screenshot at phone width.
How it runs
You start it. You start every step yourself; there is no part that runs on its own, on a schedule, or sends messages outside.
Where it runs
Windows · macOS · Linux
What the cost depends on
Subscription · No cost · Hosting · Setup service
Who it is for
- People who want consistent pages for their own brand without re-explaining the design on every page
- People who want to spell out their own rules first for a site an agency or freelancer will build
Who it is not for
- People who want to download a competitor's site and make a copy: this guide doesn't cover that
- People who want a ready-made theme or a drag-and-drop page builder
- People expecting this guide to cover publishing the site, domain and hosting: publishing is out of scope
How the system fits together
Brand information and permitted examples → DESIGN.md → import from CLAUDE.md → a single design skill → components that fit the project → build two pages → check in the browser and at 390 pixels wide.


Frontend Design plugin (Anthropic) requiredThe single main design skill: guides aesthetic direction, font and color choices
Alternative: If another design skill is already installed in your project and works well, keep that one as the single main skill; don't require both
shadcn/ui component command optionalAdds ready-made components such as buttons and forms to your project
Alternative: Only if you really need a component your project doesn't have; if the existing components are enough, don't install it at all

Awesome DESIGN.md optionalRead for inspiration from other sites' design language; not copied into your brand
Alternative: Not needed if you already have your own brand guide or logo/color files
Refero Styles optionalLive design research on a paid plan
Alternative: If the reference list you prepared isn't enough and you want to buy a paid plan
Connections between tools
- Brand information and approved examples DESIGN.md · Manual transfer · You write it, or have the agent write it and read it; a markdown file
- DESIGN.md Claude Code · Via a file · Imported in the project's CLAUDE.md file with an @DESIGN.md line
- Frontend Design plugin Claude Code · Via a file · Installed as a plugin; the skill inside it is added to Claude Code
- Claude Code Project files · Via a file · Page and component code is written to the project folder
- Local site Playwright CLI · From the browser · Playwright CLI opens the page, resizes the window and saves a screenshot
Before you start
Computer and software
- Operating system: Windows, macOS, Linux
- Node.js: 20.19 or later, or 22.12 or later
- Claude Code: current version (install it following its own documentation)
- Google Chrome (for the Playwright CLI check): current version installed on your computer
Accounts
- Claude account — To sign in to Claude Code. According to the documentation: a Claude Pro, Max, Team or Enterprise subscription, a Claude Console account, or access through a supported cloud provider
- Refero account (optional) — Only if you want to do live design research from inside Claude Code. Refero MCP requires a paid plan (Pro, Team or Lifetime); the free plan has no MCP access
Step-by-step setup
The steps you check stay only in this browser; they do not confirm that the setup works. You finished 0/9 steps.
- Step 1 · In the terminal
Prepare the project you'll work in
What for: Have a runnable project folder where the pages will be written.
- If you already have a React project, open the terminal in that folder and skip this step's command; don't upgrade anything. The component step (shadcn) assumes a TypeScript project; if your project is JavaScript, skip that step.
- If you're starting fresh, check your Node.js version, then create the React + TypeScript template with the command below. Because --no-immediate is passed, you won't get the 'install dependencies and start' prompt; installing and starting are done by hand in the next item.
- If the terminal is interactive, you may get the 'Which linter to use?' (Oxlint / ESLint) prompt. If you're not sure, leave the first option, Oxlint, and press Enter. If you don't want any prompts, you can also add --no-interactive to the command.
- Go into the project folder, install the packages (npm install) and start the development server with npm run dev. The address the server prints should open in the browser.
Windows · macOS · LinuxFolder: Any folder› node --versionWindows · macOS · LinuxFolder: The parent folder where you want to put the project› npm create vite@9.2.1 marka-sitesi -- --template react-ts --no-immediateVersion pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
Windows · macOS · LinuxFolder: marka-sitesi› npm run devHow you know it worked
- The terminal prints a local address, and that address opens the template page in the browser.
If you get stuck: problems specific to this step
- The command complains about the Node.js version
Vite requires Node.js 20.19 or later, or 22.12 or later; upgrade your version and run the command again. - The project opened but the browser shows a blank page
Make sure the development server is still running in the terminal and that you entered the address the terminal printed into the browser.
- Step 2 · In a code editor
Gather your brand information and permitted examples
What for: Have the raw material for DESIGN.md ready, with what it should and shouldn't look like written down.
!You check this step yourself; the system should not move past it without your approval.
- In a notes file, write the brand name, who it speaks to, its tone in 2-3 adjectives, the logo and color codes, the fonts you use and the purpose of the site. If you have a brand guide, add it too.
- As examples, use only screenshots of your own sites, images you have permission to use, or your own sentences describing the design language you like.
- Optional: read a file from the Awesome DESIGN.md repository for inspiration. The repository's README has no link to terms of use; the terms are at getdesign.md/terms, so read that first. The files are analyses extracted from other companies' sites: don't copy their logos, brand names or images into your product, and don't make a product that could be confused with another brand (the Terms prohibit this).
- Don't download and copy a competitor site's code or images. This guide doesn't cover that route.
How you know it worked
- You have a single notes file with the brand name, tone, colors, fonts, purpose and the list of permitted examples.
If you get stuck: problems specific to this step
- The brand has no written guide
Pick the color and font yourself from your existing logo and site, and write the reason in one sentence; that's what the prose part of DESIGN.md is for.
- Step 3 · In a coding agent
Write and check the DESIGN.md file
What for: Keep your design rules in a single file the agent reads every time.
!You check this step yourself; the system should not move past it without your approval.
- Start Claude Code in the project folder, show it your notes file and ask: create DESIGN.md in the root folder; put the color, font, corner radius and spacing values at the top; below that, include the spec's English headings in this order: Overview, Colors, Typography, Layout, Components, Do's and Don'ts. Keep the headings in English; the descriptions can be in your site's language.
- According to the spec, all sections are optional, but the ones you write must be in this order. The section at the top of the file (front matter) holds the color, font and spacing values in machine-readable form; the prose part explains the reasons for those values.
- Read the file and have the parts that don't fit your brand fixed. Then check its format with the command below. The command treats references to tokens that don't exist (e.g. a link to a color that doesn't exist) as errors; if you define components, it also reports the contrast of their text/background color pairs as warnings. The short example below has no components, so contrast isn't checked.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder)› npx -p @google/design.md@0.4.0 designmd lint DESIGN.mdVersion pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
DESIGN.md (short format example) · markdown--- name: Heritage colors: primary: "#1A1C1E" secondary: "#6C7278" tertiary: "#B8422E" neutral: "#F7F5F2" typography: h1: fontFamily: Public Sans fontSize: 3rem body-md: fontFamily: Public Sans fontSize: 1rem rounded: sm: 4px md: 8px spacing: sm: 8px md: 16px --- ## Overview Architectural Minimalism meets Journalistic Gravitas. ## Colors The palette is rooted in high-contrast neutrals and a single accent color. - **Primary (#1A1C1E):** Deep ink for headlines and core text. - **Tertiary (#B8422E):** the sole driver for interaction.A format example taken from the official repository's short example. Change the colors, name and fonts to fit your brand.
How you know it worked
- DESIGN.md is in the root folder.
- The lint command finishes without reporting an error; warnings may appear, and that's normal.
If you get stuck: problems specific to this step
- The lint command reports an error and exits with code 1
The path and message fields in the output tell you which value is broken; it's usually a link to a color that doesn't exist. Have it fixed and run the command again. - The spec is at version 'alpha', and field names may have changed
Keep the version in the command pinned; read the spec in the repository before moving to a new version. - In Windows PowerShell the lint command prints nothing, or DESIGN.md opens in a Markdown editor
The README says the .md extension in the package's bin name clashes with the Windows file association and recommends the dotless designmd alias. That's why the command is written as npx -p ... designmd lint; don't use the direct npx @google/design.md ... form.
- Step 4 · In a code editor
Introduce DESIGN.md to Claude Code
What for: Have the agent read the design rules automatically in every session.
- If there is no CLAUDE.md file in the project root, create one; according to the documentation, project instructions live in CLAUDE.md or .claude/CLAUDE.md at the root.
- Add the @DESIGN.md line to the file as in the example below. According to the documentation, a file referenced with @ is loaded into context at the start of the session, so keep DESIGN.md short and essential.
- Close and restart Claude Code and ask it: 'which file holds the design rules? Summarize them for me.'
CLAUDE.md · markdown# Project instructions Follow this file for design rules: @DESIGN.md On new pages, don't make up color, font or spacing values outside DESIGN.md.
The @path/file syntax comes from the import section of the documentation; the second sentence is DijiKoçum's recommendation.
How you know it worked
- Claude Code summarizes the design rules from the content of DESIGN.md.
If you get stuck: problems specific to this step
- Claude Code acts as if it doesn't know about DESIGN.md
Make sure the line isn't written inside backticks; an @path inside a code block or backticks isn't imported. Close the session and open it again.
- Step 5 · In a coding agent
Install a single main design skill
What for: Keep the agent from falling into generic, template looks on aesthetic decisions, without loading lots of skills that duplicate each other's work.
- The single skill this guide recommends is Anthropic's Frontend Design plugin. Type the command below inside a Claude Code session; the install screen shows what the plugin adds, so read it and choose the scope (just this project or all your projects).
- If another design skill is already installed in your project and does the job, keep it; don't add a second design skill. Loading skills that do the same job together can mix up their instructions.
- Note: this plugin can't be installed pinned to a version. Its marketplace entry has no version or commit pin, and according to the documentation, plugins in the official marketplace update automatically by default; the plugin's behavior may change over time. That's why you keep your design rules independent of the plugin, in your own DESIGN.md file.
- Once the plugin is installed, type / in the input box and look for the name frontend-design in the list.
Windows · macOS · LinuxFolder: Claude Code session (open in the project folder)› /plugin install frontend-design@claude-plugins-officialHow you know it worked
- The install summary says 'Plugin is now active' or asks for a reload.
- When you type /, the plugin's skill appears in the list.
If you get stuck: problems specific to this step
- After installing, the skill doesn't appear in the list
The last sentence of the install summary tells you whether the plugin is active right away; if needed, run the /reload-plugins command. - The plugin can't find the marketplace
According to the documentation, the official marketplace is added automatically in the first interactive session; if you're installing from the terminal, you may first need the command 'claude plugin marketplace add anthropics/claude-plugins-official'. - The plugin updated and the agent behaves differently
According to the documentation, auto-update is on by default in the official marketplace. Keep your rules in DESIGN.md; if needed, turn the plugin off from the /plugin screen.
- Step 6 · In the terminal
If needed, add ready-made components that fit your project
What for: Instead of having a part your project lacks, like a button or form, written from scratch, add it as a ready-made component.
!You check this step yourself; the system should not move past it without your approval.
- First have the agent list the existing components in the project and check whether the part you need already exists. If it does, skip this step. Also skip it if your project isn't TypeScript: shadcn's Vite documentation assumes the React + TypeScript template.
- The order in the documentation for an existing project: install Tailwind CSS, replace the contents of src/index.css, add the @ path alias to the tsconfig files, update vite.config.ts, then run the shadcn init and add commands. The documentation also lists installing @types/node; in a new project the create-vite template already includes it, so skip that command.
- Important: the template's root tsconfig.json has no compilerOptions section (only files and references); you have to add it yourself. The documentation also includes a baseUrl line, but TypeScript 6.0 deprecated baseUrl and the template installs TypeScript ~6.0.2, so the examples below only have paths.
- Do the commands and file edits below in order; don't delete existing settings in your own files, only add what's missing.
- Alternative: the documentation also gives npx shadcn@latest init -t vite for starting from scratch (it creates a new Vite project); this guide follows the order above as the main path.
- init asks questions; if you don't understand what you're choosing, stop and ask for help.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder)› npm install tailwindcss@4.3.3 @tailwindcss/vite@4.3.3Version pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder)› npx shadcn@4.22.0 initVersion pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder)› npx shadcn@4.22.0 add buttonVersion pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
src/index.css · css@import "tailwindcss";
According to the documentation, the file's entire content is replaced with this line; if you have existing styles, back them up first.
tsconfig.json (root; add the compilerOptions section) · json{ "files": [], "references": [ { "path": "./tsconfig.app.json" }, { "path": "./tsconfig.node.json" } ], "compilerOptions": { "paths": { "@/*": ["./src/*"] } } }The template's root tsconfig.json has no compilerOptions; it only has files and references. The paths field is taken from the shadcn Vite documentation; the baseUrl line was left out because of TypeScript 6.0. If init gives a path alias error, adding "ignoreDeprecations": "6.0" together with baseUrl: "." is the temporary workaround in the TypeScript announcement.
tsconfig.app.json (the part to add inside the existing compilerOptions) · json"paths": { "@/*": ["./src/*"] }The documentation has you add the same field to tsconfig.app.json as well (the documentation's baseUrl line was removed because of TypeScript 6.0). This file already has compilerOptions; keep the existing settings.
vite.config.ts · typescriptimport path from "path" import tailwindcss from "@tailwindcss/vite" import react from "@vitejs/plugin-react" import { defineConfig } from "vite" export default defineConfig({ plugins: [react(), tailwindcss()], resolve: { alias: { "@": path.resolve(__dirname, "./src"), }, }, })This is the example from the documentation; if your template has other plugin settings, keep them.
How you know it worked
- src/index.css contains the Tailwind line, components.json is created, and the added component's file appears in the project.
If you get stuck: problems specific to this step
- init says the path alias (@) or Tailwind can't be found
You may have skipped one of the Tailwind, index.css, tsconfig or vite.config steps above; check them in order and run init again. - My project is JavaScript and has no tsconfig file
The documentation has no instructions for JavaScript or jsconfig. Skip this step; ask the agent to write components to fit the project's existing structure, or get help. - The examples on the Vite page show pnpm dlx
The documentation source and the CLI page also give the npx shadcn@latest form; this guide gives the same command with npx and a pinned version. - tsc or the editor shows a deprecation warning about baseUrl
Remove the baseUrl line and keep only paths; according to the TypeScript announcement, paths works without baseUrl. If you must keep the line, add "ignoreDeprecations": "6.0" next to it.
Based on: shadcn/ui docs: Vite installation, shadcn-ui/ui: source of the Vite installation docs (npx commands and steps), shadcn/ui docs: CLI (init, add, info), npm registry: shadcn (current version 4.22.0), npm registry: tailwindcss and @tailwindcss/vite (4.3.3), TypeScript 6.0 announcement: deprecated baseUrl, vitejs/vite: create-vite@9.2.1 react-ts template (package.json, tsconfig.json)Get help with this step → - Step 7 · In the terminal
Bring the DESIGN.md colors and fonts into the theme
What for: Make components come out with your own brand values instead of shadcn's default theme.
!You check this step yourself; the system should not move past it without your approval.
- Limitation: the shadcn documentation doesn't read DESIGN.md, and it doesn't describe in detail which theme variables init writes into src/index.css. So your brand values don't arrive on their own; you have this step done.
- The README of the DESIGN.md tool describes a css-tailwind export for Tailwind v4. The command below prints the DESIGN.md values to the terminal as an @theme block. If the output isn't what you expect, ask for help.
- Show the output to Claude Code and ask: add this @theme block to src/index.css, link the color and corner radius variables shadcn defines to these values, and don't delete existing settings.
- Then open a button in the browser: check whether it's in the brand's primary color and has the corner radius from DESIGN.md.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder)› npx -p @google/design.md@0.4.0 designmd export --format css-tailwind DESIGN.mdVersion pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
How you know it worked
- The terminal prints an @theme block containing CSS variables like --color-*.
- src/index.css holds these values, and a button appears in the brand's primary color.
If you get stuck: problems specific to this step
- The button is still gray or in the default color
The shadcn variables and the @theme values may be separate; tell the agent to find which variable the button uses and link it to the DESIGN.md value. - In Windows PowerShell the command prints nothing
The README says the direct design.md form may print nothing; that's why the command is written in the -p ... designmd form. Keep the same form.
- Step 8 · In a coding agent
Have two different pages built with the same rules
What for: See on two different pages that consistency really works.
!You check this step yourself; the system should not move past it without your approval.
- Write to Claude Code: following the DESIGN.md rules, create the home page and a service page; use the existing components, don't add colors or fonts outside the rules; make the top menu, buttons and headings look the same on both pages.
- When it's done, ask for the list of changed files and ask whether any color or font was made up outside DESIGN.md.
- Open the pages side by side in the browser: check whether heading sizes, buttons, spacing and colors match on both pages, whether links work and whether form fields are visible.
How you know it worked
- Both pages share the same top menu, button and heading style.
- Menu links move back and forth between the two pages.
If you get stuck: problems specific to this step
- The two pages come out with different colors or buttons
Give the agent a screenshot showing the difference and have it fix the difference according to DESIGN.md; if something is missing from the rules, add it to DESIGN.md first.
- Step 9 · In the terminal
Check in the browser and at 390 pixels wide
What for: Make sure no overflow, broken layout or unreadable text remains at phone width.
!You check this step yourself; the system should not move past it without your approval.
- Prerequisite: Google Chrome must be installed on your computer. With the development server running, install Playwright CLI, open the page in Chrome with the commands below, set the window to 390 pixels wide and take a screenshot. According to the documentation, the tool runs without a window by default (headless); if you want to see the window, add --headed to the open command.
- Run all three playwright-cli commands (open, resize, screenshot) from the same folder, that is, from inside marka-sitesi. Because the README groups sessions by working folder, commands given from different folders may not reach the same session; the README doesn't state this explicitly, so this is a precaution.
- Run the commands one after another: the README says a headless session shuts down on its own when it receives no commands and has to be restarted with the open command.
- Open the saved image and check in the file properties that the width is 390 pixels. If it's different, try the open --mobile or open --device="iPhone 15" options from the README.
- In the image, check whether text runs off the edge, whether buttons are big enough to tap with a finger and whether images go off screen. If there's a problem, give the image to the agent and have it fixed; after each fix, take a new image with the same command.
Windows · macOS · LinuxFolder: Any folder› npm install -g @playwright/cli@0.1.22Version pinned (as of October 17, 2026). Check the vendor documentation before moving to a newer version.
Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder); all three commands in the same folder› playwright-cli open http://localhost:5173 --browser=chromeWindows · macOS · LinuxFolder: marka-sitesi (or your own project folder); all three commands in the same folder› playwright-cli resize 390 844Windows · macOS · LinuxFolder: marka-sitesi (or your own project folder); all three commands in the same folder› playwright-cli screenshot --filename=mobile-home-page.pngHow you know it worked
- A mobile-home-page.png file is created in the folder where you ran the commands, and it is 390 pixels wide.
- In the image, text and buttons stay within the screen width.
If you get stuck: problems specific to this step
- The address in the open command doesn't open
Use the address Vite printed to the terminal; 5173 is an example, and your server may have picked a different port. - The browser doesn't open, or there's a not-found error
The README doesn't cover this error or a browser download step. Make sure Chrome is installed on your computer and use the --browser=chrome option in the open command. - The screenshot command gives an error like session not found
Per the documentation, a headless session closes when it sits idle; run the open command again, then give the resize and screenshot commands one after another. - A horizontal scrollbar appears
Along with the screenshot, ask the agent which element overflows the screen; it's usually a fixed-width image or table.
Is the setup working? Check these
- The DESIGN.md lint command finishes without reporting an error, and CLAUDE.md imports this file with an @DESIGN.md line.
- A shadcn button appears in the primary color from DESIGN.md.
- Heading, button, color and spacing rules look the same on two different pages.
- In the screenshot taken at 390 pixels wide, text and buttons don't run off the edge and no horizontal scrollbar appears.
What you pay for
The items are separate, not a total; which ones you need depends on the path you set up. Prices change, so check the source of each item.
- SubscriptionClaude Code access
According to the documentation, it requires a Claude Pro, Max, Team or Enterprise subscription, a Claude Console account or a cloud provider. See Anthropic's pricing page for current plan terms and prices. source
- SubscriptionRefero MCP (optional)
The free plan has no MCP access; MCP requires a paid plan. Current prices are on Refero's pricing page. source
- No costDESIGN.md lint tool, shadcn command, Playwright CLI, Vite
These are openly licensed software (the DESIGN.md repository is Apache-2.0, the Awesome DESIGN.md repository MIT, shadcn and Vite MIT, Playwright CLI Apache-2.0); they need no separate subscription to install. source
- HostingSite publishing and hosting
This guide doesn't cover publishing the site; hosting and a domain for publishing are a separate cost item. source
- Setup serviceSetup support
If you like, we can handle the brand/design system prep, component implementation and site development for you; scope is agreed on a call. source
Sources
- google-labs-code/design.md: repository and README (format, lint command, license) · Source code · read October 17, 2026
- DESIGN.md spec (docs/spec.md, version: alpha) · Source code · read October 17, 2026
- npm registry: @google/design.md (current version 0.4.0) · Vendor page · read October 17, 2026
- getdesign.md Terms (use of the DESIGN.md files in the directory) · Official documentation · read October 17, 2026
- VoltAgent/awesome-design-md: README and license note · Source code · read October 17, 2026
- Claude Code docs: CLAUDE.md and importing files with @ · Official documentation · read October 17, 2026
- Claude Code docs: installing plugins · Official documentation · read October 17, 2026
- Claude Code docs: quickstart and account types · Official documentation · read October 17, 2026
- anthropics/claude-plugins-official: marketplace.json (frontend-design entry) · Source code · read October 17, 2026
- anthropics/claude-code: frontend-design plugin README · Source code · read October 17, 2026
- shadcn/ui docs: Vite installation · Official documentation · read October 17, 2026
- shadcn/ui docs: CLI (init, add, info) · Official documentation · read October 17, 2026
- npm registry: shadcn (current version 4.22.0) · Vendor page · read October 17, 2026
- Vite docs: getting started and Node.js requirement · Official documentation · read October 17, 2026
- npm registry: create-vite (current version 9.2.1) · Vendor page · read October 17, 2026
- microsoft/playwright-cli: README (open, resize, screenshot) · Source code · read October 17, 2026
- npm registry: @playwright/cli (current version 0.1.22) · Vendor page · read October 17, 2026
- Refero docs: plans · Help center · read October 17, 2026
- Refero docs: MCP getting started · Official documentation · read October 17, 2026
- Refero Terms of Use: use of Refero content · Official documentation · read October 17, 2026
- vitejs/vite: create-vite source code (options: --template, --immediate, --interactive) · Source code · read October 17, 2026
- shadcn-ui/ui: source of the Vite installation docs (npx commands and steps) · Source code · read October 17, 2026
- npm registry: tailwindcss and @tailwindcss/vite (4.3.3) · Vendor page · read October 17, 2026
- Refero docs: MCP tools (Styles) · Official documentation · read October 17, 2026
- TypeScript 6.0 announcement: deprecated baseUrl · Official documentation · read October 17, 2026
- vitejs/vite: create-vite@9.2.1 react-ts template (package.json, tsconfig.json) · Source code · read October 17, 2026
You can set it up yourself; we can do the step you get stuck on together
Check the steps you want. The request form receives the system name and your selected steps as a visible summary that you can edit. There is no need to share any password or API key.
If you are looking for another route
The guide is free and needs no sign-up; you can follow the steps here yourself. If you’d like professional support at some point, choose the option that fits your needs. This doesn’t affect the rankings in the guide.