• About
  • Projects
  • CV
  • Email
  • LinkedIn
  • GitHub

Component Lab: a visual workspace for shadcn

Component Lab: a visual workspace for shadcn

Solo build, with AI shipping the code and me keeping it on track

Who
Personal projectMar 2026 – Apr 2026 (2mo)
Scope
ConceptDesignFull-stack engineeringAI workflow
Tools
ShadcnShadcnTailwind CSSTailwind CSSClaude AIClaude AINotionNotionLinearLinearNetlifyNetlifyNextjsNextjs
Links
View project
GitHub Repo
Context

Component Lab is the tool I wished existed for shadcn

Most of my work lives in shadcn now, so building anything custom meant starting from a blank file every time. That was the part I most wanted to fix. Think Figma meets Webflow, built specifically for shadcn, and built for me first.

Component Lab: a visual workspace for shadcn
Two paths from the dashboard, both ending with export-ready TypeScript
Working with AI

I treated the AI's environment as part of the design problem

Locked stack, CLAUDE.md for persistent context, shadcn MCP for direct registry access. Linear held tickets with acceptance criteria upfront, I documented decisions as work progressed, and captured lessons back into the AI's persistent memory.

Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
The Notion master plan
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
The Linear project, with tickets, milestones, and a full history of every decision
CLAUDE.md
CLAUDE.md: the AI's briefing document for every session.

Decisions documented before coding meant no time lost re-litigating mid-build. Design principles like Hick, Gestalt, and Fitts shaped how the editor surfaced complexity at the structural level.

All the setup doesn't stop AI from drifting, so catching the drift is the job too.

Component Lab: a visual workspace for shadcn
Drawing the correction by hand, the way steering AI actually looks
The half-day task that became a milestone

A half-day ticket revealed the foundation needed rebuilding first

A small backlog ticket: copy a component as a starting point for a new one. Half a day, in theory. Scoping it revealed the tool needed to read any component's source and reproduce it exactly, which meant the registry files needed to be current, which meant upgrading React, Tailwind, and the entire shadcn registry first.

Half a day had become a foundation reset.

Component Lab: a visual workspace for shadcn
A half-day ticket revealed a foundation reset, with each step depending on the one to its right

The right call was to follow it. I scoped a proper milestone for the upgrade, pushed the original task to a follow-up, and several other backlog items unstuck themselves once the foundation was right.

The official Tailwind migration tool handled config correctly, but then made over 30 incorrect changes across 60 source files. Use these tools for config only.

The parser came after, with a strict quality bar: read any component file, reproduce it byte-for-byte on export. An automated test enforced it on every change, and if a pattern wasn't recognised, the parser preserved it exactly and moved on, because reformatting would create silent problems downstream.

Component Lab: a visual workspace for shadcn
46/46 passing the round-trip fidelity test
The false victory

Done means the new approach is everywhere and the old is gone

After shipping a new parser and unified export flow, I called the next milestone done and opened the app for the first time in hours. Parts of the interface were reading from the new parser, while others were still reading from a frozen snapshot of the old data. One panel showed eight size options for a component, the toolbar showed four, and two different products were visible at the same time.

Honestly, I'd built the interesting parts and quietly skipped the tedious one, which was getting the from-scratch builder onto the new structure. The milestone was called "Unified Editor." I had built a new engine, but I hadn't unified anything.

The proper fix shipped the next morning, with a mechanical done criterion: a specific git grep had to return zero matches. When the criterion is mechanical, there's nothing to argue about.

Outcome

Four milestones shipped, with all components passing round-trip fidelity

A working tool with three modes: browse, edit, and build from scratch. Exports follow shadcn conventions exactly. A fifth milestone covering polish, onboarding, and accounts is ongoing.

Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Component Lab: a visual workspace for shadcn
Built with the same components it inspects
stat-card.tsx
A component built in Component Lab and exported, following shadcn conventions exactly
Share on LinkedIn

Other projects

Building a design system where the code leads and Figma follows

Design Engineering · Design Systems

Building a design system where the code leads and Figma follows

Building a practice tool that targets your weakness, not your strength

Product Design · AI Integration · Frontend Engineering

Building a practice tool that targets your weakness, not your strength

Building a product from scratch at an early-stage startup

Product Design · Design Systems · Design Engineering

Building a product from scratch at an early-stage startup

Designing my portfolio like a product

Design Engineering · Frontend Engineering

Designing my portfolio like a product

Reducing churn for a global subscription service

UX Research · Product Design · Strategy

Reducing churn for a global subscription service

Designing and animating my personal brand mark

Brand Design · Motion Design

Designing and animating my personal brand mark

A better comparison slider for mobile

Design Engineering · Frontend Engineering

A better comparison slider for mobile

Designing a smarter GenAI workflow for AI developers

Product Design · UX Research · AI Integration

Designing a smarter GenAI workflow for AI developers

Building a scalable design system for a global risk platform

Design Systems · Product Design

Building a scalable design system for a global risk platform

Optimising the digital shopping experience for a home improvement retailer

UX Research · Product Design

Optimising the digital shopping experience for a home improvement retailer

Validating demand for a low-cost learning device in India

UX Research · Strategy

Validating demand for a low-cost learning device in India

Cutting through the noise with short-form sales content

Content Strategy

Cutting through the noise with short-form sales content

Understanding a diverse diaspora audience

UX Research · Strategy

Understanding a diverse diaspora audience

Building a brand and site a solo founder can run himself

Brand Design · Design Engineering

Building a brand and site a solo founder can run himself

Building a design system where the code leads and Figma follows

Design Engineering · Design Systems

Building a design system where the code leads and Figma follows

Building a practice tool that targets your weakness, not your strength

Product Design · AI Integration · Frontend Engineering

Building a practice tool that targets your weakness, not your strength

Building a product from scratch at an early-stage startup

Product Design · Design Systems · Design Engineering

Building a product from scratch at an early-stage startup

Designing my portfolio like a product

Design Engineering · Frontend Engineering

Designing my portfolio like a product

Reducing churn for a global subscription service

UX Research · Product Design · Strategy

Reducing churn for a global subscription service

Designing and animating my personal brand mark

Brand Design · Motion Design

Designing and animating my personal brand mark

A better comparison slider for mobile

Design Engineering · Frontend Engineering

A better comparison slider for mobile

Designing a smarter GenAI workflow for AI developers

Product Design · UX Research · AI Integration

Designing a smarter GenAI workflow for AI developers

Building a scalable design system for a global risk platform

Design Systems · Product Design

Building a scalable design system for a global risk platform

Optimising the digital shopping experience for a home improvement retailer

UX Research · Product Design

Optimising the digital shopping experience for a home improvement retailer

Validating demand for a low-cost learning device in India

UX Research · Strategy

Validating demand for a low-cost learning device in India

Cutting through the noise with short-form sales content

Content Strategy

Cutting through the noise with short-form sales content

Understanding a diverse diaspora audience

UX Research · Strategy

Understanding a diverse diaspora audience

Building a brand and site a solo founder can run himself

Brand Design · Design Engineering

Building a brand and site a solo founder can run himself