shadcn/ui + Tailwind: Building a Design System That Scales
shadcn/ui's whole pitch is that you own the component code instead of installing a black-box package — which is great, until ten engineers have each made their own small variation of the same button.
The teams that keep a shadcn/ui-based design system coherent as it grows tend to do a few things consistently: a documented token layer instead of ad hoc Tailwind classes, clear rules for when to extend a primitive versus compose a new one, and a lightweight review step for anything that touches the shared component directory.
This post covers how I structure that setup on client projects so the design system stays an asset instead of turning into another thing that needs a rewrite in two years.