Skip to content
Kayla Jung
← All cases
Case · 08 of 07
Cover · 2023–2026 · Design System · Tokens · Accessibility

Building one from nothing, then working inside one someone else built

Pac X design system documentation
Design system
2026
Role
System contributor and lead designer on the first feature built with it
Collab
Product managers, Engineers, Accessibility specialists, Four other lead designers
Tools
Figma, Storybook, Variables, Code Connect, Jira
Year
2023–2026
Chapter · 01

A system is a product

I've built a design system from nothing. I've also worked inside one that four hundred people had already been editing for fifteen years. Each one taught me something the other couldn't.

The thing they agree on: a design system is a product. The users are the people you sit next to. Which means the same rules apply. It has to solve a real problem, it has to be findable, and if people route around it, that's your fault and not theirs.

So I stopped measuring systems by how complete they look. I measure them by three things now.

Can a teammate ship without stopping to ask me a question. Does the library get detached or forked, and how often. And does what lives in Figma still match what lives in code six months later.

All three are about what happens when you're not in the room.

Chapter · 02

Building one: Pac X

Paciolan makes live-event software. Enterprise tools for the people running the event, consumer tools for the people attending it. Each side lived in its own design file, with its own version of a button.

Pac X grew into the system behind pac.io: foundations, tokens, components, patterns, accessibility, and desktop templates. It's at v2.5 and built to WCAG 2.2 AA. I became one of the main contributors, and I led design on the first feature built with it.

That order matters. The component library didn't exist first and get adopted later. It came to life at the same time as the product it served.

16 months
first discovery → working prototype, library growing alongside

The product was Access Control 2.0, a brand-new enterprise tool replacing software written in the 1990s. Our clients had built entire jobs around the old thing. So every component had to earn its place against a workflow someone had performed ten thousand times.

01 · Foundations
The Pac X foundations layer: brand, interactive and neutral color ramps with verified contrast, the type scale, spacing, radius, elevation and the 12-column desktop grid

The atomic decisions everything else inherits from. Red carries brand, blue carries interaction, and the status colors ship with the contrast ratio already measured. Online 4.8:1, Syncing 4.6:1, Error 5.1:1, Offline 4.8:1.

Six layers

One source of truth, in three tiers

Tokens go primitive → semantic → component. red.500 becomes color.brand.default, which becomes button.primary.bg. The tokens sync between Figma and code, so the name a designer says out loud is the name an engineer builds with.

That's the whole point of the middle tier. Nobody argues about whether a button should be #DC1E2D. They argue about whether it's a brand action or a destructive one. That argument has an answer.

02 · Tokens
The Pac X token architecture: nine rows mapping primitive values to semantic aliases to component tokens

Themeable, platform-agnostic, synced both ways. The alias layer is what lets brand change without touching a single component.

Naming was the other half. We structured names as [category/use/variation], like trend_Card/trend_direction/upwards, so a name carries meaning instead of carrying whatever the person who made it was thinking that afternoon.

Chapter · 03

Every block with its real states

The part people skip is states. It's easy to document the happy path and leave hover, focus, error, and empty for whoever gets there first. Then four designers invent four error styles and the system quietly stops being one.

So each block ships with the states drawn.

03 · Components
Pac X controls with real states: button variants with default, hover, pressed and focus, inputs with focused, required-error and read-only, plus selection controls, status badges and filter chips

Buttons across variants and interaction states. Inputs including the required-error and read-only cases. Selection, device status, filter chips. Focus ring is 3px blue.100, minimum hit target 40px, and brand text uses red.600 so it clears AA at 5.0:1.

The accessibility claim was the same idea. A system that says "WCAG 2.2 AA" and leaves you to trust it isn't making a claim, it's making a wish. Ours had to be checkable.

Every contrast pair ships with its verified ratio. Focus rings meet the 3:1 non-text rule against both the light workspace and the dark chrome. Hit targets clear 44px even when the visible control is smaller. And status is never carried by color alone. Every state has a label and a shape behind it.

05 · Accessibility
The Pac X accessibility layer: contrast pairings with AA and AAA verdicts, focus and keyboard specimens, hit target sizes, and do/don't inclusive patterns

Six contrast pairings, each with its measured ratio and verdict. The do/don't pair on the right is the one I care about most: colored dots alone fail, so status carries a text label and a shape.

Underneath it all: templates. Equipment and Dashboard, assembled entirely from the layers above, so a new screen starts as an arrangement instead of an invention.

06 · Templates
Pac X desktop templates for equipment management and the dashboard, assembled from the system's own components

