Component Libraries as Blueprints, Not Black Boxes

articlecourseuireacttypescriptnextjstailwindcomponent-architecture

shadcn/ui's copy-into-code model maps to joelclaw's preference for editable local primitives over opaque dependencies

Vercel Academy published a course on React UI with shadcn/ui, Radix UI, and Tailwind CSS. The useful bit isn’t just “learn the component library.” It’s the framing: traditional component libraries give you components as black boxes; shadcn/ui gives you blueprints.

That matters because shadcn/ui is not a normal installed dependency. You copy components into your own codebase, then own the code, styling, updates, and weird project-specific changes. It’s a small shift with a big consequence: the library becomes a starting point instead of a cage.

The course also makes the stack relationship explicit: Radix UI primitives provide accessible behavior, Tailwind CSS handles styling, and shadcn/ui packages the pattern into editable React and TypeScript components. That’s a pretty clean model for any system where we want a shared registry, but still want local ownership and the right to hack the thing apart when the defaults get in the way.

Key Ideas