Beyond One
Beyond One
Beyond One

Beyond ONE

Lead Product Designer

Changing what we make and how we make it

Changing what we make and how we make it
Changing what we make and how we make it

I took an undocumented, fragmented plan card, the single most used component across 4 telecom brands in two markets, and rebuilt it as a scalable, multi-brand, bidirectional component system using Claude AI and Figma MCP. The result: 19 building blocks, 4 card sets, full RTL support, and a component architecture that lets any designer configure a plan card in seconds instead of building one from scratch for each brand. Phew!

So I turned Claude on the part every one of those four brands had quietly skipped for years: writing down how the component actually works. Building and documenting turned out to be two very different jobs for AI: one took constant correction, while the other just worked. Here's the whole story, including the parts that were more work than I expected.

Built once, themed everywhere.

Built once, themed everywhere.

One design system for four brands. Built for consistency, speed and creative freedom.

One system, four brands

One system, four brands

Swappable appearance tokens mean every brand carries a different visual identity.

Swappable appearance tokens mean every brand carries a different visual identity.

192 components. One token source.

192 components. One token source.

Accessible, tokenized, dark mode ready. Change one, every brand updates

Accessible, tokenized, dark mode ready. Change one, every brand updates

Documented by AI

Documented by AI

Every component, fully documented. Style, Usage and Behavior, Code, Accessibility

Every component, fully documented. Style, Usage and Behavior, Code, Accessibility

In the product, not just library

In the product, not just library

Every component shown the way it actually ships, inside a real screen.

Every component shown the way it actually ships, inside a real screen.

THE PROBLEM

Before: four brands, four messes

Before January 2025, Beyond ONE didn't have a design system. It had four.

Virgin Mobile (GCC and LATAM), Virgin Connect Roam, Friendi Pay, and Friendi Mobile each maintained their own components inside their own Figma files. Color was themable through styles. Text styles existed. Spacing, elevation, and border radii were hardcoded. There were no variables, no tokens, and critically no documentation. Nothing telling a designer why a decision was made, what a component could or couldn't do, or what would break if they changed it.

Every new journey, promotion, or market meant building a variation of the same components from scratch. A manual, time-intensive process repeated four times over for work that should have happened once.

John Doe

John Doe

John Doe

Virgin Connect Roam - Design System - Components

Friendi Mobile - Design System - Components

The result was predictable. Product inconsistency, components lacking accessibility, increased engineering effort, and meetings requested to explain designs due to lack of documentation. New team members needed a 30-minute walkthrough to onboard per product. And too often, what landed in staging didn't match what was in Figma at all. We weren't maintaining four design systems. We were maintaining four sources of disagreement, held together by the UI/UXs team knowledge.

THE SOLUTION

Building the core design system

Three designers. Four months. One component library; one source of truth. One token architecture. Four brand themes powered by swappable appearance tokens. Same components, different visual identities. RTL baked into the component structure from day one, not bolted on after.

Token architecture

We needed every visual property in variables, not values. The naming debate nearly stalled us. Engineering wanted Material Design conventions. We pushed back. We don't work with Material's mental model, and forcing designers to learn a naming system that doesn't match their files creates the same translation gap we were trying to eliminate. So, we landed on semantic naming: text/primary, background/interactive, d-2. Language both teams could read without a glossary!

Before: Hard-code values

Before: Hard-code values

Every spacing, radius, size value is a raw number. Change one, and we're updating every screen manually.

Every spacing, radius, size value is a raw number. Change one, and we're updating every screen manually.

After: Tokenized system

After: Tokenized system

Every value references a design token. Change one variable and every component across every brand updates automatically!

Every value references a design token. Change one variable and every component across every brand updates automatically!

But one component stayed behind.

Not everything went into V1. Illustration systems, motion tokens, complex and brand-specific components. The plan card, for example, the single most used, revenue-critical component in the ecosystem across three brands was something I wanted to bring into the core. It was too complex, tangled in brand-specific logic, and undocumented to migrate in the initial push. New markets launching meant rebuilding it from scratch each time because every brand had its own version, quirks and gaps.

The plan card is the first thing a customer sees when choosing a plan. It drives discovery, conversions, revenue. If it doesn't scale, the experience breaks for users, engineering, and for every market we launch next. We needed one card, built once, built right.

THE COMPONENT

The plan card

At first glance, a card seems straightforward, right? A title, price, a list of features, a button. Easy, right? Not quite. Not at Beyond ONE.

The goal was simple but hard to do: one plan card that works for every Virgin and Friendi product. Before rebuilding anything, I needed to understand what actually existed. How the different versions were structured, what was tokenized, what was hardcoded, where they quietly diverged.

I used Claude AI to run a structural audit on the plan cards across KSA and LATAM. Not a visual review but a layer by layer inspection, every node, every variable binding, every text string, every nested instance.

What came back confirmed the scale of the problem. Two exposed properties for the entire component - no way to add or reorder line items without manually rebuilding, one hardcoded CTA with no secondary action, no way to style variants without detaching instances.

The approach

After the audit, the path was clear: this wasn't a redesign problem. It was an architecture problem. The card needed to be decomposed into reusable building blocks, each with its own properties, and then reassembled into a card that could serve every brand, every market, and both reading directions, without exploding into hundreds of variants.

I used Claude AI with Figma's MCP integration to do it. Not as a design tool, as a build partner. The workflow was simple. I made the architectural decisions. AI executed them at scale.

Architect

Architect

Architect

me!

me!