The proof that the layers hold. If a template needs something the system can't make, that's a gap in the system, not a reason to draw a one-off.

Chapter · 04

Working inside one: AOL

The other half of what I know came from the opposite position. At AOL I led design for the community and monetization squads, and supported the system team as they rebuilt a fifteen-year-old ecosystem around us.

I couldn't set the rules there. I could only find out what the rules currently were, which turned out to be a real question. Components were scattered across files, names didn't agree, and the Figma library no longer matched what engineers had in Storybook. Two versions of the truth, drifting a little further apart every sprint.

So I spent a lot of time in the audit. This is what an honest inventory looks like before anyone gets to talk about a vision.

The audit
The AOL module inventory: homepage, channels, need-to-know and stream modules laid out side by side and counted

Forty-five modules across four surfaces, pulled into one view and counted. Redundancy is invisible until you put everything on the same wall.

Making the rules legible
An AOL layout redlined against the grid, with column counts for video, ads and story cards, plus image aspect and width specs

Every module measured back to the grid. 7 columns for 16:9 video, an ad locked to 5 columns, 4 columns per story, images at 1:1 and 24% of the story container. Specifics like these are what let a squad build without asking.

I led design for the community and monetization squads alongside two PMs, three engineers, and four other lead designers. My focus was keeping the look and feel consistent across my surfaces while both contributing to and consuming the shared system. The hard part was never the components. It was the alignment: making a call that was right for community and still right for everyone else pulling from the same library.

The tension

The one constraint every squad was working against: a legacy codebase.

What I did

I couldn't design as if we were starting from scratch. We weren't. Every decision had to balance the ideal direction against what was actually shippable on top of fifteen years of accumulated code.

So I treated "shippable" as a design input, not a compromise made after the fact. When I proposed a cleaner alternative, I proposed it next to what it would ask of engineering. That made it far easier for the other leads and the devs to say yes.

The effort ran on two tracks at once. Neither could wait for the other.

Track 1

Cleanup

Merge redundant components, agree on naming, and close the gap between Figma and Storybook, so the thing you look up is the thing that ships.

Track 2

What's next

A forward direction for branding and layout. A foundation that could grow without drifting back into the same fragmentation.

Cleanup keeps the present honest. The forward track keeps you from rebuilding a system that's dated the day it's done.

The consistency we built
An AOL surface rebuilt on the shared system, view one
An AOL surface rebuilt on the shared system, view two
An AOL surface rebuilt on the shared system, view three

The same components, the same naming, the same language across community and monetization surfaces. Pulled from one shared library instead of reinvented file by file.

How the Figma pages were organized and labeled so the system could be navigated
Organized to be foundHow I reorganized and labeled the Figma pages, so someone new could discover what existed and trust that what they found was current.

Seventy percent of squads moved onto the refreshed system, and onboarding got noticeably lighter. The last thirty percent were squads with their own deadlines, which taught me its own lesson.

What belongs here is the part that changed how I build. Inside someone else's system, I learned that the hardest problem isn't the components. It's that a source of truth only helps if people can find the truth, and trust that what they found is current.

Chapter · 05

What each one taught me

Building Pac X taught me what a system costs to make. Working in the AOL system taught me what it costs to live with. The three things I'm rebuilding my habits around now each come from a specific bruise.

  • Slots. Flexible regions inside instances, so people can customize without detaching. Detached cards and modals were half of what I found in the AOL audit. Every detachment is a small vote against the system, and most of them were people who just needed one region to be different.
  • Variables and modes. One component set that themes across brands and surfaces. If we'd had this at Paciolan, our two separate design files, enterprise and consumer, each with its own everything, might have been one.
  • Code Connect. Design components mapped to real code, visible in Dev Mode. It addresses the exact Figma-to-Storybook drift we fought at AOL, where the gap between the two was nobody's job and therefore everybody's problem.

And the one I'd do differently if I started Pac X again tomorrow: tokenize before you inventory. We catalogued components first and derived tokens after. Starting from a semantic token layer would have made the audit faster and every deprecation safer.

The receipts
0
system layers, foundations to templates, synced Figma to code
0
token tiers, primitive to semantic to component
0%
of squads on the refreshed AOL system
More frames · 1 from the project
Design Systems — aol screen 4
Credits
Clients Paciolan, AOL / Yahoo
Services Token architecture, Component and pattern design, Accessibility verification, Design system audit
Year 2023–2026
What they said
Kayla truly excels at cross-functional leadership, acting as a vital bridge between design, engineering, and product squads to ensure seamless alignment.
Yong K. · Creative Director @ Yahoo