Turning a fragmented design system into a single source of truth

This is an product at PT Praisindo Teknologi — a fintech company building an investment management platform for retail and institutional users. I define a new token architecture, rebuild component libraries with proper states and variants, introduce block-level patterns for complex UI, and reorganize the Figma file structure — all while the product continued shipping features.

Role

Product Designer

Duration

Ongoing

Investment Management System
01

Context

Before — the pain
  • Colors & spacing hardcoded per screen, no central tokens
  • Components duplicated 3–5× across different pages
  • No naming convention, layers mostly unnamed
  • Complex UI built as flat groups, not reusable components
  • No states (hover, disabled, error) on interactive components
  • Dev handoff was inconsistent and slowed sprint velocity
After — the new foundation
  • Primitive → Semantic → Component token hierarchy
  • Single source of truth — one component, one place
  • Consistent BEM-style naming across all layers
  • Complex UI rebuilt as block components with clear anatomy
  • All interactive components have complete state coverage
  • Dev-ready specs with token references, not hardcoded values
80+
tokens defined
30+
components rebuilt
12
block patterns
1×
source of truth
02

Token Architecture

Layer 1: Primitives (Values)
--n-000: #FFFFFF
--n-900: #131313
--p-500: #32FC9C
--radius-md: 8px
--spacing-4: 16px
Layer 2: Semantics (Roles)
--bg-neutral-weakest: var(--n-900)
--bg-neutral-default: var(--n-800)
--bg-primary-weakest: var(--p-100)
--fg-neutral-default: var(--n-100)
--border-neutral-weak: var(--n-700)

The old system had no token layer — everything was hardcoded. The new architecture follows a streamlined two-layer system: Primitives as the base palette defined in :root, and Semantics that alias the primitives based on their roles. By directly applying Semantics to components (e.g., .card { background: var(--bg-neutral-default); }) rather than relying on a third 'Component' layer, we enforce a clean 'Single Source of Truth' that makes theming and maintenance incredibly simple.

03

Components

When building this component library, I audited the previous, non-tokenized design system. I evaluated the legacy components to identify opportunities for improvement and meticulously renewed them using our new strict variable architecture.

To ensure industry best practices, I also researched established, token-driven systems like the Material UI Kit and others. This informed both our component structure and foundational layout strategies (though full layout documentation is an ongoing case study of its own and not completely pictured here).

Note: Due to strict NDA restrictions, I am only able to display a small, sanitized subset of the full component library below. Any additional proprietary components cannot be put here.

Alongside the interactive UI components, I also carefully designed a custom, cohesive icon set specifically tailored for this system to ensure consistent stroke weights, sizing, and brand alignment:

Icon 1
Icon 2
Icon 3
Icon 4
Icon 5
Icon 6
Icon 7
Icon 8
Icon 9
Icon 10
Icon 11
Button (Brand Blue) Rebuilt
Primary Brand Button Secondary Brand Button Tertiary Brand Button
5 colors (Brand, Success, Alert, Danger, Ghost) • 3 variants (Primary, Secondary, Tertiary) • 3 sizes (Large, Medium, Small) • 4 states (Default, Hover, Pressed, Disabled)
Input field Improved
6 states · label + helper text + icon variants
Data table block New block
Asset classAlloc.Return
Equity ████████ 45% +8.2%
Fixed ██████████ 30% +2.1%
Cash ████████ 25% −0.4%
Data blurred per NDA — structure & component visible
Summary metric block New block
Total AUM
Active portfolios
YTD return
Risk level
Values masked per NDA — layout & anatomy visible
04

Mockup Preview

What you're looking at These are real screens from the investment management system, shown with sensitive financial data masked to comply with NDA. The layout structure, component usage, hierarchy, and design decisions remain fully visible.

Data masked · UI structure visible · NDA compliant

The screens below demonstrate the new design system applied in production — how the token system, rebuilt components, and block patterns come together across dashboard, portfolio detail, and transaction flow.

Dashboard Mockup
Portfolio Detail Mockup
Transaction Flow Mockup
05

File Structure

Before — organic chaos
📁 Design System
└── Components
└── Logo
└── Images
└── Typography
└── Color
└── Icons
📁 Modul Design File
└── Page 1
└── Trash
After — intentional structure
📁 Design System
└── 🎨 01 · Tokens
└── 🔤 02 · Foundations
└── ⚙️ 03 · Components
└── 📋 05 · Layouts
📁 Master File
📁 Duplicated Artboard
└── 🖥️ Modul Name
└── 🔄 Flows
06

Outcome

Handoff speed to dev team
~3× faster
Component inconsistencies
Fully eliminated
Token coverage across system
100%
Components with full state coverage
30 components