Design system case study · Fintech

Scaling three design systems across 16+ products

FUPS is a Turkish fintech that offers a digital wallet, prepaid cards and money transfers to a young, digital-first audience. FUPS Bank brings a fully digital bank into the same ecosystem. I own the design systems both are built on.

Role
Product Designer, Design Systems
Team
1 director, 1 team lead, 5 senior product designers, 2 UX researchers
Platforms
iOS, Android, Web
16+products on the system
1,000+reusable components
200+design tokens
40%faster feature delivery

What I did

The challenge

The product and team landscape grew fast: an e-money app, a bank and a steady stream of internal panels. As the number of projects grew, task completion time, quality and consistency all needed to improve. Every new product redrew the same decisions, and the UI drifted between iOS, Android and Web.

Approach and design decisions

From Sketch to Figma

I led the migration of every file and all documentation from Sketch to Figma, and rebuilt the library around Figma components with shared rules for naming and Auto Layout. Tool overhead dropped and design and engineering got one place to work.

A screen rebuilt in Figma: nested Auto Layout and components, layer by layer.

Three systems, one architecture

The bank needed more than the e-money library could offer, and internal panels needed denser, smaller components. We split into three systems, e-money, bank and panel, that evolve independently while keeping what a design system is for: speed and consistency.

The documentation site opens on the systems it covers: FUPS Bank and Panel.

Colour tokens: primitive to semantic

Primitive tokens hold brand and neutral values. Semantic tokens describe background, surface, text, border and state. Light and dark mode switch by reassigning tokens instead of overriding components.

Dark mode from the same variables: the screens switch modes, the components stay.
Colour documentation: semantic tokens pinned to the screen they style.
Colours: semantic tokens alias primitives and resolve per Light and Dark mode.
Spacing: named for intent, with modes for the mobile app and web banking.
Typography: family, weights, sizes and line heights as variables.

Spacing and typography as tokens

Spacing primitives map to semantic layout tokens such as section gap, form spacing and list padding. Typography uses the same two layers: family, weight and size primitives feed title, body, caption and button styles. Big changes that matter for a bank, such as a font, a colour or a corner radius, can now be applied in minutes.

One type scale, two themes: the typography page in light and dark.

Components that explain themselves

Every component page shows its variants, its states and its properties next to each other: primary, secondary, tertiary and text buttons; default, hover, pressed and disabled; small, medium and large. Designers pick from the page, developers read the same table.

Button documentation: variants, states and the property table.

Governance and adoption

I wrote the usage guidelines, the contribution model and the documentation, now published as a documentation site for designers and developers. The system is actively used by 7 designers, 2 researchers and 20+ engineers.

Inside the Figma file

Six collections, 202 variables, two kinds of modes

The system does not live in hex codes scattered across frames. Every decision is a Figma variable, primitives are aliased by semantic tokens, and modes switch both the theme and the platform. This is the structure behind the numbers.

6variable collections
202variables
2theme modes: light, dark
2platform modes: app, web bank
CollectionVarsModesWhat it holds
.Primitives30Raw brand and neutral values. Every other collection aliases them.
1 - Colors108LightDarkSemantic colours in groups for core, backgrounds, containers, text, stroke, divider, disabled, overlays, icons and brand hues. Platform roles such as mobile-bg, desktop-bg, sheet-bg and drawer resolve per theme.
2 - Radius3The corner radius scale.
3 - Spacing20Mobilİnternet Şube16 primitives, spacing-none to xl, aliased by 4 semantic tokens: sectionGap 20, inSectionGap 12, formFieldGap 16, tableListPaddings 16.
4 - Typography37Mobileİnternet ŞubeFont family (Sofia Pro VAR) and four weights as string variables; 16 font sizes and 16 line heights as numbers.
5 - Card Colors4A separate set for card colours, kept apart from interface colours.

Aliases, not copies

Semantic tokens point at primitives. Change a primitive and every alias follows; switch a theme and the aliases re-point, while the components stay untouched.

Modes for theme and platform

Colors switch between Light and Dark. Spacing and typography switch between the mobile app and İnternet Şube, the web bank, so a platform difference is a mode, not a second component.

Type as variables

The family and weights are string variables, sizes and line heights are numbers. A typeface or scale change is one edit across both platforms.

Named for intent

sectionGap, formFieldGap, tableListPaddings: the name says where a value is used, so designers and engineers make the same choice without measuring.

Documented like a product

A documentation site with live examples, variants, states and property tables, written for designers and developers alike.

How I used AI

I built a Claude skill for UX writing checks. It connects to Figma through Figma MCP and checks our agreed rules, such as date formats, formal and informal address and currency formats, directly in Figma, then flags wrong usage and suggests the right one. I also use AI on the documentation side: first drafts of component descriptions, usage guidelines and the wider documentation, which I then review and edit before they ship.

The outcome

Feature delivery became 40% faster and components behave the same on iOS, Android and Web. Production now matches the Figma designs one to one, so UI review has almost disappeared. Onboarding new team members became smooth, and the task success rate rose sharply on both the engineering and the design side.

Next case studyAykanlar Yapı

Contact

Let’s talk

Tell me a little about it. I read every message myself and reply by email.

What’s it about?

or email me at designer.metehan@gmail.com