Case study 05 — Self-initiated · Design system

A shared language for intelligent products.

Forma asks what one system would look like underneath agentic products, so that asking, delegating, configuring and approving all speak the same language.

Role
Self-initiated
System design, documentation
Type
Concept design system
Not a shipped product
Year
2026
Deliverable
Interactive HTML reference
Light and dark themes
Open the live system ↗ Runs in the browser. Opens in a new tab.
Forma design system overview page with navigation, system summary and counts
01The front door. Everything in the library is live: components respond, themes switch, and the flow builder runs a simulated preview.
01 — Why build it

Different jobs. One interface.

AI workspaces and workflow tools combine very different tasks: asking a question, choosing a specialist, configuring a process and approving an action. Left alone, each one grows its own conventions.

I met that problem in the two agentic case studies on this site, the procurement platform and the workflow builder. Forma started from their patterns: prompt entry, role-based agents and task cards on one side; workflow cards, filtering, activation, flow preview and run status on the other.

It isn't an extraction of either product. It's a self-initiated study of the system that could sit underneath both. It has its own identity, fictional names and illustrative data, which keeps it independent of any company's branding.

Make those experiences consistent — without hiding their consequences.
02 — What made it hard

Five problems a style guide doesn't solve.

Four jobs with different stakes

A question is cheap to get wrong. An approved action isn't. The same button, badge or card has to read correctly in both, without making the harmless feel dangerous or the consequential feel casual.

Visual state is not business status

Hover, focus, pressed and disabled describe the control. Active, paused, draft and review required describe the work. When the two share a vocabulary, a paused workflow starts to look like a disabled button.

Two themes, one set of names

Dark mode had to be a second resolution of the same roles, not a repaint. If a colour means "primary action" in light, it has to mean exactly that in dark.

AI output must not overclaim

Loading states that invent progress, and answers presented as verified without evidence, are design failures. Honesty had to be the default pattern, not a line in a writing guide.

It has to survive handover

A system that lives in one designer's file doesn't scale. Every token, component and pattern needed a contract engineering could implement and a Figma library could be rebuilt from.

03 — The decision

Tokens name a role, never a colour.

Three layers. Primitives hold the raw palette, semantic roles say what a colour means, and component aliases say where it's used.

primitive.violet.700 → action.primary → button.bg

The same role resolves to violet.700 in light and violet.200 in dark. Components never reference a hex value.

It sounds like bookkeeping. It's what makes dark mode a setting rather than a project, and what lets a status colour change once instead of in every screen that uses it.

72primitive tokens across six palettes
35semantic roles, each resolved for light and dark
15component aliases
2complete themes from one set of names
Colour and tokens page showing primitive palettes and token download buttons
Forma overview page in the dark theme
02Left: six primitive palettes feed 35 semantic roles, downloadable as JSON or CSS variables. Right: the same overview resolved through the dark theme. Nothing was redrawn.
04 — Four rules

Rules that connect every control to product behaviour.

01

Clarity before autonomy

Make the next action, its scope and its consequences visible. Name an action with a verb and an object: "Review request", never a bare "OK".

Agents and tasks page showing an agent selector and agent cards with availability states
03Agents are named specialists, not one general assistant, each with a visible state: selected, available, offline or needing review. The chosen specialist stays visible throughout the conversation.
02

Progressive disclosure

Show the most useful controls first. Configuration and evidence stay within reach without crowding the primary task.

Flow builder with a linear flow of trigger, action, condition and approval nodes and a configuration inspector
04The flow builder keeps the canvas primary and puts configuration in an inspector beside it. Trigger, action, condition and approval each have their own semantic token.
03

Human control

Separate suggestions from execution. Consequential actions need an explicit approval and leave an audit trail.

"I have reviewed the proposed change."

Approve won't proceed until this is ticked. It says why, and moves focus to the checkbox.

This is the same position as the agentic platform case study: the agent declares intent, and a human commits. Here it becomes a reusable component instead of a one-off screen. Target, change, scope and reviewer are stated before anything is applied.

