shadcn/ui model for infrastructure components
Last Updated: November 11, 2025
The UI Registry is a collection of dashboard components that work with StackDock's universal resource tables. Components follow the copy/paste/own model - you install them into your codebase and own the code.
Current Status: Registry structure ready. Provisioning components added (provision-form, provision-status-card, resource-spec-form, provision-progress-indicator). Ready for component contributions.
# Install a component (when CLI is ready)
npx stackdock add server-health-widget
# Component is copied to your apps/web/src/components/server-health-widget/
# You own it, modify it, customize itpackages/ui/
├── components/ # Component directories
│ ├── server-health-widget/
│ ├── deployment-timeline/
│ └── domain-status-card/
├── registry.json # Registry manifest
└── README.md # This file
Components use universal tables (servers, webServices, domains) - not provider-specific types. This means:
- ✅ Works with ANY provider (AWS, DigitalOcean, Vercel, GridPane, etc.)
- ✅ Shows universal fields (name, status, URL)
- ✅ Optionally shows provider-specific fields from
fullApiData
// ✅ GOOD: Uses universal table
function WebServiceCard({ service }: { service: Doc<"webServices"> }) {
return (
<Card>
<h3>{service.name}</h3>
<Badge>{service.provider}</Badge>
<p>{service.productionUrl}</p>
{/* Provider-specific (optional) */}
{service.provider === "gridpane" && service.fullApiData && (
<p>PHP: {service.fullApiData.phpVersion}</p>
)}
</Card>
)
}See REGISTRY_GUIDE.md for complete instructions.
- Create component directory:
packages/ui/components/my-component/ - Add component file:
my-component.tsx - Add documentation:
README.md - Add tests:
tests/my-component.test.tsx - Update
registry.jsonwith component metadata
See registry.json for the manifest format. Each component entry includes:
name: Component identifiertitle: Display namedescription: What it doesversion: Semantic versionresourceTypes: Universal tables it uses (servers,webServices,domains,databases)files: Files to copydependencies: npm dependenciesregistryDependencies: Other registry components it needs
Provisioning Components (Mission 2.5):
provision-form- Multi-step provisioning form with XState integrationprovision-status-card- Real-time provisioning status displayresource-spec-form- Provider-specific resource configuration formprovision-progress-indicator- Step-by-step progress visualization
Registry: See packages/ui/registry.json for complete component manifest.
- Build your component following REGISTRY_GUIDE.md
- Ensure it uses universal tables (not provider-specific)
- Follow shadcn/ui patterns
- Add tests
- Submit PR
- REGISTRY_GUIDE.md - How to build components
- ARCHITECTURE.md - System architecture
- CONTRIBUTING.md - Development workflow
Remember: Components are copy/paste/own. You install them, you own them, you customize them.