mzizi-dev/mzizi-registry.
1. Create the component file
Components live undercomponents/registry/n<number>-<name>/, filed by the node they sit on.
See placing a component if you are unsure which that is.
2. Follow the mandatory patterns
Every component carries:- CVA variants —
class-variance-authorityfor every visual variant, never inline conditional classes. cn()composition — allclassNameprops go through it.- A
data-slotattribute on the root element. - Named exports — the component and its variants. No default export.
- Radix UI primitives for focus, keyboard and screen-reader behaviour where the component is interactive.
- TypeScript types extending the appropriate HTML element props.
3. Add it to registry.json
An item with more than one source file where the schema expects exactly one is a manifest bug
rather than a bad request, and the API says so — worth knowing when a component 500s and the
source looks fine.
4. Rebuild the static registry
public/r/.
5. Check it serves
6. Add tests
7. Run everything
Checklist
- CVA + Radix +
cn()throughout - CSS custom properties only — no hardcoded colours
-
data-sloton the root element - Named exports, no default export
- Entry in
registry.jsonwith the right type and dependencies -
pnpm registry:buildruns clean - The API serves it
- Tests, lint and types pass
- APCA 3.0 contrast, 48px minimum touch targets, keyboard navigation