Onboarding
Getting Started
From zero to your first agent interface in three steps. Then six composable recipes for the patterns you actually need.
Installation
Install
Private preview. Access is granted per team; once you have it, one registry line and one install.
# .npmrc
@danagraph:registry=https://npm.pkg.github.com
# then, with a GitHub token that has read:packages in NODE_AUTH_TOKEN
npm install @danagraph/design-systemImport tokens
Load the Bauhaus token layer into your app root.
// app/layout.tsx
import "@danagraph/design-system/tokens/index.css";Use a component
Every component is a named export. No default exports, no barrels.
import { AgencyIndicator } from "@danagraph/design-system";
<AgencyIndicator
level={2}
label="Recommendation"
interactive
showScale
/>Theming
Three-layer token architecture
Tokens cascade from raw primitives to semantic meanings to component overrides. Override any layer without breaking the chain.
Primitives
--bh-*Raw color values, type scales, spacing units. The atoms.
--bh-red--bh-blue--bh-yellow--bh-black--bh-gray-3Semantic
--ds-*Meaning-mapped tokens. Agency is always red. Temporal is always blue.
--ds-color-agency--ds-color-temporal--ds-surface-overlay--ds-text-mutedComponent
--bh-node-*Scoped overrides for specific component families.
--bh-node-bg--bh-node-border--bh-input-border-focus--bh-outcome-positiveFull token reference → Foundation / Tokens
Tooling
Component Registry API
Every component is catalogued in a machine-readable JSON registry. Use it for CLI tools, IDE extensions, documentation generators, or custom scaffolding.
# Fetch the full registry
curl https://design.dana.xyz/registry.json
# Schema validation
curl https://design.dana.xyz/registry-schema.json// Each component entry includes:
{
"name": "AgencyIndicator",
"slug": "agency-indicator",
"category": "pattern",
"subcategory": "agency-control",
"status": "stable",
"tokens": ["semantic", "type", "motion", "border"],
"variants": ["inline", "bar", "badge"],
"sizes": ["sm", "md", "lg"],
"principles": [1, 5, 6],
"related": ["AgencyStack", "PermissionMatrix"],
"source": "components/patterns/AgencyIndicator.tsx",
"props": [...]
}379 Components
95 UI primitives + 104 AI-native patterns + 180 finance components, fully typed and documented.
JSON Schema
Validate registry entries with the published JSON Schema 2020-12 spec.
Build-time Generated
Registry JSON is regenerated on every build from the TypeScript source of truth.
Storybook
Interactive stories for all 379 components — live props, dark/light themes, accessibility audit, and auto-generated docs. Every component ships with a Default and Playground story. Coming soon as an internal hosted instance.
Recipes
Six composable patterns
Each recipe composes 3–5 components into a production pattern. Copy the structure, swap the data source, ship.
Chat interface
Streaming conversation with role indicators, tool-call expansion, and citation provenance.
<ChatMessage role="assistant" model="claude-4">
<StreamingResponse stream={response}>
{(text) => <Markdown>{text}</Markdown>}
</StreamingResponse>
</ChatMessage>Agent dashboard
Multi-agent orchestration view with timeline, status, and handoff visualization.
<AgentTimeline agents={pipeline.agents}>
{(agent) => (
<AgentCard
name={agent.name}
status={agent.status}
authority={agent.authority}
/>
)}
</AgentTimeline>Consent ceremony
Multi-step permission granting with visible authority levels and revocation.
<ConsentFlow
scope="calendar.write"
ceremony="elevated"
onGrant={handleGrant}
onRevoke={handleRevoke}
>
<VaultBoundary label="Calendar Access" />
</ConsentFlow>Tool execution trace
Expandable tool-call cards with input/output panels and execution timing.
<MCPToolCall
tool="search_vault"
status="success"
duration={47}
input={{ query: "Q3 results" }}
output={{ matches: 12 }}
/>Confidence display
Grounding indicators, model tags, and confidence meters for transparent AI output.
<ConfidenceMeter value={0.87} qualifier="high">
<GroundingIndicator
level="verified"
source="Annual Report 2025"
/>
</ConfidenceMeter>Learning feedback loop
Visible system learning: what was observed, inferred, and what changed.
<FeedbackSignal
onPositive={handleThumbsUp}
onNegative={handleThumbsDown}
/>
<LearningLedger entries={model.learnings} />