How are you handling shadcn/ui customization in production apps without it becoming unmaintainable?
I’m using shadcn/ui in a production app and adapting the base components to match our Figma design system. I’m a bit stuck on how people usually handle scaling this setup.
Issues I keep running into:
- some components depend on Button variants/sizes (ghost, sm, icon, etc), so changing/removing them breaks other components (Calendar, DatePicker, etc)
- if I keep everything, I end up with a bunch of unused variants/sizes that don’t actually match our design system
- I need to introduce our own variants, but naming overlaps are already happening (same names, different visual meaning)
- changing base styles via tokens only goes so far and eventually I need real overrides
- once files are customized, updates become unclear (not sure when people actually merge upstream changes vs just stop updating)
- also not sure when it’s better to modify the base shadcn components vs wrapping them
So it feels like I’m choosing between a few imperfect options: keep shadcn mostly as-is, fork it, or build a wrapper layer on top - but none of them feel obviously “correct” for a production app that will actually evolve.
How are people handling this in real, maintained codebases?