Crosswordr Design System

Cover image showing a partial preview of the design system, including colors, typography, spacing, and UI elements.

Short summary

I took on the challenge of turning our growing unstructured Pattern Library into a solid, scalable Design System. My approach focused on:

  • Building a strong foundation: I used Figma variables to tokenize key UI elements, making them consistent and easier to manage.

  • Keeping design and dev in sync: Right from the start, I worked closely with frontend engineers to make sure our designs matched the live product.

As a result, we built a clean and consistent design system that reduced UI debt and supported our long-term growth. Collaborating closely with engineers also made the process smoother and more efficient.

Client
My Role
Lead Product Designer
Team
  • Product Manager
  • Development Team

73

UI Elements Tokenized

32

New Components

65%

Reduction in Design Time

Visual Design

Design Audit

Accessibility Review

Token System Setup

Usability Test

Co-design Facilitation

Design process

Pattern library needed some cleanups

  • We started with local styles for color and typography, but as the product grew, they became a bottleneck. Scaling revealed the need for a more structured system to ensure consistency and efficiency.

  • Without tokens, every update had to be done manually across components. This slowed the process, increased inconsistencies, and made it harder to scale as new features were added.

To future-proof our product and ensure design consistency as we continued to expand, we needed to transition from local styles to Figma variables and tokens.

Screenshot of local color styles in Figma

Token-driven design: a scalable approach that won stakeholder support

I knew building a design system was a big lift, so I started with the basics — tokenizing core UI elements like colours, typography and spacing to reduce redundancy and inconsistency.

With the release of Figma Variables, I ran a live demo to show how tokenization could streamline updates and boost efficiency. The team saw the value, and we kicked things off by implementing colour tokens first.

Standardized naming

I started by auditing the product’s existing colour usage across both design files and code, uncovering inconsistencies and redundant values. To bring alignment, I developed a colour token system grounded in semantic naming.

Working with the frontend team, we first assigned Hex values to primitive tokens (e.g., #4D4BE7 → brand.500), then mapped them to semantic tokens (e.g., brand.500 → background.brand). We ensured the new naming conventions fit smoothly into existing frontend workflows without causing disruption.

Visual representation of the design system’s token structure, mapping a hex value to a primitive token, then to a semantic token used in a primary button.

The relationship between Hex value, primitive and semantic colours

Figma Variables screenshots placed side by side, showing how a semantic color token derives its value from a primitive color token, with an arrow indicating the relationship.

The relationship between primitive and semantic colours

We decided on a naming structure that is simple but powerful. It's easy to learn and flexible enough to grow as the design system gets larger and more complex.

Naming structure for semantic colours

Examples of semantic colours used on a card

T-shirt sizing

I approached spacing by using t-shirt sizing—tokens like XS, M, and 4XL mapped to pixel values. This made it easy to keep spacing consistent across padding, margins and layout gaps, making the interface more cohesive and easier to maintain.

Visual showing a table of detailed spacing sizes (2px to 80px) based on T-shirt sizing, with annotations highlighting how predefined spacing options are applied to a dropdown component and a card example.

Spacing options based on T-shirt sizing, with dropdown and card examples

Building big by starting small

Tackling a large design system can feel overwhelming, so I approached it one component at a time. I began by thoroughly refining the first component—ensuring all properties were correctly set, including variants, booleans, and instance swaps.

Figma component sheet showing a dropdown with all states (default, hover, active, disabled) across single-select, multi-select, and tag variants, including list items in all interaction states.

Dropdown component sheet with all interaction and list variants

Documentation

I created detailed documentation covering its purpose and use cases, best practices, a component anatomy, and accessibility guidelines like colour contrast and compliance. Before moving forward, I synced with the team to confirm alignment, then repeated the process—scaling the system piece by piece.

Example of documentation sheet for the Banner component, including a definition, design principles, usage priority, labeled anatomy diagram, available variants, and visual dos and don’ts for proper implementation.

Documentation sheet including component anatomy, variants and use cases

Using the full power of Figma tokens for theming

I implemented theme-aware tokens to support both light and dark modes, enabling smooth transitions between them.

  • Mode-specific variants: Each semantic colour has a corresponding version for light and dark themes, ensuring visual consistency across different backgrounds.

  • Contrast & accessibility testing: All colors were tested to meet WCAG contrast requirements in both modes.

  • Future-Ready: The system allows for future expansion, enabling adjustments for branding updates or additional themes.

Page from Crossplay Digital showing puzzle card components in light mode on one half and dark mode on the other for visual comparison.

Accessibility wasn’t a checklist — It was baked in

I made sure every component was usable for everyone—not just some. That meant checking color contrast early, designing for keyboard navigation, and using tools like Stark and Able in Figma to audit as I built.

Dropdown component and list items demonstrating WCAG 2.1 Level AA color contrast requirements, including a minimum contrast ratio of 4.5:1 for informational text and 3:1 for non-text informational and decorative elements such as background hover states, dropdown borders, chevron icons, and checkboxes in both selected and unselected states.

Example of WCAG 2.1 level AA colour contrast requirement

Learnings and reflections

Avoiding the debt trap with regular check-ins

Leaving components untouched only compounds the mess. A design system isn’t a one-off—it’s a living thing that needs regular care. Things that helped us are:

  • Regular check-ins on the design system

  • Weekly syncs or open office hours with frontend devs

  • Keeping an eye on how components are being used and updated

Utilize Figma's full power and new tools

Figma Variables, AI-powered plugins, and advanced features have changed the game. Instead of sticking with old habits, tapping into these tools has helped me work faster, scale smarter, and create more clarity across teams.