Component Pipeline Tracker
v3.0 · 11 components
Tracker Token Map Process
Design System Engineering · Personal Case Study

Figma Variables
to Angular Codebase
zero drift.

A personal workflow for shipping design systems at speed. Every component tracked across five pipeline stages — searchable, commentable, and usable by anyone from a designer doing a handoff to a senior engineer doing code review. One source of truth.

80+
components total
5
pipeline stages
63%
reuse at 12 months
2.4×
faster onboarding
End-to-end pipeline — every component travels all five stages
01
Figma Variables
Tokens + Auto-layout
02
Token Studio
JSON export
03
Style Dictionary
CSS vars + TS types
04
Angular / Code
Standalone components
05
Storybook
Living documentation

Components (11)

All ✓ Ready ⚠ Partial ✕ Not started
Button
<ds-button> · .ds-btn · @ds/angular
Figma Token Studio Style Dict Angular Storybook
5/5 ready
Figma
✓ Ready
4 variants, 3 sizes
Token Studio
✓ Ready
6 tokens exported
Style Dict
✓ Ready
CSS vars generated
Angular
✓ Ready
v2.1.0 stable
Storybook
✓ Ready
9 stories live
Pipeline completion5/5
Figma
Token Studio
Style Dictionary
Angular
Storybook
Ready — Published in Figma library under Components / Button. All variants use token-referenced values.
Variants Primary Secondary Destructive Ghost
Sizes Small Medium Large
States Disabled Loading Active
Figma path
Components / Button
@Input names = Figma properties
variant · size · disabled · loading
color/primary/900color/danger/600space/2space/4radius/mdtypography/basefont-weight/medium
Ready — All button tokens in tokens/tokens.json. Zero pending changes.
Token values — Figma Variable → CSS output
Figma VariableCSS PropertyValueMatch
color/primary/900--color-primary-900#e8ff5a
color/danger/600--color-danger-600#dd4040
space/2--space-28px
space/4--space-416px
radius/md--radius-md8px
font-weight/medium--font-weight-medium600
Ready — CSS custom properties generated and published via CI.
dist/tokens/variables.css (auto-generated)
CSS
/* Auto-generated — do not edit manually */
/* Source: tokens/tokens.json → Style Dictionary build */
:root {
  --color-primary-900: #e8ff5a;  /* color/primary/900 */
  --color-primary-50:  #f9ffe0;  /* color/primary/50  */
  --color-danger-600:  #dd4040;  /* color/danger/600  */
  --space-2: 8px;
  --space-4: 16px;
  --radius-md: 8px;
  --font-weight-medium: 600;
  --text-base: 1rem;
}
Ready — v2.1.0 · stable · published to npm as @ds/angular
Import component Class names only
your.component.ts
TypeScript
import { DsButtonComponent } from '@ds/angular';

@Component({
  standalone: true,
  imports: [DsButtonComponent],
  template: `
    <ds-button variant="primary" size="md"
      [loading]="isLoading" (click)="onSave()">
      Save changes
    </ds-button>

    <ds-button variant="secondary" size="sm">Cancel</ds-button>
    <ds-button variant="destructive" [disabled]="!canDelete">Delete</ds-button>
    <ds-button variant="ghost">Learn more</ds-button>
  `,
}) export class YourComponent {
  isLoading = false;
  canDelete = true;
}
template.html — class-only approach
HTML
<button class="ds-btn ds-btn--primary">Primary</button>
<button class="ds-btn ds-btn--secondary ds-btn--sm">Small</button>
<button class="ds-btn ds-btn--destructive" disabled>Delete</button>
<!-- All spacing + colour from CSS vars —  -->
<!-- var(--space-2), var(--color-primary-900), var(--radius-md) -->
Ready — All stories live at Components / Button matching Figma path.
PrimarySecondaryDestructiveGhostSmallLargeLoadingDisabledWithIcon
1
Open Storybook → Components / Button
2
Use Controls panel to toggle variant, size, loading, disabled
3
Copy generated snippet from Docs tab — uses <ds-button> with exact prop names
Comments & change requests3 comments
TM
Thabo M.2d agoChange request· Angular
ds-btn--ghost hover background missing — Figma shows color/primary/50.
LM
Lulamile M.1d agoApproved· Angular
Fixed in v2.1.0 — ghost hover now uses var(--color-primary-50). Storybook updated.
SR
Sipho R.5h agoQuestion· Figma
Should we add a full-width variant? Some onboarding flows need width:100%.
LM
Input Field
<ds-field> · .ds-input · Reactive Forms compatible
Figma Token Studio Style Dict Angular Storybook
5/5 ready
Figma
✓ Ready
4 states designed
Token Studio
✓ Ready
All tokens exported
Style Dict
✓ Ready
variables.css updated
Angular
✓ Ready
v2.0.3 stable
Storybook
✓ Ready
6 stories live
Pipeline completion5/5
Figma
Angular
Style Dictionary
Ready — 4 states: Default, Focused, Error, Disabled. All paddings use token references.
Default
Email address
you@example.com
We'll never share your email
Focused
Password
••••••••
Error
Username
taken_name
Username already taken
Disabled
Account ID
ACC-00482
color/primary/900color/danger/600space/2space/3radius/md
Ready — v2.0.3 · Reactive Forms compatible · ARIA baked in · all states handled.
Reactive Form Class names
reactive-form usage
HTML
<!-- @Input names match Figma property names exactly -->
<ds-field
  label="Email address"
  type="email"
  placeholder="you@example.com"
  [required]="true"
  [formControl]="emailCtrl"
  hint="We never share your email"
  [errorMessages]="{ required: 'Required', email: 'Invalid email' }"
