Skip to content

PLAN: shadcn/ui Component Library Adoption

+======================================================================+
| |
| ███████╗██╗ ██╗ █████╗ ██████╗ ██████╗███╗ ██╗ |
| ██╔════╝██║ ██║██╔══██╗██╔══██╗██╔════╝████╗ ██║ |
| ███████╗███████║███████║██║ ██║██║ ██╔██╗ ██║ |
| ╚════██║██╔══██║██╔══██║██║ ██║██║ ██║╚██╗██║ |
| ███████║██║ ██║██║ ██║██████╔╝╚██████╗██║ ╚████║ |
| ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝╚═╝ ╚═══╝ |
| |
| U I A D O P T I O N P L A N |
| |
| Magic e-VERSE Design System |
| shadcn/ui + Tailwind CSS + Radix Primitives |
| |
| Status: WACHT OP AKKOORD |
| Prioriteit: Hoog |
| Impact: Alle frontend projecten |
| |
+======================================================================+

Het Magic e-VERSE ecosysteem heeft momenteel geen gedeelde component library. Elke app herbouwt buttons, modals, tabellen en formulieren from scratch. Dit plan beschrijft de adoptie van shadcn/ui als standaard component library, verpakt in een gedeeld @magiverse/ui pakket dat het bestaande design behoudt.


ProjectFrameworkUI LibraryStyling
PIM StorefrontNext.js 15Medusa UI (Radix)Tailwind 3.x
Omniverse StorefrontNext.js 15Medusa UI (Radix)Tailwind 3.x
Magiceverse EvolvedNext.js 14GeenTailwind 3.4
Magic PortalVite + React 19GeenPlain CSS (370KB!)
Magic ManagementVite + React 19GeenPlain CSS
Magic Tenant PortalVite + React 19GeenPlain CSS
Magic MoodshotVite + React 19GeenPlain CSS
PIM AdminMedusa Admin SDKMedusa UIMedusa preset
  1. Geen gedeelde componenten - Buttons, modals, tabellen worden per project opnieuw gebouwd
  2. Inconsistente styling - Tailwind in storefronts, plain CSS in portals
  3. Duplicatie - MagicHeader, modals, badges, form groups herhaald per project
  4. Onderhoudslast - 370KB App.css in magic_portal is onwerkbaar
  5. Geen design tokens - Kleuren/spacing alleen als losse CSS variables, geen single source of truth
  • Radix UI primitives - Al in gebruik via Medusa UI (shadcn is ook gebouwd op Radix)
  • Tailwind CSS - Al in gebruik in 3 van de 8 projecten
  • CSS Variables - Design tokens zijn al gedefinieerd (--pink, --green, --blue, etc.)
  • Monorepo structuur - packages/ directory bestaat al (@magiverse/i18n)

Je bezit de code

shadcn/ui is geen npm dependency - componenten worden gekopieerd naar je repo. Volledig aanpasbaar, geen vendor lock-in.

Zelfde foundation

Gebouwd op Radix + Tailwind - exact dezelfde stack die je al gebruikt in de storefronts.

Incrementele adoptie

Voeg een component per keer toe. Geen big-bang migratie nodig.

Grootste community

2M+ maandelijkse downloads, 80K+ GitHub stars, honderden templates en voorbeelden.

LibraryScore /50SterkteZwakte voor ons
shadcn/ui47Code ownership, Radix+Tailwind, incrementeelTailwind nodig in portal projects
Radix Themes42Al in stack via MedusaMinder community, geen code ownership
Ark UI + Park UI38Modern, token-basedNieuw primitief systeem naast Radix
Mantine35120+ componentenCSS Modules, conflicteert met Tailwind
NextUI (HeroUI)33Mooi out-of-boxFramer Motion dependency, React 19 issues

