Building and Scaling a Design System in Figma

Focusing on Color and Typography Tokens and Components

Role

Design system Designer

Project Type

Self-Initiated Project

Team

1 Design system Designer

1 Software Engineer

1 Design system Designer

1 Software Engineer

Duration

5 weeks

Are you interested to know my skills on building a design system?

Are you interested to know my skills on building a design system?

Objective

Objective

This project was created to explore how to build a design system from scratch and to understand the reasoning behind each decision. I included it in my portfolio to reflect my interest in design systems and systems thinking, with a strong focus on building a design system that is both designer- and developer-friendly.

File management

I created a separate project in Figma to organize the design system. This made the structure more focused and allowed for better control of documentation, tokens, and components.

Foundation

Since this design system was made for a concept project, I focused on foundational design elements like: View in Figma.

Colors

Typography

Design Token Strategy

As part of building a scalable and maintainable design system, I established a naming convention for design tokens that works across different themes, components, and use cases. This convention was debated and refined in collaboration with a developer and another designer to ensure its effectiveness.

❌ What Didn’t Work: Component-Based Token Naming

At first, I experimented with component-based token naming alongside semantic general tokens. I implemented them, but it didn’t feel right. This structure made the system rigid, noisy, and hard to maintain. Problems I faced:

Repetition: Tokens were duplicated across components.

Scalability: As I added more components and states, the token list became overwhelming.

Poor reusability: Tokens were too tightly coupled to component names, making them less flexible.

✅ Transition to Semantic Token Naming

To solve this, I moved toward a semantic naming system, separating what a token is from where it’s used.

I removed component names from tokens and instead organized them by intent and interaction, resulting in a scalable and abstract structure.

Color Tokens

1. Primitive Tokens

Raw, brand-agnostic values — not tied to any component or usage context. Examples:

colors/neutral/neutral100

colors/red/red500

colors/blue/blue600

colors/green/green200

Naming Format: {category}/ {name}/ {nameX}

Generating Tints and Shades

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

2. Semantic Tokens

These describe the role or meaning of a design decision. I grouped color tokens into the following categories:

colors/surface/*

static background areas (e.g. pages, cards)

colors/border/*

borders and outlines with no interaction

colors/content/*

icons and text colors


Naming Format: {category}/ {property}/ {concept}/ {variant}-{state}-{tone}

3. Color Document

I created a complete, categorized color token document to help designers quickly find and apply the right token. It’s structured by property (surface, border, content) and concept (neutral, system, brand) for clarity and consistency.

Typography Tokens

Technically, we could separate typography tokens into primitive and semantic layers, just like we do with colors. But in this project, I assumed typography styles would remain the same over time. That’s why I chose not to separate them and placed them directly in the typography collection to avoid repeating values unnecessarily. View in Figma.

typography/display/*

typography/headline/*

typography/label/*

typography/body/*

Naming Format: {category}/ {concept}/ {size}/ {property}

Typography Document

I created a comprehensive typography token system and defined corresponding text styles, making it easy for both developers and designers to use them consistently in their work.

Icons

All icons were created as 24px components. I followed a naming convention that starts with icon/ to keep them grouped and easily searchable in Figma. View in Figma.

Components

Each component uses auto layout and variants, with consistent naming for scalability. View in Figma.

Button

Radio Button

Checkbox

Toggle

Text Field

Select Field

Date Picker

Text Area

Form Field

Form Complex

Calendar

Tag

Chips

Tooltip

Slider

Row

Table

Message

Button Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

Form Field Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

Adoption Process

This design system is structured in a way that allows designers to adopt and scale UI patterns with clarity and ease. It's fully maintained in a dedicated Figma project.

Accessing the Library

Go to the Assets panel in Figma

Click "Team Libraries" and enable the relevant components and styles.

All tokens, components, and icons will then be available to use directly in your own design files.

How to Use It

Use components from the Components file directly—do not detach unless absolutely necessary.

Reference design tokens from Foundation.

Swap or search icons from the Icons file based on naming convention.

Contribution Process

The design system is open to improvements and new additions. Here’s how to contribute:

1. Identify a Need

Missing components or noticeable gaps.

Enhancements or bug reports for existing components.

A new need that isn’t solved by current components.

Reusable components that could benefit others and yourself.

2. Submit a Proposal

The use case and reasoning.

Optional mockups or examples.

Accessibility considerations.

Submit it via Figma comments or a shared feedback channel.

3. Review and Integration

The maintainer reviews your suggestion.

You’ll collaborate to refine it (if needed).

Once approved, the change is added to the system.

4. Versioning

All updates follow a simple changelog inside the Figma file.

Breaking changes include notes & migration tips.

Reflection and Key Learnings

Even Small Notes Make a Difference

I realized that a good design system isn’t just visual. It also needs to be understandable. Clear documentation, even if it's just small, well-placed notes, can make a big difference in helping developers and other designers work with the system efficiently, especially when time is limited.

Design–developer collaboration is key

Working closely with a developer showed me the value of shared language, documentation, and flexibility when bridging design and code.

Other Projects

Enhancing Trust in Private Transactions on Marktplaats

Improving Content Rediscovery on Instagram

Foundation

Since this design system was made for a concept project, I focused on foundational design elements like:

View in Figma.

Colors

Typography

Design Token Strategy

As part of building a scalable and maintainable design system, I established a naming convention for design tokens that works across different themes, components, and use cases. This convention was debated and refined in collaboration with a developer and another designer to ensure its effectiveness.

❌ What Didn’t Work: Component-Based Token Naming

At first, I experimented with component-based token naming alongside semantic general tokens. I implemented them, but it didn’t feel right. This structure made the system rigid, noisy, and hard to maintain. Problems I faced:

Repetition: Tokens were duplicated across components.

Scalability: As I added more components and states, the token list became overwhelming.

Poor reusability: Tokens were too tightly coupled to component names, making them less flexible.

✅ Transition to Semantic Token Naming

At first, I experimented with component-based token naming alongside semantic general tokens. I implemented them, but it didn’t feel right. This structure made the system rigid, noisy, and hard to maintain. Problems I faced:

Color Tokens

Generating Tints and Shades

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

1. Primitive Tokens

Raw, brand-agnostic values — not tied to any component or usage context. Examples:

colors/neutral/neutral100

colors/red/red500

colors/blue/blue600

colors/green/green200

Naming Format: {category}/ {name}/ {nameX}

2. Semantic Tokens

These describe the role or meaning of a design decision. I grouped color tokens into the following categories:

colors/surface/*

static background areas (e.g. pages, cards)

colors/border/*

borders and outlines with no interaction

colors/content/*

icons and text colors


Naming Format: {category}/ {property}/ {concept}/ {variant}-{state}-{tone}

3. Color Document

I created a complete, categorized color token document to help designers quickly find and apply the right token. It’s structured by property (surface, border, content) and concept (neutral, system, brand) for clarity and consistency.

Icons

All icons were created as 24px components with consistent internal layer structure to support seamless swapping. I followed a naming convention that starts with icon/ to keep them grouped and easily searchable in Figma.

Instead of naming icons based on meaning (e.g., search), I used visual descriptors (e.g., magnifier) to reflect their appearance rather than their function. This makes the icon set more neutral, reusable, and easier to find.

Design Token Strategy

As part of building a scalable and maintainable design system, I established a naming convention for design tokens that works across different themes, components, and use cases. This convention was debated and refined in collaboration with a developer and another designer to ensure its effectiveness.

❌ What Didn’t Work: Component-Based Token Naming

At first, I experimented with component-based token naming alongside semantic general tokens. I implemented them, but it didn’t feel right. This structure made the system rigid, noisy, and hard to maintain. Problems I faced:

Repetition: Tokens were duplicated across components.

Scalability: As I added more components and states, the token list became overwhelming.

Poor reusability: Tokens were too tightly coupled to component names, making them less flexible.

✅ Transition to Semantic Token Naming

At first, I experimented with component-based token naming alongside semantic general tokens. I implemented them, but it didn’t feel right. This structure made the system rigid, noisy, and hard to maintain. Problems I faced:

Color Tokens

2. Semantic Tokens

These describe the role or meaning of a design decision. I grouped color tokens into the following categories:

colors/surface/*

static background areas (e.g. pages, cards)

colors/border/*

borders and outlines with no interaction

colors/content/*

icons and text colors

Naming Format:{category}/ {property}/ {concept}/ {variant}-{state}-{tone}

Generating Tints and Shades

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

1. Primitive Tokens

Raw, brand-agnostic values — not tied to any component or usage context. Examples:

colors/neutral/neutral100

colors/red/red500

colors/blue/blue600

colors/green/green200

Naming Format: {category}/ {name}/ {nameX}

3. Color Document

I created a complete, categorized color token document to help designers quickly find and apply the right token. It’s structured by property (surface, border, content) and concept (neutral, system, brand) for clarity and consistency.

Icons

All icons were created as 24px components. I followed a naming convention that starts with icon/ to keep them grouped and easily searchable in Figma. View the figma file.

Icons

All icons were created as 24px components. I followed a naming convention that starts with icon/ to keep them grouped and easily searchable in Figma. View in Figma.

Components

Each component uses auto layout and variants, with consistent naming for scalability. View in Figma.

Button

Checkbox

Toggle

Tag

Text Area

Chips

Date

Picker

Form

Field

Form

Complex

Select

Field

Radio

Button

Text

Field

Tooltip

Slider

Row

Table

Message

Calendar

Button Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

Form Field Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

Components

Each component uses auto layout and variants, with consistent naming for scalability. View in Figma.

Button

Radio Button

Checkbox

Toggle

Text Field

Select Field

Date Picker

Text Area

Form Field

Form Complex

Calendar

Tooltip

Tag

Chips

Slider

Row

Table

Message

Form Field Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

Button Component

The main colors were selected first, with tints and shades generated via HSB adjustments and validated for accessibility using contrast checks.

File management

I created a separate project in Figma to organize the design system. This made the structure more focused and allowed for better control of documentation, tokens, and components.

Typography Tokens

Technically, we could separate typography tokens into primitive and semantic layers, just like we do with colors. But in this project, I assumed typography styles would remain the same over time. That’s why I chose not to separate them and placed them directly in the typography collection to avoid repeating values unnecessarily. View in Figma.

Typography Document

I created a comprehensive typography token system and defined corresponding text styles, making it easy for both developers and designers to use them consistently in their work.

typography/display/*

typography/headline/*

typography/label/*

typography/body/*

Naming Format: {category}/ {concept}/ {size}/ {property}

Typography Tokens

Technically, we could separate typography tokens into primitive and semantic layers, just like we do with colors. But in this project, I assumed typography styles would remain the same over time. That’s why I chose not to separate them and placed them directly in the typography collection to avoid repeating values unnecessarily. View in Figma.

Typography Document

I created a comprehensive typography token system and defined corresponding text styles, making it easy for both developers and designers to use them consistently in their work.

typography/display

typography/headline

typography/label

typography/body

Naming Format: {category}/ {concept}/ {size}/ {property}

Other Projects

Enhancing Trust in Private Transactions on Marktplaats

Improving Content Rediscovery on Instagram

Improving Content Rediscovery on Instagram

Enhancing Trust in Private Transactions on Marktplaats

Other Projects

Building and Scaling a Design System in Figma

Focusing on Color and Typography Tokens and Components

Project Type: Self-Initiated

Role: Design system Designer

Duration: 5 Weeks

Team: 1 Designer and 1 Engineer

Reflection and Key Learnings

Even Small Notes Make a Difference

I realized that a good design system isn’t just visual. It also needs to be understandable. Clear documentation, even if it's just small, well-placed notes, can make a big difference in helping developers and other designers work with the system efficiently, especially when time is limited.

Design–developer collaboration is key

Working closely with a developer showed me the value of shared language, documentation, and flexibility when bridging design and code.

Adoption Process

This design system is structured in a way that allows designers to adopt and scale UI patterns with clarity and ease. It's fully maintained in a dedicated Figma project.

Accessing the Library

Go to the Assets panel in Figma

Click "Team Libraries" and enable the relevant components and styles.

All tokens, components, and icons will then be available to use directly in your own design files.

All tokens, components, and icons will then be available to use directly in your own design files.

How to Use It

Use components from the Components file directly—do not detach unless absolutely necessary.

Reference design tokens from Foundation.

Reference design tokens from Foundation.

Swap or search icons from the Icons file based on naming convention.

Swap or search icons from the Icons file based on naming convention.

Adoption Process

This design system is structured in a way that allows designers to adopt and scale UI patterns with clarity and ease. It's fully maintained in a dedicated Figma project.

Accessing the Library

Go to the Assets panel in Figma

Click "Team Libraries" and enable the relevant components and styles.

All tokens, components, and icons will then be available to use directly in your own design files.

Use components from the Components file directly—do not detach unless absolutely necessary.

Reference design tokens from Foundation.

Swap or search icons from the Icons file based on naming convention.

How to Use It

Contribution Process

The design system is open to improvements and new additions. Here’s how to contribute:

1. Identify a Need

Missing components or noticeable gaps.

A new need that isn’t solved by current components.

Reusable components that could benefit others and yourself.

Enhancements or bug reports for existing components.

2. Submit a Proposal

The use case and reasoning.

Optional mockups or examples.

Accessibility considerations.

Submit it via Figma comments or a shared feedback channel.

3. Review and Integration

The maintainer reviews your suggestion.

You’ll collaborate to refine it (if needed).

Once approved, the change is added to the system.

4. Versioning

All updates follow a simple changelog inside the Figma file.

Breaking or major changes include notes and migration tips.

Contribution Process

The design system is open to improvements and new additions. Here’s how to contribute:

1. Identify a Need

Missing components or noticeable gaps.

A new need that isn’t solved by current components.

Reusable components that could benefit others and yourself.

Enhancements or bug reports for existing components.

2. Submit a Proposal

The use case and reasoning.

Optional mockups or examples.

Accessibility considerations.

Submit it via Figma comments or a shared feedback channel.

3. Review and Integration

The maintainer reviews your suggestion.

You’ll collaborate to refine it (if needed).

Once approved, the change is added to the system.

4. Versioning

All updates follow a simple changelog inside the Figma file.

Breaking or major changes include notes and migration tips.

Key Learnings

Even Small Notes Make a Difference

I realized that a good design system isn’t just visual. It also needs to be understandable. Clear documentation, even if it's just small, well-placed notes, can make a big difference in helping developers and other designers work with the system efficiently, especially when time is limited.

Design–developer collaboration is key

Working closely with a developer showed me the value of shared language, documentation, and flexibility when bridging design and code.