Skip to content
Islam AlsoultanBack to home

Case study · Design system · 2026

Aajil Design System: one language across products, scripts and themes

I led a team of three to build Aajil’s design system from zero in one month: one visual language for every product, designed Arabic first, in light and dark.

My role
Design lead
Timeline
1 month (Jan to Feb 2026)
Team
3
Used by
Every Aajil product

From the Aajil Figma library

287 tokens2 scripts2 themes40+ components

The system composed from the Figma library: a credit request in the stepper, a credit table, a verification modal, a dropdown, alerts, badges and the button colors. Switch the language and the theme under the chapters.
Chapters
  1. Why Aajil needed a system
  2. A month, three people
  3. Principles
  4. Foundations
  5. Tokens
  6. Shaped for financing
  7. The component library
  8. How the teams use it
  9. Learnings

Evidence

1 month

From no shared system to one that every Aajil product uses.

287

Tokens in two layers: 153 raw values, 134 named by role.

2 × 2

Every component in Arabic and English, each in light and dark.

Why Aajil needed a system

Every product spoke its own dialect.

The cost of designing as you go

Aajil finances construction businesses in Saudi Arabia. At the time it ran a website, a web app, a mobile app and internal dashboards, each designed when it was needed, by whoever was free. Nothing tied them together: buttons, spacing and colors drifted from one product to the next, and every new feature reopened the same question: which version is right?

Arabic first, twice the work

We designed Arabic screens on their own, never as a mirror of the English. That is right for Saudi businesses, and costly without shared parts: every screen existed twice, kept in step by hand.

The goal

One visual language across every product, and a base for every feature and experiment after it. The rebrand from Buildnow to Aajil strengthened the case. Consistency was the reason.

Earlier at Aajil, I had redesigned the website in one week.

A month, three people

Speed came from clear ownership, not shortcuts.

Who owned what

Zayed, our art director and Aajil’s creative lead, set the graphic foundations: color direction, gradients and visual patterns. Our graphic designer owned illustrations and icons. I led the system itself: principles, tokens, components and the handover to engineering.

Speak the engineers’ language

Engineering was moving to a new front end, so the system speaks its language: text-sm, shadow-md and rounded-lg mean the same in Figma and in code, and the handover needs no glossary.

AI for the documentation, me for the decisions

I used AI for documentation, mostly for the tokens, and reviewed and decided every value myself. The components are not generated: they come from the UI components and patterns already used across Aajil products.

Principles

Four rules behind every decision.

  1. Arabic is not a translation

    Each script is set on its own terms, with its own type roles and taller Arabic line heights.

    Typography tokens exist twice: one set for English, one for Arabic.

  2. Name by role, not by value

    Components ask for a job, like the brand background, never a hex code. A theme only changes what sits underneath.

    bg-brand is yellow 400 in light and yellow 300 in dark; no component changes.

  3. One vocabulary for design and code

    Tokens use the same names as the code, so a handover is a lookup, not a translation.

    text-sm, shadow-md and rounded-lg mean the same thing in Figma and in code.

  4. Calm where money moves

    The components a business uses to verify, apply and pay get the most states and the most care.

    The code field alone has 28 variants: four sizes, seven states.

Foundations

Color, type, space and icons: the parts everything else is made of.

Color

A confident yellow on true neutrals. The brand scale runs from 50 to 950 with 400 as the brand color; the neutrals carry no tint, so the yellow always leads. Green, orange and red are kept for status.

Rebuilt in code from the Aajil tokens

A preview of Aajil’s colors: the key roles for the current theme, then the scales. The Figma file holds the full set.

Type

IBM Plex Sans and IBM Plex Sans Arabic are one family, so both scripts share a weight and a voice. Each has its own scale of nine roles, from display to caption, and Arabic gets taller line heights so its marks never collide.

Rebuilt in code from the Aajil tokens

The same roles in each script, in the current theme. Switch to Arabic to see its own, taller line heights.

Space and shape

Spacing steps by four pixels, from 4 to 96. Corners, borders and shadows each have a short scale, so a card, a field and a modal clearly belong together.

Rebuilt in code from the Aajil tokens

Spacing on a 4-pixel base, with the radius scale, in the current theme.

Icons

Two styles on one 24 px grid: bold for emphasis and outline for quiet interface. The library holds more than 18,000 icons in 57 categories, so the set mixes common interface icons (search, settings, lock, calendar, share) with ones for the product itself: credit cards, accounts, wallets, invoices, shipments and property.

From the Aajil icon library

The Aajil icon library as a reference sheet: six of its 57 categories, each icon in bold and outline, in the standard black and white.

Tokens

Two layers, so a theme is a switch, not a second design.

