Ajna Design System

A shared foundation for the next screen.

Ajna’s internal tools were growing, but familiar interface elements were being recreated across products. Buttons, forms, and layouts became inconsistent, while handoffs required repeated clarification.

I worked on a design system that brought shared foundations, reusable components, documentation, and theme support into that workflow.

Project
Ajna Design System
Scope
Tokens, components, responsive foundations, variable modes, and documentation
Year
2025
Ajna Design System

My role

Build a structure that could support shared work

I structured components using variants and variables, applied Figma variable modes for dark mode, and used auto layout to support responsive behaviour.

I also documented usage, worked with developers on feasibility, and explored edge cases through real use and feedback.

The problem

Repeated design work was creating inconsistency and slowing handoffs

Across the internal tools, teams were rebuilding similar buttons, forms, and layouts. Those separate decisions introduced inconsistent visual patterns and repeated work.

Developers needed clearer specifications to reduce back-and-forth. Designers needed ready-made templates and variants they could trust instead of starting again for common requirements.

The challenge was to create a shared foundation that made recurring decisions reusable and clearer to implement across products.

Team needs

What the system had to support

The project identified three recurring needs: consistent visual patterns across tools, clearer specifications for developers, and reusable templates and variants for designers.

Pain points

Where repeated work created friction

  • Similar buttons, forms, and layouts were being rebuilt across products.
  • Separate decisions introduced inconsistent visual patterns.
  • Unclear specifications created back-and-forth during handoff.

Approach

Build a shared foundation teams could use

I organised visual decisions into tokens and structured components with variants, variables, and auto layout. Documentation and developer collaboration supported their use and implementation.

The scope prioritised depth and quality in common components, worked with existing patterns where possible, and focused on 2D interfaces. Real use and feedback helped surface edge cases.

The system, visual by visual

Foundations and specification sheet

Give recurring decisions a shared definition

Colour token sheet: buttons and links, text and icons, borders and dividers, and background layers, each with their states

Problem

Internal tools had inconsistent visual patterns, and teams were repeatedly choosing values for similar elements. Developers also needed clearer specifications.

Design response

Colour, typography, spacing, and borders were organised into tokens to provide a shared reference.

Text and icon colours reflected content hierarchy and feedback states. Backgrounds used named layers, while borders had defined levels of emphasis. These roles helped organise the interface consistently and formed part of the structure for theme changes.

The specification sheet brought these definitions together with component states. Usage documentation addressed developers’ need for clearer specifications, while collaboration with developers helped ensure the design was feasible to implement.

The reason for documenting the system alongside its components was to make recurring decisions understandable and reduce repeated clarification during handoff.

Responsive typography and spacing

Keep foundations consistent across screen sizes

Typescale tables for mobile, tablet portrait and tablet landscape, each token with its size, line height, weight and usage
Spacing token table, from small gaps between icons and text through to breaks between large sections

The system defined typography for mobile, tablet portrait, tablet landscape, and large desktop screens. Shared spacing values covered component-level gaps through to larger sections.

Auto layout and variables supported responsive behaviour. These foundations gave teams a consistent reference as layouts adapted across contexts, instead of defining new values for each screen.

Components and patterns

Make common requirements reusable

Component library: date picker, search with checkbox list, label group, list item, avatar stack, progress bar, pagination and card

Problem

Designers were rebuilding similar components and needed reusable templates and variants. Developers needed the different states of a component to be specified clearly.

Design response

I structured components with variants and states such as default, hover, active, focus, and disabled. This brought recurring requirements into reusable components and made their different appearances explicit.

Defined override behaviour allowed designers to customise layered components while preserving their underlying structure. The aim was to give teams flexibility within the consistency the system was created to provide.

The library supported date pickers, search with checkbox lists, label groups, list items, avatar stacks, progress bars, pagination, and cards. These patterns used the same colour, spacing, and typography foundations.

Light and dark modes

Use one component structure across themes

Theme-switching demonstration

Design challenge

Support dark mode without maintaining a separate file or duplicated component set.

Design response

Figma variable modes allowed the same components to switch between themes. A mode change applied the corresponding values through the shared structure, supporting a one-click theme change in Figma.

Outcome

Less repeated work and clearer shared decisions

The project reported a 40% improvement in design workflow speed for common flows.

Clearer specifications reduced developer questions. Variable modes supported a one-click theme change in Figma, and the system became a starting point for new internal products.

The most meaningful part was seeing other designers use the foundation to move faster with less friction.

What I would do differently

Bring developer feedback in earlier

I would involve developers earlier in the foundations of the system.

Working on Ajna showed me how decisions about token naming and variable structure can affect teams later. Earlier feedback would help align those decisions with how engineers need to use them.

What I learned

Structure shapes work beyond the original file

A small naming or component decision can influence many screens and later conversations.

The system helped me see variables and reusable components as a way of organising decisions for other people. Its value became visible when those people could build on the structure with less friction.