me!

Build

Build

Build

Figma + AI

Figma + AI

Figma + AI

Verify

Verify

Verify

me!

me!

me!

Decisions I made

Started with the anatomy

Before touching any tool, I mapped out the component into 5 building blocks, each responsible for one job: plan attribute, badges, heading, list items, CTA. The old card was a monolithic layer tree. The new one is a composition of independent, swappable parts.

Every block = independent properties

The old card had two properties for the entire component. The new one distributes control across the building blocks so a designer can change a price format or add a badge without touching anything else

Every block has a slot component

A placeholder that accepts any component through instance swap. New use case in 6 months? Swap it in. No detaching. The system doesn't break.

Seperate RTL sets, not direction variant

RTL isn't just flipping the layout. It's adapting the interface to how Arabic-speaking users scan and interact. We buily complete Arabic cards, authored natively for RTL. Typography moved from Tajawal to IBM Plex Sans Arabic. Arabic is the primary market for GCC. The experience should feel native, not adapted.

WHAT AI BUILT

19 blocks, and a lot of babysitting

19 building blocks, from scratch, correctly bound to variables, correctly wired for auto-layout and properties. What would have taken a team several hours of assembly took one designer a couple of hours of review plus something I didn't put in the original plan: roughly half a day of back-and-forth correcting AI for bypassing the design system it was supposed to be built from.

Left unsupervised, Claude kept reaching for the fastest path instead of the correct one. It built brand-new CTAs instead of instancing the DS button component already sitting in the same file. It skipped the instance-swap placeholders I'd designed for badge icons and drew static icons in their place. It created new chip components instead of reusing the one already in the library. None of it was wrong exactly. It looked right at a glance but every instance was a small, quiet fork of the system I was trying to unify in the first place.

Catching this meant checking every block against the actual component library, not just against the spec, and redirecting Claude back to what already existed instead of what it could generate. It's the same failure mode, at component scale, that produced four separate plan cards to begin with: when the right piece isn't obvious or in front of you, you build a new one instead of reusing the one that's already there.

WHERE AI ACTUALLY PAID OFF

The documentation gap AI closes

Here's the part I almost skipped, and shouldn't have.

Nineteen well-built building blocks with zero documentation is just a more elegant version of the original problem. Nobody outside our head knew what "WidgetPlanAttribute" meant, why the trail toggle worked the way it did, or what to do if a 5th badge needed to fit. I'd fixed the structure and quietly recreated the tribal-knowledge dependency in the same move.

So I pointed Claude at the documentation, using the same specification the audit had already produced; every property, every variable binding, every RTL rule. And it was a completely different experience from building.

The difference came down to what Claude was allowed to invent. When I asked it to build components, it had to make small judgment calls constantly, which existing piece to reach for, whether to reuse or create and that's exactly where it went off script. When I asked it to document, there was nothing left to invent. The spec was already the ground truth. Claude's job was to describe it accurately, not decide anything. Usage guidelines, property definitions in plain language, do/don't rules, accessibility and RTL notes for all 19 blocks came back needing edits for tone and clarity, not corrections for accuracy. A fraction of the correction time building had cost me.

Style tab: component types, the rule for when to use each one, and a live instance, not a mockup.

Usage and Behavior tab: the do/don't rules for writing the label itself, the same layer that used to live only in a designer's head.

That's the real lesson from this project, more than the component itself: AI saved me real hours, but only for documentation. The design team gets far less questions on Teams or requests for meetings. Clear documentation has bridged the gap between handoff and delivery.

Documentation turned out to matter far more. An undocumented component doesn't stay untouched. Someone, or something, eventually needs it and can't find it, so they build a version of their own. That's exactly how we ended up with four separate plan cards in the first place, and it's the same instinct I watched AI fall into mid-build when the right component wasn't obvious enough to find.

THE COMPONENT

Impact

At first glance, a plan card seems straightforward… not quite. We measure the design system the same way for every component across three buckets

Reuse and cost

Number of components used and cost of creation

Team performance

Number of new components shipped and days to design and build them

User impact

User satisfaction and efficiency

Design-dev handoff time

-40%

WCAG non-compliance issues

-90%

New designer onboarding

Days

Not weeks…

Products using the system

100%

The pair worth remembering isn't in the stats above. AI didn't make this project free. It made the build faster but noisier, and the documentation faster and quieter. And knowing which was which going in would've saved me the half-day I spent catching a Claude-built CTA that should've been an instance.

LEARNINGS

Key takeaways

Collab drives adoption

A system nobody uses is a file. The pain felt by all teams, inconsistencies, time-to-market, is what drove this project in full speed.

Hot take: AI needs a leash when it's deciding, not when it's describing

Building required Claude to choose between reusing and creating, constantly, and it defaulted to creating more often than I expected: new CTAs, new chips, skipped instance swaps. Documentation required no choices at all, just accurate description of decisions I'd already made, and it barely needed correcting.

Undocumented components get rebuilt, not reused

This is the exact failure mode that produced four separate plan cards in the first place, and the same instinct I caught AI falling into mid-build when the right component wasn't documented clearly enough to find.

Accessibility and brand consistency are non-negotiable

Not stretch goals, not phase two. The system either meets the bar on day one or it teaches every team that ships with it that these things are optional.

Configurable components enable scalibility

Slot variants, distributed properties, token-driven theming. The plan card has 19 building blocks, but the real deliverable is an architecture that absorbs change without needing to be rethought and now, for the first time, a set of docs that explains why.