Getting Started
Components
Search for a command to run...
This is the recommended approach for new React applications. You own the component code, customize freely, and get the full shadcn/ui experience with Strongtie branding.
Why this approach? Components are copied into your project, not installed as dependencies. You own the code and never worry about breaking changes from package updates.
The fastest way to get started is using shadcn's preset feature:
This creates a new Vite + React project with Strongtie design standards pre-configured.
Already have a project? Follow the manual setup steps below.
Follow the guide from shadcn
Add components using the shadcn CLI:
Components are copied to your components/ui/ directory where you can customize them.
Best Practice: When adding custom functionality, create abstracted
components instead of editing shadcn components directly. For example, if you
need a button with custom props, create components/custom-button.tsx that
wraps components/ui/button.tsx. This keeps shadcn components pristine and
makes updates easier.
All major AI coding assistants (Claude, ChatGPT, Cursor, etc.) have native knowledge of shadcn/ui. Just ask "use shadcn to add a button" and they know exactly what to do. Plus, with the shadcn MCP server available, AI agents can directly add and modify components in your project—making UI development faster and more intuitive than ever.
shadcn/ui supports two UI primitive libraries:
To use Base-UI instead:
Both produce the same visual output. The difference is the underlying accessibility primitives.
Since you own the code, modify components directly:
// Add custom variants to match your needs
const buttonVariants = cva(
"inline-flex items-center justify-center rounded-md text-sm font-medium transition-all",
{
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/90",
destructive: "bg-destructive text-white hover:bg-destructive/90",
outline: "border bg-background hover:bg-accent",
secondary:
"bg-secondary text-secondary-foreground hover:bg-secondary/80",
ghost: "hover:bg-accent hover:text-accent-foreground",
link: "text-primary underline-offset-4 hover:underline",
// Add your own
brand: "bg-orange-500 text-white hover:bg-orange-600",
},
// ...
},
}
)Tailwind CSS handles nearly all styling needs, but custom CSS is acceptable on a case-by-case basis when Tailwind lacks native utilities.
When custom CSS may be appropriate:
@media print) with specific requirementsRequirements for custom CSS:
var(--spacing), var(--primary), etc.) to maintain theme compatibilityThis is not blanket permission to write custom CSS. Each case should be evaluated to ensure Tailwind utilities or plugins cannot accomplish the same result.
See the Design Standards FAQ for detailed guidance.
Ensure your CSS variables match the example above. shadcn components rely on variables like --background, --foreground, --primary, etc.
Cmd/Ctrl + Shift + P > "TypeScript: Restart TS Server"tsconfig.json:{
"compilerOptions": {
"paths": {
"@/*": ["./*"]
}
}
}globals.css is imported in your root layoutcontent paths in your Tailwind config