/>
class-only approach
HTML
<input class="ds-input" type="email" placeholder="you@example.com"/>
<input class="ds-input ds-input--error" type="text"/>
<input class="ds-input" type="text" disabled/>
Ready — All field tokens in variables.css
_ds-field.scss (consumes generated vars)
SCSS
.ds-input {
  padding: var(--space-2) var(--space-3);    /* Figma: space/2 space/3 */
  border-radius: var(--radius-md);           /* Figma: radius/md       */
  font-size: var(--text-base);              /* Figma: typography/base */
  border: 1px solid var(--border-mid);
  background: var(--surface-2); color: var(--ink);
  transition: border-color .15s, box-shadow .15s;

  &:focus {
    outline: none;
    border-color: var(--color-primary-900);
    box-shadow: 0 0 0 3px var(--accent-dim);
  }
  &.ds-input--error { border-color: var(--color-danger-600); }
  &:disabled { opacity: .4; cursor: not-allowed; }
}
Comments & change requests1 comment
NK
Nandi K.3d agoIn review· Figma
Textarea variant isn't in Figma yet. Using .ds-input on a <textarea> but resize handle isn't spec'd. Can we add a multiline property?
LM
Select / Dropdown
<ds-select> · .ds-select · CVA compatible
Figma Token Studio Style Dict Angular Storybook
5/5 ready
Figma
✓ Ready
Closed + open states
Token Studio
✓ Ready
Tokens exported
Style Dict
✓ Ready
CSS vars generated
Angular
✓ Ready
v1.3.0 stable
Storybook
✓ Ready
4 stories live
Pipeline completion5/5
Figma
Angular
Ready — Closed + open states, placeholder, disabled, error, and option hover all designed.
Default
Selected
Disabled
Ready — v1.3.0 · Implements ControlValueAccessor for Reactive Forms.
usage.html
HTML
<ds-select
  label="Country"
  placeholder="Select a country…"
  [options]="countryOptions"
  [formControl]="countryCtrl"
/>

<!-- options: Array<{ label: string; value: string }> -->
Badge / Chip
<ds-badge> · .ds-badge · Status + count variants
Figma Token Studio Style Dict Angular Storybook
4/5 ready
Figma
✓ Ready
5 status variants
Token Studio
✓ Ready
Tokens exported
Style Dict
✓ Ready
CSS vars generated
Angular
⚠ In review
v0.9.0-beta
Storybook
✕ Not started
Backlog sprint 8
Pipeline completion4/5
Mostly ready — Angular component in beta review. Storybook not started. Safe to use with class names; avoid <ds-badge> in production until v1.0 ships.
Figma
Angular
Ready — 5 status variants, dot indicator, and count variants all designed.
Status Active Pending Error Info Draft
Count 4 New v1.2.0
Beta — v0.9.0 — API may change before v1.0. Use with caution in production.
usage — class names (stable)
HTML
<!-- Stable: class-name approach using generated CSS vars -->
<span class="ds-badge ds-badge--success">Active</span>
<span class="ds-badge ds-badge--warning">Pending</span>
<span class="ds-badge ds-badge--danger">Error</span>
<span class="ds-badge ds-badge--info">Info</span>
<span class="ds-badge">Neutral</span>
Comments & change requests1 comment
JD
Jana D.1d agoChange request· Style Dictionary
Warning variant uses --color-warning-500 in beta but Figma shows color/warning/600. Needs correction to stay consistent.
LM
Card
<ds-card> · .ds-card · Default / Elevated / Outlined
Figma Token Studio Style Dict Angular Storybook
4/5 ready
Figma
✓ Ready
3 variants designed
Token Studio
✓ Ready
Tokens exported
Style Dict
✓ Ready
CSS vars ready
Angular
✓ Ready
v1.2.0 stable
Storybook
⚠ In review
PR #51 open
Pipeline completion4/5
Figma
Angular
Mostly ready — Safe to use. Storybook PR #51 in review, expected to merge this sprint.
Default Card
Used for content grouping with a subtle surface treatment.
Elevated Card
Used for featured content that needs visual hierarchy.
Ready — v1.2.0 · variant input accepts 'default' | 'elevated' | 'outlined'
usage.html
HTML
<ds-card variant="elevated">
  <ds-card-header>Card title</ds-card-header>
  <ds-card-body>Content goes here</ds-card-body>
  <ds-card-footer>
    <ds-button variant="primary" size="sm">Action</ds-button>
  </ds-card-footer>
