Wellzesta
Migrating the UI to Tailwind v4 with a fresh component library built the shadcn-style way — Tailwind + CVA + tailwind-merge + clsx. One source of truth for tokens, shared between Figma and code.
Three layers mirror how Figma variables are organized. Designers and code share the same names.
Primitives
--teal-700: #0f766eRaw scale values defined in @theme
Semantic
--color-primary: var(--teal-700)Named roles from Figma general/* variables
Component
bg-primary ring-ringCVA reads semantic tokens via Tailwind utilities
White-label theming is preserved via @theme inline — brand classes override CSS variables at runtime, no per-brand component code needed.
These rules apply to every file under src/ui/**. Add a lint rule or CI grep to block violations.
Do
Don't
Incremental strangler pattern — legacy code stays until each screen is fully migrated.
Foundation
Tailwind v4 spike → tokens.css + @theme → cn() helper → CVA install
Button
Reference component — variants, states, icon positioning
Primitives
Input · Select · Badge · Card · Text/Heading
Per screen
Swap legacy imports → new src/ui; delete legacy after last consumer migrates
Cleanup
Remove wellzesta-ui, .is-* block, styled-components, old --color-bg-* tokens
Explore the components and prototypes built with the new design system.