Project

Mobily

Role

Design System Lead

Focus

Design Systems, Figma, RTL/LTR

Team

1 UX Designer, 1 Product Owner, 2 Engineers

Building a Scalable Bilingual System

Most design systems are built for one language. Mobily needed one that works for two — simultaneously, at every level. Built as a consultant and sole owner, from tokens to flows: covering App and Desktop, with LTR and RTL support.

Mobily design system overview showing app and desktop with LTR and RTL support
Token

Colour

The first decision was separation. Hardcoding colour values directly into components makes theming, dark mode, and brand updates brittle. By separating primitives from semantic tokens, every colour decision becomes traceable and swappable. 15 product brand colours, full neutral and primary scale, WCAG contrast ratios built in.

Colour system showing primitive and semantic token separation
Token

Typography

Arabic and Latin aren't just different scripts — they have different optical sizes, stroke weights, and rhythm. The decision was to pair Montserrat with Almarai — one typeface per script — and build a shared scale so switching language preserves hierarchy. 24 text styles, one system.

Typography system showing Montserrat and Almarai paired across a shared type scale
Token

Spacing

Arbitrary spacing creates invisible inconsistency. A strict 4pt base scale gives every spatial relationship a common rhythm. Each token is documented at true size. Designers read intent at a glance, engineers verify without converting units.

Spacing scale built on a 4pt base with tokens documented at true size
Design Principle

Visual Equivalence

Every fixed or flexible decision comes back to one question: does this component need to feel the same visual weight across languages, or does it need to fit its content? Components that anchor layout rhythm carry fixed heights. Components whose value lives in their content breathe vertically.

“The shell is always consistent. The decision is whether the content inside needs room to breathe.”

Components

Buttons

Buttons are the clearest application of visual equivalence. Fixed height is enforced across all 4 sizes and 3 emphasis levels, with the type scale handling legibility within that constraint.

Button component system showing 4 sizes and 3 emphasis levels with fixed heights
Components

Complex Components

Inputs and headers carry fixed heights. Cards and content blocks are flexible. The shell is always consistent; the decision is whether the content inside needs room to breathe.

Complex components showing fixed-height inputs and headers alongside flexible cards
Language Switching

One System, Two Directions

Simple components use dual text nodes and a Language mode switch. Complex layouts use separate LTR and RTL variants because they genuinely mirror rather than just swap text. Developers handle the rest with a single CSS direction: rtl at the page level.

Side-by-side LTR and RTL layouts showing the language switching system
Engineering Handoff

Flows

End-to-end user flows document complete functionality — states, interactions, edge cases. Engineers get everything they need to build without ambiguity: not just what the UI looks like, but a complete map of how it behaves.

End-to-end user flow documentation showing states, interactions, and edge cases

Next Project

From Transaction to Conversation

View case study