TemplateWaarom relevantURL
taxonomyApp shell met sidebar navigatie, goed voor account/dashboard paginasshadcn/ui officieel voorbeeld
shadcn/ui Blocks - EcommerceProduct cards, cart components, checkout flowsui.shadcn.com/blocks
TemplateWaarom relevantURL
shadcn-adminComplete admin dashboard met sidebar, tables, charts, formsgithub.com/satnaing/shadcn-admin
shadcn/ui DashboardOfficieel dashboard voorbeeld met data tables, charts, authui.shadcn.com/examples/dashboard
shadcn/ui Blocks - SidebarsSidebar navigatie patronen (past bij portal layout)ui.shadcn.com/blocks#sidebar
shadcn/ui Blocks - LoginAuth pages die we kunnen themen naar onze stijlui.shadcn.com/blocks#login
TemplateWaarom relevantURL
shadcn-landing-pageHero sections, features, pricing, CTA - past bij evolved sitegithub.com/leoMirandaa/shadcn-landing-page
shadcn/ui BlocksModulaire hero, feature, pricing sectiesui.shadcn.com/blocks
TemplateWaarom relevantURL
shadcn/ui CLIOfficieel init + add systeem, beste basis voor eigen packageui.shadcn.com/docs/cli
ui/registry patternshadcn’s eigen registry systeem voor custom component distributieui.shadcn.com/docs/registry

Gebaseerd op wat we nu custom bouwen, zijn dit de shadcn componenten met de hoogste impact:

ComponentVervangtProjecten
Button.btn-primary, .btn-success, .btn-cancel (5 varianten per project)Alle
DialogCustom modal met overlay/backdrop (per project anders)Alle
Table + DataTableCustom <table> styling + paginationPortal, Tenant Portal, PIM Admin
Input + Label.form-group input + floating labelsAlle
Select<NativeSelect> + custom dropdownsAlle
Badge.role-badge, .version-badge, .status-dotAlle
Card.project-card, .app-card, .site-cardAlle
TabsCustom tab implementationsPortal, Tenant Portal
Toast / SonnerCustom notification systemenAlle
SheetMobile sidebar patternsPortal
Dropdown MenuUser menu, context menusAlle
SkeletonLoading states (nu vaak spinners)Alle
CommandSearch (Cmd+K pattern in portal header)Portal

Onze bestaande kleuren mappen naar shadcn’s CSS variable systeem:

/* @magiverse/ui - globals.css */
@layer base {
:root {
/* Map Magic e-VERSE kleuren naar shadcn variabelen */
--background: 35 33% 96%; /* #f5f3f0 (beige) */
--foreground: 236 33% 14%; /* #1a1a2e (dark) */
--primary: 340 67% 51%; /* #d62e6e (pink) */
--primary-foreground: 0 0% 100%; /* white */
--secondary: 160 51% 54%; /* #3dd598 (green) */
--secondary-foreground: 0 0% 100%;
--accent: 210 100% 56%; /* #1e90ff (blue) */
--accent-foreground: 0 0% 100%;
--destructive: 12 100% 64%; /* #ff6b4a (orange/red) */
--destructive-foreground: 0 0% 100%;
--muted: 210 11% 96%; /* #f0f0f0 */
--muted-foreground: 215 16% 47%;
--card: 0 0% 100%; /* white */
--card-foreground: 236 33% 14%;
--border: 220 13% 91%; /* #e0e0e0 */
--input: 220 13% 91%;
--ring: 340 67% 51%; /* pink focus ring */
--radius: 0.5rem; /* 8px - ons standaard border-radius */
/* Custom Magic e-VERSE tokens (buiten shadcn standaard) */
--purple: 291 65% 43%; /* #9c27b0 */
--orange: 12 100% 64%; /* #ff6b4a */
}
.dark {
--background: 236 33% 14%; /* #1a1a2e */
--foreground: 210 11% 96%;
--card: 230 25% 18%; /* #16213e */
--primary: 349 76% 59%; /* #e94560 (moodshot pink) */
/* ... overige dark mode tokens */
}
}

  1. Fase 0: Package Setup (1 dag)

    Maak het @magiverse/ui pakket aan in de monorepo:

    packages/
    magiverse-i18n/ (bestaand)
    magiverse-ui/ (nieuw)
    src/
    components/
    ui/ (shadcn componenten)
    lib/
    utils.ts (cn helper)
    styles/
    globals.css (design tokens)
    package.json
    tailwind.config.ts
    tsconfig.json
    • Initialiseer shadcn/ui met npx shadcn@latest init
    • Configureer design tokens (kleuren, radius, fonts)
    • Stel Tailwind config in met Magic e-VERSE preset
    • Exporteer componenten als npm package
  2. Fase 1: Tailwind toevoegen aan Portal Projects (1-2 dagen)

    Voeg Tailwind CSS toe aan de 4 Vite-projecten die nu plain CSS gebruiken:

    • magic_portal
    • magic_management
    • magic_tenant_portal
    • magic_moodshot
  3. Fase 2: Core Components (2-3 dagen)

    Installeer en theme de meest gebruikte componenten:

    • Button (primary=pink, secondary=green, accent=blue, destructive=orange)
    • Input + Label (met focus ring in pink)
    • Badge (role colors: admin=green, developer=blue, client=purple)
    • Card (white, 12px radius, subtle shadow, hover lift)
    • Dialog/Modal (backdrop blur, header/body/footer)
    • Toast (via Sonner)

    Vervang in 1 project (magic_management - kleinste) alle custom componenten.

  4. Fase 3: Data Components (2-3 dagen)

    • Table + DataTable met sorting, filtering, pagination (TanStack Table)
    • Select + Combobox
    • Tabs
    • Dropdown Menu
    • Command (search)

    Vervang in magic_tenant_portal.

  5. Fase 4: Portal Migratie (3-5 dagen)

    Migreer magic_portal (het grootste project):

    • Vervang 370KB App.css met Tailwind + shadcn componenten
    • Refactor naar component-bestanden (uit de monolithische App.tsx)
    • Behoud MagicHeader maar bouw met shadcn primitives
  6. Fase 5: Storefront Integratie (2-3 dagen)

    Gebruik @magiverse/ui naast Medusa UI in de storefronts:

    • Medusa UI blijft voor commerce-specifieke componenten (cart, checkout)
    • shadcn/ui voor generieke UI (modals, forms, toasts, badges)
    • Beide gebruiken Radix, geen conflicten
  7. Fase 6: Evolved Site (1-2 dagen)

    Magiceverse Evolved gebruikt al Tailwind - voeg shadcn componenten toe:

    • Vervang custom section components met shadcn Cards/Buttons
    • Behoud custom animaties en glassmorphism effecten

ScenarioLibrary
PIM Admin dashboardMedusa UI (via Admin SDK)
Storefront checkout/cartMedusa UI
Storefront account pages@magiverse/ui (shadcn)
Portal/Management/Tenant@magiverse/ui (shadcn)
Landing pages@magiverse/ui (shadcn)
Moodshot@magiverse/ui (shadcn)

Beide libraries gebruiken Radix UI primitives en Tailwind CSS - ze werken naadloos samen.


RisicoImpactMitigatie
Tailwind toevoegen breekt bestaande CSSMediumTailwind preflight uitzetten, co-existentie testen
Bundle size toenameLaagTailwind purge + tree-shaking, shadcn is copy-paste (geen library overhead)
Leercurve teamLaagshadcn docs zijn uitstekend, patronen zijn standaard React
Medusa UI conflictenLaagBeide op Radix, namespace scheidbaar via import paths
Migratie tijd onderschatMediumIncrementele aanpak - elk project onafhankelijk migreerbaar

Na voltooiing:

  • 1 gedeelde component library (@magiverse/ui) voor het hele ecosysteem
  • Consistente design - zelfde buttons, modals, forms in elke app
  • ~80% minder custom CSS - van 370KB+ naar component-scoped Tailwind
  • Snellere development - nieuwe features bouwen met bestaande componenten
  • Betere accessibility - Radix primitives hebben ARIA support ingebouwd
  • Dark mode ready - shadcn’s CSS variable systeem ondersteunt themes out of the box