Building a scalable design system for a legacy
affiliate platform

Building a scalable design system for a legacy affiliate platform

Transforming a fragmented 300+ page platform into a scalable, engineering-aligned design system.

overview

Savings is a 16-year-old affiliate platform supporting 300+ brands across 27 templates and 300+ pages, driving approximately $3.5M in annual profitability. During a company-wide rebrand, our team needed to redesign the entire site. However, Savings did not have an existing design system or centralized source of truth.

I led the creation of a scalable, engineering-aligned design system to support the rebrand and future growth. Working closely with engineering, I implemented a token-based system and documented components to ensure consistency across paid and organic domains. By leveraging AI tools to accelerate token creation in Figma, I reduced tokens structure build time by ~50% and helped improve projected development time by ~20%.

+50%

Tokens Speed

Tokens Speed

Tokens Speed

+20%

Engineer Speed

Engineer Speed

project timeline

6 Months

team

Myself (Designer)
Khris K. (Developer)
Yanush C. (Developer)

my design skills in focus

Leveraging AI Tools

Design Systems Architecture

Cross-Functional Collaboration

Systems Thinking

the problem

A sixteen-year-old site built without a system

Through a site-wide audit, I found significant inconsistencies across key UI elements, particularly buttons and merchant icons. Some button styles were not brand-compliant, and similar components appeared differently across pages. These issues traced back to a core problem: Savings had no design system, no shared mocks, and no centralized source of truth, making it difficult to scale design consistently across a 300+ page platform.

system architecture

Building from the atomic level

To create clarity and scalability, I organized components using an atomic structure. I separated foundational elements from composed modules to ensure reusability and consistency across the system.

token structure

Developing a scalable token system with AI-assisted workflows

After defining core components, I rebuilt the design library using a structured token architecture, separating primitive tokens (raw values) from semantic tokens (contextual usage). To speed up setup without losing clarity, I leveraged AI tools to generate and validate token naming conventions, exporting structured JSON files that could be imported directly into Figma Variables. This approach reduced manual configuration time while ensuring a scalable, engineering-aligned foundation.

Building primitive tokens with ChatGPT

I started by setting up the primitive tokens, using my existing design system as a base to copy and adjust values like breakpoints and font weights. For color tokens, I turned to ChatGPT, providing my palette to quickly generate a structured set of primitive values.

Building semantic tokens with Cursor

Next, I exported the primitive tokens to Cursor and prompted it to generate semantic token names for each component using Figma MCP links. This connected raw values (primitive tokens) to their contextual usage (semantic tokens) across components.

Importing tokens into Figma

After proofreading and adjusting names as needed, I had Cursor generate a JSON file of all semantic tokens, which I imported into Figma’s Tokens Studio plugin. This reduced token setup time by ~50%.

cross-functional alignment

Aligning on structure with engineers

To ensure the token system would work in practice, I held biweekly meetings with Yanush and Khris (engineering) to align on naming conventions and overall design system structure. This collaboration ensured my variables and components matched engineering workflows, minimizing friction during handoff and setting the system up for long-term scalability.

Breakpoints and containers

During token setup, I noticed my breakpoints didn’t match Yanush’s, which could have caused noticeable layout issues on the live site over time. I updated my variables to align with his. Containers also included built-in padding. For example, a mobile container measured 326px but had 4.5px padding on each side, effectively 317px. Removing these paddings was too risky, as it could affect other pages, so we agreed I could continue designing without them and handle any edge cases as they arose, since most content layouts wouldn’t be affected.

Unnecessary padding indicated in green

Unnecessary padding indicated in green

Aligned breakpoint and container sizes

Aligned breakpoint and container sizes

Legacy code constraints

The site’s legacy structure (built in Velocity) meant pages were highly interdependent and delicate. Changes made to one page could affect others. However, due to a tight timeline, the engineers wanted to reuse pre-existing elements where possible. Because pre-existing elements were coded inconsistently, some elements couldn't automatically implement the new tokens I had. I worked closely with the engineers as they manually refactored these components to carry the updated tokens to validate visual consistency and ensure alignment with the intended system structure. This collaboration gave me a deeper understanding of the engineering constraints and workflows, helping me design a scalable design system.

cross-team documentation

Documentation as the single source of truth

Tokens

I created a dedicated page listing each primitive and semantic token in charts, organized by type (color, space, typography, etc.). My goal was to eliminate gaps between design and engineering, making it easy for engineers to follow the system as a single source of truth while coding.

Components

For components, I placed usage guidance directly alongside the design elements for designers to reference. Each component included detailed documentation covering anatomy, rules for toggling elements on and off, variants, and examples of real-world usage for designers, engineers, and product managers.

I documented precise rules like text line limits and clear guidance for adjusting component states via toggles and dropdowns. I also highlighted key details with icons for emphasis.

This is super informative and great, but it’s quite cramped and difficult to read all the notes.

Miriah (Designer)

I’d like to see the different hover states and edge cases of the designs.

Khris (Engineer)

Making adjustments

After gathering feedback, I realized my documentation needed more clarity and organization. I reorganized the documentation to make my notes more clear and digestible. Using the Specs plugin, I generated clean visual specs with padding and numerical pointers. Instead of having all annotations in one section, I separated "anatomy" and "layout/spacing" details into separate sections and included default and hover states where applicable, ensuring component behavior was easy to understand for engineers.

Example of cleaner documentation for buttons

Example of cleaner documentation for buttons

reflection & next steps

Reflections on impact and growth

Impact 🎯

  • This design system reduced development time by ~20% and established a clear standard for alignment between design and engineering

  • Using AI tools to build token structures sped up token creation on the design side by ~50%, significantly improving overall design system build time

  • Collaborating closely with engineers also deepened my understanding of how components and tokens are implemented in code, strengthening my cross-functional knowledge for future projects

Challenges 💪🏻

  • Building a design system from scratch for a site with no existing mocks required defining rules and structures from the ground up

  • Learning to integrate Cursor into the workflow had a learning curve and required multiple tutorials, but once I got the hang of it, setup became much faster

  • Leveraging AI tools helped accelerate both token creation and overall system build, making the project manageable despite its large scale

Next Steps 🐾

For now, all documentation is maintained within Figma to keep things simple for our small team. In the future, I’d like to explore a more comprehensive documentation hub to centralize components, tokens, and guidelines. I experimented with using Cursor to generate a local documentation site, but without a domain to host it, we paused development. This will be a further opportunity for my team to improve accessibility and cross-team collaboration.