< Back

OVERVIEW

ESV Design System : From a loose component library to a versioned foundation → 40% fewer UI inconsistencies across four modules

Design System
B2B SaaS
Scalable UI
Accessibility

EatSafeVerified is a food safety platform used daily by lab technicians and compliance teams to process, review, and validate test results. The work is dense, repetitive, and high‑stakes. Small UI inconsistencies don’t just slow teams down - they introduce doubt.

When I joined, the product had grown quickly. Features were shipping, but the interface was fragmenting. Components were copied and tweaked in isolation. Visual decisions were made locally, not systemically. The UI worked, but it didn’t feel like a single product.

This case study is about how I designed and shipped ESV’s first design system

Role

Lead Product Designer

Timeline

~6 months | Apr - Oct 2022

Team

Designers - Sanjay Thinagar, Abhay Sharma, James Jacob, Suhasini Nadig, Prashanth Bonela, Itisha Srivatsava

3 Engineers, 1 PM

< Back

ESV Design System - Building a unified foundation for food safety software

When I joined ESV, the product had grown quickly. Features were shipping, but the interface was fragmenting. Components were copied and tweaked in isolation. Visual decisions were made locally, not systemically. The UI worked, but it didn’t feel like a single product.

This case study is about how I designed and shipped ESV’s first design system

Role

Lead Product Designer

Timeline

6 months | Apr - Oct 2022

Team

Designers -Sanjay Thinagar, Abhay Sharma, James Jacob, Suhasini Nadig, Prashanth Bonela, Itisha Srivatsava

3 engineers, 1 PM

WHY?

Why build a design system?

EatSafeVerified is a B2B food safety platform used by suppliers, manufacturers, and compliance teams to track pathogen testing, manage workflows, and generate regulatory reports.

When I joined ESV, the product was growing quickly. But the interface was struggling to keep up.

ESV prioritised shipping fast. But as the product expanded into dashboards, analytics, and compliance reporting, inconsistencies quickly multiplied. Several button styles. Spacing all over the place. Seven different blues with no correlation.

The interface worked, but it didn't feel like one consistent product. Engineers reinvented components for each feature. Design reviews had constant debates on colour and spacing inconsistencies instead of user flows . But mainly, the inconsistencies were making the product feel less trustworthy than it actually was.

Papering over the cracks was no longer sustainable. It was high time ESV needed a proper foundation.

PRINCIPLES

4 constraints to guide the process

Before building anything, our team established four principles - practical constraints based on ESV's specific context. They guided every foundation and component that followed.

Clarity above all

Clarity and confidence was key. Every element should have an obvious function, no room for ambiguity.

Flexible, but with constraints

Strict enough to maintain consistency, but flexible enough to handle edge cases without breaking.

Density with breathing room

Users scan lots of data. Must be compact enough for efficiency, but not so tight they become exhausting to read.

Accessibility

Interface had to be clear and readable at all times

FOUNDATIONS

Building up from the fundamentals

We started by establishing the fundamentals: a spacing scale, type system, and colour palette.

-> Spacing

We tested different grids against real ESV layouts.

4px was flexible enough to cover dense tables as well as spaced out cards. We intentionally avoided multiple density modes early on to prevent fragmentation during adoption.

-> Typography

Inter. Five sizes, three weights. An important decision was 14 / 20 for table cells. Dense, with enough line height to stay readable across 30+ row tables.

-> Colour

TOKENS

Decision → System

Every value in the system has a semantic name describing its purpose. So when an engineer sees colour-primary-600, they know it's for primary interactive elements.

color-primary-600

Button backgrounds

color-error-600

Destructive actions

space-16

16px

Component padding

type-body-20

14/20

Table Cells, UI Text

radius-md

8px

Buttons, Inputs, Cards

When we updated the primary brand colour six months later, it was one token change across the entire product. No hassle.

We organised the token structure into three levels: Primitive (raw values), Semantic (purpose-based), and Component (specific to UI elements). This hierarchy makes it clear when to use which token.

COMPONENTS

Building blocks

We audited 15 core screens, cataloged every UI element, and ranked them by frequency and cognitive load. The goal was to build the 20% of components that would solve 80% of the interface.

Three categories emerged as priority #1: buttons, form inputs, and tables.

Everything else comes later.

-> component Hierarchy

Every component references the spacing scale, type system, and colour tokens established earlier. Changing a foundation value updates components automatically.

-> Buttons

We reduced buttons to four variants with explicit hierarchy rules.

Use case

Main Action

Rule

One per view

Use case

Alternate Actions

Rule

Lower visual weight

Use case

Dismissive, Tertiary

Rule

Cancel, Close, Back

Use case

Destructive

Rule

Delete, Remove

Button Anatomy

Padding

12px vertical / 24 px horixontal

Label

14 / 600

Radius

8px

Wrapper

44px x Auto

Icon Slots

16 x 16

-> Forms

Forms are an important part of ESV - entering sample IDs, selecting test types, specifying batch numbers. We treated forms as a system, not a collection of isolated inputs.

The 8px label-to-input gap creates visual association. The 20px field-to-field gap creates clear boundaries, to reduce cognitive load during long sessions.

Horizontal padding

16px

Border

1px . neutral-200

Label text

12px/600 . neutral-500

Input text

14px/500 . neutral-900

-> Tables

First column is the primary identifier, emphasised with darker, bolder text. Secondary columns use muted colour. 48px spaced rows to balance density and readability.

Semantic badges with dot identifiers make results quickly scannable: green means safe, red means action required. No one has to read the word "Out of Spec" to know there's a problem.

Badge colours use the same semantic tokens as the rest of the system, background at 12% opacity, text at full value. This ensures badges remain readable against any surface.

-> More components

With the core established, we designed more components to support the system. Each element follows the same architecture and principles established in the foundations.