0007. A shadcn registry for shared panel code
Status: accepted, 2026-10-09
Context
Panels must use shadcn/ui only, and look like one product. Copying pages' shell, tables and dialogs into
every panel would drift; an npm component library would fight shadcn's "you own the code" model.
Decision
The ui repository is a shadcn registry (registry.json, built with shadcn build) published as static
JSON at ui.<d>/r/ (a pages site). Panels list it in components.json as @xvii and add items with
pnpm dlx shadcn@latest add @xvii/<item>, exactly like upstream components. Items are composed from
upstream shadcn components; no custom CSS.
Consequences
- Updating a shared item in a panel is re-running
shadcn add (with --overwrite), reviewed as a diff.
src/components/ui (upstream) and src/components/xvii (ours) are generated; never edited by hand
in a service.