React Component Kit: headless components styled with Tailwind
A project story about building a public, source-delivered React component registry with accessible headless primitives, Tailwind styling, and shadcn-compatible install paths.
- React
- TypeScript
- Tailwind
- design systems
A project story about building a public, source-delivered React component registry with accessible headless primitives, Tailwind styling, and shadcn-compatible install paths.
Component libraries fail when they lock teams into a runtime, hide the source, or ship styles that fight the rest of the stack. React Component Kit began with a different brief: deliver headless, accessible React components styled with Tailwind CSS — copy the source into your repo, or install from a public registry, with no account and no dependency on this site at runtime.
The live product is a source-available showcase of 31 components built on accessible primitives — Accordion, Dialog, Popover, Tabs, Tooltip, Calendar, and more. Every style is a Tailwind class driven by semantic CSS variable tokens. The public registry exposes unauthenticated, cacheable /r/[component].json endpoints compatible with the shadcn CLI, so teams can run npx shadcn add against a stable URL and own every line that lands in their codebase.
The product problem
Teams evaluating UI kits usually hit the same friction:
- runtime CSS-in-JS or package lock-in that makes customization expensive;
- opaque distribution through npm without clear ownership of the source;
- accessibility treated as an afterthought rather than a default;
- theme systems that require wrapping the entire app before a button works;
- registries that need tokens, accounts, or private infrastructure.
The design challenge was not to ship another generic component gallery. It was to make a serious, copy-paste kit feel trustworthy for teams who own their UI long after the install command finishes.
Headless-first, Tailwind-native
RCK builds on accessible headless primitives for interactive patterns. Keyboard interaction, focus management, and ARIA output are documented and tested per component — not bolted on after the visual layer.
Styling stays in Tailwind v4 classes tied to semantic tokens. There is no Emotion layer, no CSS-in-JS runtime, and no hidden style engine. That choice keeps bundle behavior predictable and lets teams remap accent, surface, and text colors through CSS variables without forking component internals.
What headless + Tailwind forces you to decide early
Once components are source-delivered rather than imported as opaque packages, several details become architectural:
- how controlled and uncontrolled state behave consistently across every pattern;
- how theme tokens map to light and dark surfaces without a mandatory app provider;
- how registry JSON stays stable for CLI installs while source on the site can evolve;
- how documentation, examples, and install paths stay aligned so copy-paste and CLI flows do not diverge.
These are not polish items. They are the difference between a demo kit and tooling a team can adopt without regret.
No provider, public registry
Components read plain CSS variables for theming. The only optional provider in the reference setup is next-themes for dark-mode persistence — entirely optional for consumers who bring their own theme strategy.
Distribution is deliberately not an npm package. RCK distributes through a public, shadcn-compatible registry: copy source files directly, or install via CLI from a public JSON endpoint. No login, no token, no runtime dependency on the showcase site.
The homepage demo — a compact workspace dashboard with activity, metrics, and navigation patterns — shows multiple components composed on one surface without inventing a separate design language for marketing.
Why a public registry matters
Install friction kills adoption for internal design systems and client projects alike. A cacheable public endpoint means:
- CI and local installs work the same way.
- Teams audit exactly what enters their repo.
- Accent and token overrides stay in the consumer project, not in a hosted runtime.
If those guarantees are missing, teams revert to vendoring stale copies or abandoning the kit entirely.
Theming without lock-in
RCK ships a rose accent system tuned for light and graphite dark themes. Every color is a CSS variable — teams can swap rose for their brand palette by copying the token block from the theming guide, without rewriting component logic.
That model matches how product teams actually work: brand colors change, dark mode is non-optional, and the kit must survive both without a migration project.
What the work reinforced
Three lessons from React Component Kit apply to other developer-facing UI products:
- Source delivery beats package mystique. Teams adopt faster when they own and can diff every file.
- Accessibility and install ergonomics are product features. Keyboard defaults and public registry URLs belong in the first release, not a later “enterprise” tier.
- Keep styling in the stack the team already chose. Tailwind-native tokens reduce the cost of staying on the kit when the product grows.
Continuing work
React Component Kit is a live, source-available VibeBox product — not a fictional registry demo. The component count, docs, and examples will expand as patterns are validated in real projects. If you are building a component kit or design-system distribution surface of your own, the useful takeaway is simple: make ownership and install paths honest first, then let the showcase prove the components compose under real product density.
See the live product
Open the live React Component Kit site to see the full product experience.
Planning a website of your own?
Share the business goal, scope, budget range, and desired timing. VibeBox will reply with the right next step.