The design system pointer
The design system pointer is how Denote records where tokens come from without owning their values. Denote captures the aesthetic direction (the feel, the references, the density) and a pointer to a token source. The actual token values (colors, spacing, typography scales, radii, shadows) live in the target environment. Claude Code resolves the pointer at build time.
Why Denote does not own tokens
Token editors and color pickers are commodity work. Every design tool has them. Every stack (Tailwind, CSS variables, Style Dictionary, Figma Tokens, shadcn's globals.css) already has its own canonical place for tokens.
If Denote owned token values, it would become another mockup tool. It would duplicate the token store that already exists in your target environment, and the two would drift apart the moment you changed either. You would then spend time keeping them in sync instead of thinking about structure.
So Denote refuses the styling game. The thinking tool stays the thinking tool. Tokens live where they already live. Denote records a pointer.
What the pointer is
The pointer is a small declaration in design/aesthetic.json. It has two parts.
Aesthetic direction. The feel. A freeform prompt ("clean and minimal, soft shadows, generous spacing, calm palette"), reference images of products whose register you admire, mood tags, and a density preference (compact, comfortable, or spacious). This is taste. It cannot be derived from entity extraction, and no structural analysis produces it.
Token source. One of three modes.
defaulttells Claude Code to use the shadcn baseline tokens unchanged. Safe starting point. No config.prompttells Claude Code to tune the shadcn defaults from the aesthetic direction at build time. You described "warm, low-contrast, serif display type"; Claude Code adjusts the shadcn baseline to match.referencedtells Claude Code that you already have a token file on disk. You give Denote a relative path to it. Claude Code reads that file as the authoritative source.
Between the three modes, every common setup is covered. A new project on a default shadcn stack uses default. A project with a strong visual direction but no pre-existing tokens uses prompt. A project that already has a designed token system (a Tailwind config in a monorepo, a Style Dictionary JSON, an exported Figma file) uses referenced.
Where it lives in the app
The design system pointer is not a layer. There is no sixth canvas for styling. The pointer lives in Project Settings, reached from the gear icon in the top bar.
Project Settings contains:
- Project name and path
- The aesthetic direction (the freeform prompt, references moodboard, mood tags, density)
- The token source selector (the three modes, with a path field visible when
referencedis selected) - Output mode preference
- Tracking opt-out
- A link to
intelligence/for overrides
Putting the pointer in settings rather than in a layer makes the intent clear: styling is a project-level declaration, not a per-page decision.
How Claude Code uses it
When Claude Code builds, it reads design/aesthetic.json alongside the other design files.
- The aesthetic direction informs any visual decision that the governance schema does not already pin down. Spacing rhythm, type scale, shadow weight, motion feel.
- The token source tells Claude Code where the numeric values live.
defaultmeans "use what shadcn ships."promptmeans "adjust shadcn using the direction, at build time."referencedmeans "open this file and read the values from there."
The result is that the direction you described and the token source you pointed at both reach the generated code. Claude Code does not invent colors. It does not improvise a type scale when one already exists on disk.
The recipe example
In the recipe portion calculator sample, the aesthetic direction reads:
Warm and unfussy. Recipe cards should feel like postcards. Generous spacing so the phone does not feel cramped in the kitchen. Serif for recipe names, clean sans-serif for instructions. Soft shadows, generous radii, cream background rather than pure white.
References: three recipe apps and one print cookbook, all cream-backgrounded, serif-display-forward.
Density: comfortable.
Token source: prompt. The sample project does not ship a pre-existing token file, so Claude Code tunes the shadcn defaults from the direction at build time: the background shifts off pure white, radii grow, a serif display family is paired with a clean sans, shadows soften.
Nothing in design/aesthetic.json names a hex value. The direction describes intent. The build resolves it.
What this means for the output
The code Claude Code generates uses the token source as its single source of truth.
- If
default, the generated code imports shadcn as normal, with unchangedglobals.css. - If
prompt, the generated code includes the tunedglobals.cssClaude Code wrote from the direction. - If
referenced, the generated code imports tokens from the referenced file path.
In all three cases, there is one canonical place for tokens. Denote does not add a second one.
What the pointer does not cover
- Component code. Buttons, inputs, cards. These are generated from the governance schema and the design system library, not from the aesthetic direction.
- Content. Copy, sample data, labels. Content belongs in the entity model and the build plan.
- Layout structure. Spatial arrangement belongs in the Layout layer, not the aesthetic direction.
The pointer is only about the feel and where the token values live. It stays narrow on purpose.
Where to next
- The governance schema for the structural constraints that travel alongside the aesthetic direction.
- The two app model for how Claude Code reads the pointer and applies it at build time.
- Project file structure for where
design/aesthetic.jsonsits on disk.