How I built this portfolio with Figma and Claude
I designed this site in Figma and built it with Claude Code. I set up the design system and the rules, and made the calls wherever the code and the design disagreed. The AI wrote the code.
Tokens
Every colour, type style and spacing value comes from one file, matched 1:1 to the Figma variables and text styles. Nothing on the site is hardcoded.
Colour
- White
- Grey background
- Divider
- Highlight
- Text emphasis
- Text normal
- Text light
- Error
Type
- Heading 1
- Heading 2
- Heading 3
- Heading 4
- Body
- Body emphasis
- Sub
- Sub emphasis
Spacing
Named by pixel value, so 24px in the Figma inspector is p-24 in code.
Components
Each one built from its Figma component, then every page put together from them. These are the real thing: hover, click, type.
Enter the password to continue.
01
A numbered goal.
20%
A stat.
Process
From Figma file to live site.
- Figma
Design in Figma
Pages, components, colour variables and text styles. The file is the source of truth for everything that follows.
- Figma MCP · Tailwind CSS v4
Extract styles
Through the Figma MCP, Claude reads the variables and text styles straight from the file and writes them into one tokens file. No handoff specs, no hex codes copied by hand. Tailwind v4 keeps that whole design system in a single CSS file I can read myself, and with its defaults deleted, only my tokens exist.
- Claude Code
Build components
One component per Figma component, built against its frame. Claude Code reads a rules file at the start of every session, so it sticks to the tokens every time, not just when I remember to ask. Every state is real: hover, pressed, focus, error.
- Claude Code · Astro
Assemble pages
Pages are put together from those components and nothing else. Astro, because a portfolio is a handful of pages that rarely change: it builds them into plain static files with almost no JavaScript, so they load fast.
- GitHub · Vercel
Deploy to my own domain
Every change pushed to GitHub is built and published by Vercel within a minute, free, at a custom domain with HTTPS. The site is static, so there’s no server to maintain. The password for the NDA pages lives in Vercel’s settings, never in the code.