</ds-card>
Modal / Dialog
<ds-modal> · Angular CDK overlay
Figma Token Studio Style Dict Angular Storybook
3/5 ready
Figma
✓ Ready
3 sizes, overlay
Token Studio
✓ Ready
Tokens exported
Style Dict
⚠ In review
PR #58 open
Angular
✕ Not started
Blocked by Style Dict
Storybook
✕ Not started
Blocked upstream
Pipeline completion3/5
Figma
Angular plan
Alert / Toast
<ds-alert> · <ds-toast> · success/warning/error/info
Figma Token Studio Style Dict Angular Storybook
3/5 ready
Figma
✓ Ready
4 states designed
Token Studio
✓ Ready
Tokens exported
Style Dict
✓ Ready
CSS vars ready
Angular
✕ Not started
Sprint 9 planned
Storybook
✕ Not started
Blocked upstream
Pipeline completion3/5
Figma
Partially ready — Figma, Token Studio, and Style Dictionary complete. Angular component planned for Sprint 9.
Changes saved Your project settings have been updated.
Account expiring Your trial ends in 3 days. Upgrade to continue.
Failed to save Please check your connection and try again.
Maintenance scheduled The platform will be offline from 02:00–04:00 SAST.
Checkbox / Radio / Toggle
<ds-checkbox> · <ds-radio> · <ds-toggle>
Figma Token Studio Style Dict Angular Storybook
2/5 ready
Figma
✓ Ready
All 3 controls designed
Token Studio
✓ Ready
Tokens exported
Style Dict
✕ Not started
Backlog sprint 9
Angular
✕ Not started
Blocked upstream
Storybook
✕ Not started
Blocked upstream
Pipeline completion2/5
Figma
Design only — Do not use in any codebase. Only Figma and Token Studio stages complete. Not safe for production.
Checkbox
Checked
Unchecked
Disabled
Radio
Selected
Unselected
Toggle
On
Off
Avatar
<ds-avatar> · <ds-avatar-group> · Image + initials
Figma Token Studio Style Dict Angular Storybook
2/5 ready
Figma
✓ Ready
sm/md/lg + group
Token Studio
✓ Ready
Size tokens exported
Style Dict
✕ Not started
Sprint 9 backlog
Angular
✕ Not started
Blocked upstream
Storybook
✕ Not started
Blocked upstream
Pipeline completion2/5
Figma
Design only — Do not use in codebase yet.
Sizes
LM
TM
SR
Group
LM
TM
NK
+4
Data Table
<ds-table> · .ds-table · Sortable / Paginated
Figma Token Studio Style Dict Angular Storybook
Not started
Figma
✕ Not started
Token Studio
✕ Not started
Style Dict
✕ Not started
Angular
✕ Not started
Storybook
✕ Not started
Pipeline completion0/5
Not started — No pipeline stage has been started. Do not use anything for Data Table — no tokens, no styles, no component exists yet.
What will be built
NameStatusRoleLast active
Lulamile M.ActiveSenior DesignerJust now
Thabo M.ActiveFrontend Dev2h ago
Nandi K.AwayProduct Manager1d ago
Sipho R.InactiveQA Engineer3d ago
Sortable columnsRow selectionPaginationColumn resizeEmpty stateLoading skeleton
Comments & change requests1 comment
PW
Palesa W.1w agoChange request
Reporting dashboard urgently needs a data table. Currently using bespoke <table> with inline styles that matches nothing in the system. Can we prioritise Sprint 8?
LM
Tabs
<ds-tabs> · <ds-tab> · Horizontal / Vertical / Pill
Figma Token Studio Style Dict Angular Storybook
Not started
Figma
✕ Not started
Token Studio
✕ Not started
Style Dict
✕ Not started
Angular
✕ Not started
Storybook
✕ Not started
Pipeline completion0/5
Not started — Do not use anything for Tabs yet. Planned for Sprint 10.
Design target
Overview
Analytics
Settings
Members
Tab panel content area — this is what will be built.