Review proposed action dialog with target, change, scope, reviewer, a confirmation checkbox, and Reject and Approve buttons
05Reject sits right beside Approve. Saying no is a first-class action, not a way to close the dialog.
04

One semantic language

Use the same role for the same meaning in both themes. Success, selection and progress are distinct concepts, and none of them is carried by colour alone.

Buttons and actions page with hierarchy and a state matrix for default, hover, pressed, focus and disabled
06Each component documents its states side by side: default, hover, pressed, focus and disabled, plus loading for actions, with its usage, behaviour and token contract written underneath.
05 — Making it

Details that make it a system, not a sticker sheet.

Every component has a contract

Structure, properties and behaviour are written down for each one. That means container, content and affordances; variant, size, state and slots; and activation, keyboard, focus, validation, loading and recovery.

Honest waiting

Processing states offer Stop and never show invented progress percentages. When evidence is missing, the assistant says so: "I don't have enough information to compare these suppliers."

Evidence you can open

Citations are disclosures the user can expand, not decorative footnotes. The reference comes first, then the decision.

A keyboard map, not a promise

Eight control types have documented keyboard behaviour. Tabs move with the arrow keys, Home and End. Dialogs contain focus, close on Escape and return focus to whatever opened them.

Responsive by contract

On desktop, navigation and the inspector sit side by side. Tablet collapses navigation but keeps primary actions in place. Mobile stacks the composer and moves the inspector below the canvas.

AI workspace screen template in the light theme
AI workspace screen template in the dark theme
07The AI workspace screen template in both themes, composed entirely from the library's own components.
Forma overview page at mobile width
Conversation pattern at mobile width in the dark theme
Screen templates page at mobile width in the dark theme
08Overview, conversation and screen templates at phone width. The layout changes; the roles don't.
Workflow library with workflow cards showing Active, Paused and Draft states
09The workflow library. Active, paused and draft are each shown as a label and a switch, never as a colour alone.
06 — Accessibility

Contrast checked at the source.

Because every colour is a role, contrast can be verified once, at the tokens, rather than screen by screen.

Every text role (primary, secondary and muted) clears WCAG AA's 4.5:1 on every surface, in both themes. Action and status labels pass on their own backgrounds too.

24/24text-on-surface pairings pass 4.5:1 across light and dark
8/8documented text, action and status pairs pass in both themes
5.54:1lowest contrast ratio in the whole set
8control types with a documented keyboard map
Accessibility page with a calculated text contrast table for light and dark themes

These checks support implementation review. They are not a compliance certification: screen-reader and assistive-technology testing belong to a production build.

07 — Handoff

Built to be rebuilt.

The HTML is the working reference. Everything in it is written so engineering can implement it and a Figma library can be reconstructed from it.

Tokens download as a JSON manifest or CSS variables. Components come with API conventions that engineering can map to their own framework. The handoff page sets out the Figma rebuild: primitive and light/dark semantic collections, auto-layout components with explicit variant and state properties, and screens composed from linked instances.

Agent { id, role, capability, availability, selected, pendingActions }

One of the component API conventions. An agent is a data contract, not just a card.

Versioning is written down too. A fix is a patch, a new compatible component is a minor, and renaming a token is a major release with migration guidance and a deprecation period.

Developer handoff page with token downloads, delivery contents and Figma reconstruction steps
10The handoff page: token downloads, delivery contents and the steps for rebuilding the library in Figma.
08 — Scope, stated plainly

What this is, and what it isn't.

A concept system

Self-initiated, not a shipped client deployment. No adoption, revenue, usability or performance results are claimed.

A working reference, not a product

No live AI, sign-in, backend or workflow execution. Conversations are scripted, workflows run as a simulated preview, and nothing leaves the browser.

Independent of any employer

Fictional names and illustrative data throughout. Forma has its own identity and carries no company's branding.

Still open

A screen-by-screen reconciliation against the full set of source screens, and production accessibility testing with assistive technology.

46components and product patterns
22documented sections, from foundations to handoff
2themes, switchable anywhere in the library
1portable HTML file, with no build step
09 — Try it

Explore Forma.

Switch themes, try the components, open the approval dialog and run the flow builder.

Open the live system ↗ Opens in a new tab.