Get in touch

Case study · MTN Nigeria

Raanaa

One design system for MTN Nigeria's products.

Role
Designer, one of the team
Team
5 designers, 3 developers
Scope
Tokens, components, docs
Years
2023 to now
Ink drawing: a yellow sun rises over a skyline built from interface pieces while the team watches from a rooftop.
20+Products built on itSource: Team count
47Components in codeSource: Coded library
1,000+Figma variablesSource: Figma library
In short
The problem
MTN Nigeria's products grew up separately. Used together, they felt like different companies.
What we built
One design system: three levels of tokens, 47 components matched one to one in Figma and code, docs, and packages any team can install.
My part
One of the designers. I designed components such as Badge, Modal, Input and Table, and matched each one to code with the developers.
The result
More than 20 products built on it. We didn't measure speed or quality at the start, and that's the first thing I'd change.
Chapter 01The problem

Our products looked like they came from different companies.

Two portals, built by the same team: two logos, two sidebars, two button styles and two ways of showing status. For a customer, every product meant relearning the basics.

Customers noticed the inconsistencies across MTN's apps, and internal teams saw them too. People also raised the issue on social media.

So we started with an audit. Each of us took a set of screens and audited them alongside the designers on that product, and we pulled everything together in FigJam. Some differences only showed up when we inspected the values.

A staff portal before Raanaa.
A partner portal before Raanaa.

Two real MTN products from before Raanaa. Names and data blurred.

Four products, one "Buy bundle" button. They look the same until you inspect them, which is what the audit did.

Staff portal
Buy bundle
Yellow
#FFCB05
Radius
pill
Height
44px
Text
16px
Partner portal
Buy bundle
Yellow
#FFCC00
Radius
8px
Height
40px
Text
14px
Self-service app
Buy bundle
Yellow
#F9C600
Radius
8px
Height
36px
Text
15px
Sales tool
Buy bundle
Yellow
#FFC72C
Radius
4px
Height
48px
Text
16px

Four buttons from one company, with four yellows, three radii, four heights and three text sizes.

Recreated from what the audit found: the same button in different MTN yellows, a pill in one product and an 8px radius in another, different heights and text sizes. Product names generalised.

NameTypePriorityWhy
TypographyFoundationsHighA type scale that works on mobile and desktop
ColoursFoundationsHighAn accessible colour system for the brand
SpacingFoundationsHighOne spacing baseline for every design
ButtonsComponentsHighThe most rebuilt piece across products
Inputs, Select, TablesComponentsHighEvery product's forms and lists depend on them
Brand, IllustrationsPrinciplesLowLater, once the base held
And more, from the full audit

The audit sheet. Everything we found went here, ranked so we built the foundations first.

Chapter 02Why it happened

Every handoff re-typed the design by hand.

A designer picked a value in Figma. A developer read it from Figma's inspect panel and typed it into code. Every re-type shifted a value slightly, and across products nothing matched.

So design and code needed the same names, leaving nothing to translate by hand.

Follow one yellow from Figma to the screen, before and after Raanaa.

Before
Figma#FFCB05
Figma inspect#FFCB05
Re-typed in code#FFCC00
ScreenBuy bundle
After
Figmaprimary
Tokenprimary
Codevariant="primary"
ScreenBuy bundle

Before: re-typing changed the yellow. After: one name, the same yellow on screen.

Recreated to show the pattern the audit found: the value was right in Figma and changed when it was typed again. Hex values illustrative.

Chapter 03What we built

Four decisions closed the gap, each with a cost we accepted.

  1. Build on the stack our developers already wrote. shadcn/ui and Tailwind, so teams could adopt one component at a time. The library later moved to Base UI with a prebuilt stylesheet, so teams outside Tailwind can use it too. The cost: someone else's naming, bent around MTN's brand.
  2. Three levels of tokens. Primitive, semantic, component. In Figma the semantic level is split in two: a Theme collection for the brand and a Mode collection for light and dark. SME Hive is MTN's, built with partners, so it carries its own look instead of MTN's. It runs as a second theme on the same components. The cost: more names to learn on day one.
  3. Figma and code are the same thing. Same names, variants and props on both sides, so there's nothing to translate. The cost: adding a component got slower.
  4. Ship it as packages. Teams install one package with the styles included, and upgrade it in one step. The cost: releases and support became a real job.

Follow one colour, primary, from a raw value to the screen.

Raw value

#F9C600
#F5C100
#7FE4DF

Primitive

Sunshine Light 10
Sunshine Dark 10
SME Hive mint

Theme

MTN
SME Hive

Mode

Light
Dark
1GB data bundleValid for 30 days
₦500
Auto-renew every month
RechargeFor you or someone else
Active
primary → Sunshine Light 10 → #F9C600

