10 · Registry & API
Query the design system from any agent or project.
Every primitive, mascot, logo, token block, voice rule, and the agent skill itself ship as JSON entries under /r/<name>.json. The registry regenerates on every deploy — never out of sync.
Quick start
1 · Discover
Get the full catalog · names, types, URLs, counts.
curl https://brand.astry.agency/r/index.jsonCopy2 · Install the primitive pack
shadcn CLI installs astry-ui.tsx + the tokens dependency into the target project.
npx shadcn@latest add https://brand.astry.agency/r/astry-ui.jsonCopyNote · Run this from any project root. The pack pulls tokens automatically via registryDependencies.
3 · Drop the agent skill into Claude Code
Teaches any Claude Code agent how to query the registry and respect brand rules.
mkdir -p ~/.claude/skills/astry-design-system && curl -L https://brand.astry.agency/r/skill.md -o ~/.claude/skills/astry-design-system/SKILL.mdCopyNote · Restart Claude Code after dropping the file. The skill auto-activates on Astry-related prompts and paths.
4 · Fetch a single asset
Mascots and logos resolve to direct URLs in their meta blocks.
curl -O https://brand.astry.agency/brand/mascot/happy.svgCopyEndpoints
All endpoints return JSON (or markdown for the skill). Static · cacheable · no auth.
index
Catalog of every registry item · the entry point.
astry-ui
Full primitive pack · installable via shadcn CLI.
tokens
CSS variables (light + dark) and Tailwind extension.
fonts
Neue Haas Display Pro · 16 .ttf files · next/font + @font-face snippets.
voice
Voice contract · do/don't lists.
accessibility
WCAG 2.2 AA contract · a11y rules.
skill
Drop-in skill file for Claude Code agents.
mascot-<name>
Per-mascot metadata + URL of the SVG. 57 entries.
logo-<name>
Per-logo metadata + asset URL.
team-<slug>
Per-member portrait + name + role + founder flag. 4 entries.
Item schema
Every /r/<name>.json follows the shadcn registry-item v2 shape with an Astry-specific meta block.
{
"$schema": "https://ui.shadcn.com/schema/registry-item.json",
"name": "mascot-happy",
"type": "registry:file",
"title": "Astry mascot — happy",
"description": "Default positive state · success · onboarding completion.",
"homepage": "https://brand.astry.agency",
"meta": {
"kind": "mascot",
"emotion": "happy",
"category": "mood",
"available": true,
"url": "https://brand.astry.agency/brand/mascot/happy.svg",
"sizeBytes": 576540,
"reactUsage": "<AstryMascot emotion=\"happy\" size={120} />",
"directFetch": "curl -O https://brand.astry.agency/brand/mascot/happy.svg"
}
}CopyItem types
| type | items | what's inside |
|---|---|---|
| registry:ui | astry-ui | Single-file primitive pack with full source inlined. Install via shadcn CLI. |
| registry:style | tokens | CSS variables (light + dark) + Tailwind theme.extend mapping. |
| registry:lib | voice · accessibility · skill | Brand contracts and the agent skill, exposed as meta blocks. |
| registry:file | mascot-* · logo-* · angle | Per-asset metadata. Binaries are referenced via meta.url, not inlined. |
Auto-sync · the registry is regenerated on every deploy from components/astry-ui.tsx, app/globals.css, data/mascots.json, and public/brand/. Source change → push → registry regenerates → all consumers see the update on their next fetch.