After building and managing confidential products at McKinsey & Company for 12 years I will be using this space to share new projects and experiments moving forward.

For starters, a behind-the-scenes look at the process behind this site from design system to deployment.

The short version: a real design system as the foundation, AI tools doing what they do well on execution, and a carbon-based life form reviewing and directing every step.

1 Design System in Figma

Before any prompting or prototyping, I built a foundational design system in Figma:

  • Color palette (including dark mode alternates)
  • Typography system & type scale
  • Grid & column structure
  • A base set of reusable components

This wasn't just a sketch or a moodboard, I structured it to translate directly into code as best I could. I exported it as two files that became the source of truth for everything downstream:

  • globals.css (CSS custom properties for color, spacing, and typography)
  • primitives.tokens.json (the raw design tokens)

Defining the tokens up front meant every AI tool I used later had a shared vocabulary to build against, instead of guessing at hex codes and pixel values from a screenshot.

2 Rapid prototyping in v0

With the design system exported, I moved into v0 and fed it the globals.css and primitives.tokens.json files directly insuring that it inherited the actual design language rather than inventing its own.

From there:

  • Instead of generating a full page in one pass I directed v0 at individual Figma frames and built the interface one component at a time. I've found that smaller units are easier to check against the source design
  • Reviewed each component against its Figma frame before moving to the next one
  • Once the static layout was in place refined interactions and states (hover, focus, transitions) in a second pass

Human-in-the-loop matters here, v0 handled scaffolding and boilerplate, but every decision on whether the output actually matched intent was mine.

3 Handoff to GitHub

Before moving into Cursor the v0 project gets pushed to GitHub.
Why:

  • Cursor picks up a real git history from the start, with proper commits and the ability to branch or revert
  • v0 stays connected to that same repo, so future prototyping sessions sync back to one source of truth instead of forking into disconnected exports
  • Anyone (including future me) picking this up inherits a normal repo, not a zip file

4 Development in Cursor

With the repo open in Cursor, the remaining work shifts from generation to refinement and judgment:

  • Finish content and interaction details v0 couldn't infer from a static frame
  • Audit the AI-generated code: remove dead code, consolidate duplicated logic, tighten up accessibility and semantic HTML
  • Write documentation (README, component notes) so the codebase is legible to a human (especially me), not just to the AI that helped write it
  • Test across breakpoints and browsers, plus a basic accessibility pass (contrast, keyboard navigation, screen reader behavior)

5 Deployment with Vercel

Lastly, the GitHub repo connects to Vercel for continuous integration and deployment:

  • Every push to main triggers a production deploy; every branch or PR gets its own preview URL for review before merging
  • Custom domain pointed at Vercel, with SSL handled automatically
  • Basic analytics enabled to see how the site is actually used post-launch

? Why this workflow

Each AI tool in this pipeline was chosen for the narrow job it's good at: Figma for systematic design thinking, v0 for rapid prototyping with real tokens, Cursor for precision editing and improved code quality. None of it ran unsupervised: every handoff between tools was a checkpoint where I reviewed the output before it moved forward. The result is a process that's fast where AI is fast, and careful where judgment still matters. Carbon and silicon working together in harmony...