Built for this page from the design library's real values. SME Hive is MTN's, built with partners, so it runs its own theme on the same components. Its colours come from SME Hive's own design file: mint buttons, deep teal text and peach as the second colour. Its dark mode is our proposal from that palette: near-black, mint for actions and peach outlines.

Spacing · Tailwind's number scale

14px
28px
312px
416px
520px
624px
832px
1040px
1248px
1456px
1664px
2080px
2496px

Type · Tailwind's scale, in MTN Brighter Sans

text-xs · 12pxBuy 1GB for ₦500
text-sm · 14pxBuy 1GB for ₦500
text-base · 16pxBuy 1GB for ₦500
text-lg · 18pxBuy 1GB for ₦500
text-xl · 20pxBuy 1GB for ₦500
text-2xl · 24pxBuy 1GB for ₦500
text-3xl · 30pxBuy 1GB for ₦500

Designers and developers pick from the same numbers, so "space 4" means 16px in Figma and in code.

53 components in the Figma library, built and documented with their variants and states. The six marked new are the latest additions.

Also: Empty States (in progress), Data Table and Page Layout templates, and pattern explorations.

Chapter 04My part

I designed components and matched each one to code.

We worked as equals in three-week agile sprints, with Ikedi Eze leading the design system. Most of the work was shared; these are the parts I shaped most closely.

What broke: accessibility. We designers ran our first components through BrowserStack's accessibility checks, and they failed. Since then, every component page in Figma carries an accessibility layer, so we check a component before it's built, and the tokens keep text on MTN yellow black.

A few of the components I worked on with the team. They're rebuilt here in Raanaa's MTN tokens, so you can try them.

9 components

↑︎↓︎ to switch

Notice Neutral Low Medium Normal Critical Outline

Rebuilt for this page from the Raanaa library, with MTN's real tokens. Sample data only.

Chapter 05Getting teams on board

We set rules for whole pages, then spent most of our time with teams.

Every page handles five states: loading, empty, no results, error and success. Layout patterns cover the pages we build most, and "never do" lists hold the common mistakes.

Then the people work: 1:1s with every team, office hours, async design reviews, a support channel, and developer champions inside each team. I ran design reviews and wrote documentation, which now lives in MTN's internal developer portal.

Three products adopted it first: the logistics portal, SME Ville and the Canvasser agent app.

One screen, five states. Every page in Raanaa plans for all of them before it ships.

My bundlesData plans on this line

Chapter 06Results

More than 20 products now run on one design system.

Three products used the system at first. Now more than 20 do, including myMTN and eShop. About 15 designers and 40 developers use it. Below are screens from the first three products and the components in each.

Each component has a Figma version for designers and a code version developers can copy. Teams can start with those finished parts, so features ship much faster than they used to.

What I can show, and what I can't. Every designer on the team now designs with Raanaa. In a team meeting in October 2026, our senior developer estimated that building from the system in code has cut design-to-production time by about 40%. That's an estimate, not a tracked number, and there's still no clean before and after for UI bugs. Next: adoption against custom components, time to build a standard page, inconsistency bugs, and a quarterly survey.

Screens from the first products built on Raanaa. Pick a product, then a screen.

Real product screens from the teams' Figma files. Personal details blurred.

The company

New products look and behave like one MTN.

Product teams

Teams tell us they ship faster, with fewer UI fixes before release.

Designers

Quicker files, easier handovers, faster onboarding for new joiners.

Developers

Reusable components instead of the third date picker.

What teams have told us. The 40% is an estimate, see the note above.

Abayomi in a yellow sweatshirt, speaking into a microphone at a lectern in an MTN event hall, with MTN banners around the stage.

A very exciting and forward-thinking bedrock. Very welcome.

Maurice OgbeborSenior developer lead, MTN Nigeria
Beyond Nigeria

We presented Raanaa to other MTN operating companies, and they're looking at building the same for themselves.

Me, presenting Raanaa to other MTN operating companies. The projected screen is softened.

Chapter 07What I'd do differently

Four things I'd change if we started again.

  1. Measure from day one. Track adoption and build time before the first component ships. It's the biggest gap in this story.
  2. Check accessibility before building, not after.
  3. Start messy and move fast. Shipping the first version taught us more than planning did.
  4. Adoption is people work. We spent more time talking with teams than building components.

Credits

Design lead
Ikedi Eze
Design, components and docs
Egbemode AbayomiFigma, FigJam, Claude
Design
Opara ChikeOsisi AdigboleBenjamin Emmanuel
Senior developer lead
Maurice Ogbebor
Engineering
The Raanaa developersWho turned every component into code

Raanaa in 21 seconds

The film I made for this case study: the Raanaa mark as a 3D character, the real product screens, and motion built in code with HyperFrames.

0:00