The first layer holds raw values: yellow 400, black 900, 16 pixels. The second names them by job: the brand background, the default text, the subtle border. Components only use the second layer. Dark mode is the same names pointing at different values (38 of the 44 semantic colors point at a different raw value in dark); Arabic is the same names with its own type scale.

A name reads from the general to the specific: color.background.bg-brand-hover is a color, for backgrounds, in the brand family, in its hover state. Each token keeps the name it has in the Figma file, where the variables panel shows a role per row, a value for each mode, each pointing at a raw value. The Primitives collection holds 153 variables and the Semantic one 134.

The variables panel of the Aajil Figma file

The variables panel of the Aajil Figma file: the Semantic collection, its groups, and the background roles in light and dark. A few rows are shown.

The same tokens as code

Each token keeps its name, its type and its description when it leaves Figma. A role points at a raw value, and dark mode is one extra line on the same token: the component never changes.

Rebuilt in code from the Aajil tokens

Three roles and the raw values they point at, in the W3C design-token format. Dark mode is an extension on the same token.

Shaped for financing

Where generic components became Aajil’s: verifying a business, applying for credit, reading the numbers.

A stepper is common. A credit application in Arabic is not. These are the parts we shaped around Aajil’s work.

Verify

Every session that touches money starts with a one-time code. The code field comes in four sizes and seven states, from empty to error, for six- or nine-digit codes, grouped or apart. Each product picks the one that fits its screen.

From the Aajil Figma library

The code field and its seven states, from the Figma library.

Apply in steps

A credit request is long, so the stepper names each step and shows what’s done, what’s next and what needs fixing. Seven styles, from a compact line to full cards, cover the website, the apps and the dashboards. In Arabic, progress runs right to left.

From the Aajil Figma library

Two of the seven stepper styles, from the Figma library.

Read the numbers

Finance teams live in tables. Ours put the riyal beside every amount, give every status a word as well as a color, and keep search, filters and the main action in one row above the data.

From the Aajil Figma library

A credit table from the Figma library: riyal amounts, worded statuses, search, filters and paging. Sample data.

The component library

About forty families, every one in Arabic and English.

Actions, forms, navigation, feedback, data and overlays: what a product needs, built twice, once per language, and themed through tokens. The button is the deepest: eight colors, five sizes, four states, with or without icons, 440 variants per language. A product team picks a color and a size; the system handles the rest.

Other components

Actions Button groups in nine layouts; badges in seven themes, two sizes and five types, with a dot, an avatar or a loader.

Forms Text fields in seven layouts; selects in seven; code fields in four; and upload, search, phone, number, date and time fields, toggles, checkboxes and sliders.

Navigation Tabs in seven types, each with a mobile version; breadcrumbs in six types; navbars, sidebars, mobile menus, pagination and the stepper.

Feedback Alerts in four types and five colors; progress bars in six colors; toasts in nine types; banners, spinners and skeletons.

Data Tables with sortable columns, riyal amounts, status badges, search, filters and paging; cards in nine types; lists, timelines and ratings.

Overlays Modals in eleven types; dropdown menus in sixteen; popovers; tooltips in four positions; drawers and speed dials.

From the Aajil Figma library

Buttons, fields, navigation, data, feedback and overlays composed from the Figma library; the first board covers inputs, actions and navigation.

From the Aajil Figma library

Data, feedback and overlays: a card, a credit table, a verification modal, a dropdown, an alert, a toast, a progress bar and a tooltip, from the Figma library.

How the teams use it

A system only counts when people use it.

The system lives in a Figma team library, so any designer can pull it into any file, and engineering builds from the same names. Every Aajil product now uses it: the website, the web app, the mobile app and the dashboards.

A change starts with a token. Adjust the brand yellow once, and it reaches every component in the library and every screen built from it.

  1. Figma libraryComponents and tokens
  2. TokensNamed by role
  3. CodeSame names in code
  4. Every productWeb, app, dashboards
How one change travels to every product.

Learnings

Reflections, takeaways, and what I’d do differently.

What did I learn?

A design system is mostly a set of decisions about where to be different. One month was enough because we spent it on what makes Aajil, Aajil: Arabic on its own terms, the money moments and the brand.

What went well?

Clear ownership let three people move in parallel. The best evidence is adoption: every product uses the system, and new features start from it.

Naming colors by role paid off in dark mode: 38 of the 44 semantic colors point at a different raw value there, and no component had to change.

What could be improved?

Three text colors in the Figma file fall short of WCAG AA’s 4.5:1 on white: brand yellow text (2.7:1), success green (3.2:1) and muted gray (2.2:1). This page already draws them one step darker (yellow 700 at 4.6:1, green 700 at 5.0:1, gray 500 at 5.2:1, with subtle gray moved to 600 to keep the order); I’d move the library to the same steps. And I’d measure adoption from the first week.

Need one language across your products?

If your products look different in every corner, or Arabic always comes second, I’d like to hear about it.

Image