Get started
Quick start
Connect the registry, a product theme and your first component, then check the build
1. Connect the registry
Add the registry once in your product’s components.json:
{
"registries": {
"@umbra": "https://aid-design-lovat.vercel.app/r/{name}.json"
}
}
2. Product theme
The base (tokens, base.css, the Tailwind bridge), the product layer (accent) and the lint rules. For the portfolio, install theme-portfolio instead of theme-shadenotes; a new product makes its own layer from the same pattern (see “Product themes”)
npx shadcn@latest add @umbra/theme-base @umbra/theme-shadenotes @umbra/eslint3. Add the CSS
Tailwind 4, in app/globals.css:
@import "tailwindcss";
@import "../styles/umbra/tokens.css";
@import "../styles/umbra/product.css";
@import "../styles/umbra/tailwind-v4.css";
@import "../styles/umbra/base.css";
Tailwind 3.4: presets: [require("./styles/umbra/tailwind-v3-preset.cjs")] in tailwind.config.js, and tokens.css, product.css, base.css in the global CSS before @tailwind base. Details in “Product themes”
4. First component
Files land in components/umbra/ and don’t overwrite the product’s shadcn components (components/ui/):
import { Tile } from "@/components/umbra/tile";
import { Button } from "@/components/umbra/button";
<Tile>
<p className="text-title">Встречи</p>
<Button className="mt-4">Начать запись</Button>
</Tile>
npx shadcn@latest add @umbra/tile @umbra/button5. Checks
Lint: in the product’s eslint.config.mjs, spread ...umbra.configs.recommended from ./eslint.umbra.mjs (raw colors, off-scale spacing, foreign icons, arrows, glass on a tile). Then tsc --noEmit, the build and screenshots of the screen at 1100 × 700 in both themes. Take text / background pairs only from the table in “Color and contrast”
For the agent in your product: a CLAUDE.md snippet and a skill, in “Connect an agent”