Vas
Vas

Creating a design system from scratch

A good component library and design system are fundamental to improve speed of execution allow teams to iterate through ideas and hypotheses much faster compared to the classic workflow where UX and UI are separate.

The first requirement upon joining Rosetta.ai was to create a component library / design system to allow for easier prototyping in design.

A good component library and design system are fundamental to improve speed of execution and allow teams to iterate through ideas and hypotheses much faster compared to the classic workflow where UX and UI are separate.

UX designers can now build up wireframes with existing components while UI designers only work on maintaining the system and managing handover with developers.

A view of a workflow with and without a design system

The first step is to take an existing base library whose look and feel is closer to our brand.
The development team has been using ChakraUI in development so we took that as a base and started building on top.

A quick view of chakra components

You may ask, why not just use ChakraUI then? Well, those libraries are extensive and decently thorough but they are also fixed and harder to personalise down the line. While the styling of the components can be changed it requires work on top of these components which will create bloated code and will likely decrease productivity, therefore going against one of the main principles of building a design system: speed of execution.

Open source component libraries are a good resource to use for prototypes or MVPs but once you start building your app, having your own custom components, tailored to your brand, tailored to your use cases and functionalities is fundamental.

Using Atomic Design Principles

First thing to do when creating a design system is to create principles for categorising all the components.
Even if we only have 30 components, if they are nor organised properly it is very easy to get lost or create duplicates.

The best way to organise a component library based on my experience is to use Atomic Design principles by Brad Frost:

A graphic of how an atomic design system works

The main principle is to divide the components hierarchically, starting from Atoms, to Molecules, to Organisms, to Templates and end up with full Pages.

I have taken a few ChakraUI components and the base html fields needed for a good component library and got to work.

The structure

The structure of the design system

Foundations

The foundations include all of the base elements that each component and atom is going to be made of, these include:

Colours

Includes all the colours that can be used within the system and is sub-divided into four categories:

  • Base colours, which are the black and white shades and tints adjusted to the main brand colour.

  • Brand colours, which are the main brand colour accents, with shades, tints, muted versions and gradient variations.

  • System colours, which are the base green (success), orange (warning), blue (information) and red (errors).

  • Graph colours, which are variations of all possible colours that can be used within graphs, adjusted to fit well with the main brand colours.

Typography

Includes all possible text use cases from headings, to links, to single line text, to paragraphs.

Layout Primitives

Which are the base foundation of all containers, boxes, cards and layouts.
These are subdivided into different elevations and different background colours.

Grids

Includes all the grid layouts for every single screen (large desktop, desktop, tablet, mobile and more)

The foundations of the Design System

Atoms

These are the building blocks of all interface components and include base HTML elements such as labels, checkboxes, radio buttons, inputs and more.

A view of the Atoms

Molecules

These are components made of two or more atoms, that usually have a specific function. Like a search input with a label, search icon and different states.

Organisms

More complex components that incorporate two or more molecules and can serve more than one specific function. An example of an organism is a header section.

A view of the Organisms

Templates and Pages

These are the final components built with multiple organisms, templates are similar to bare bone pages layouts without imagery and content. Whilst pages are the complete interface design.

The result

A component library of 40+ fundamental components which led to increased speed of ideation for the design team and increased speed of execution for the development team.
All while maintaining and promoting brand consistency across the platform.

Send Vas a reply about this page
More from Vas
Back to profile