Design systems · Accessibility · Internal tooling

Accessible by Default

Client brand colors don’t always meet accessibility standards. We were shipping them anyway. I designed a color system that made the right choice the easy choice, and documented it so the team could use it without me.

My role
Lead UX/UI designer
Type
Design system, internal tooling
Users
Internal implementation team
Deliverable
Color System v1.2, Aug 2023

Outcomes

0
inaccessible color schemes shipped after launch
v1.2
versioned and iterated based on real team feedback
13pg
documentation the team could use without asking me

The problem

Colors were shipping without any checks

When a new client project started, their brand colors went straight into the system. Whatever hex codes came out of their brand guide. Nobody was checking contrast ratios. Nobody was validating against WCAG. We were trusting that whoever designed the client’s brand had done that work.

They hadn’t. Client brands are designed for print, for marketing sites, for billboards. Not for an enrollment platform where an employee is reading fine print about their health plan. The colors looked on-brand. They just weren’t readable.

The people using these sites aren’t casually browsing. They’re making real decisions about their health coverage and their family’s benefits. An inaccessible color scheme isn’t a minor issue. It’s a barrier to someone understanding their own plan.

The system

Four color roles, built for safe placement

Rather than just fixing colors on a case-by-case basis, I designed a structured color system with defined roles. Every component in the platform draws from one of four colors, each adjusted in tone and chroma to ensure accessible placement by default. The implementation team picks a role, the system handles the rest.

Primary
Optavise red. Main action color, used to draw attention.
Secondary
Optavise navy. Headers, structural UI, employer-facing moments.
Tertiary
Supporting blue. Contrasting accents alongside primary and secondary.
Neutral
Warm tan. Foundation color for backgrounds and quiet surfaces.

Out of the box, the four roles loaded with Optavise’s own brand colors as the defaults. Each client could then customize those roles inside their account settings, swapping in their own brand palette while the system kept the accessible relationships intact.

Each role maps to component styles (Bright, Card, Dull, Invert) that work across both light and dark mode. The team can mix and match within a style, but the system keeps the combinations safe. You can’t accidentally put light text on a light background if you stay within the defined options.

The guardrail

Override is allowed, but you can't do it blindly

The hardest design decision was what to do when the team wanted to use the client’s original colors exactly as provided. Blocking it completely would create friction and pushback. Allowing it silently would defeat the entire purpose.

The solution: a “Use original color” toggle that anyone can turn on. But the moment they do, the system surfaces a warning. Not a blocker. A warning.

System warning shown on override

“By using this option you understand that users with eye impairments will possibly be affected and that we have broken WCAG compliance.”

That language is deliberate. It puts the decision back on the person making it, makes the consequence explicit, and creates an accountability moment without removing control. The team can still proceed. They just can’t do it without knowing what they’re choosing.

1
Default to accessible, not to original
The system-adjusted palette loads first. Using the original brand color requires a deliberate toggle. The path of least resistance leads to the right outcome.
2
Warn, don't block
Blocking overrides would create workarounds. A clear, honest warning creates accountability. The team stays in control. They're just informed.
3
Component-level overrides for flexibility
Individual elements within a component can borrow colors from the associated style, allowing fine-grained control without breaking the system's overall structure.

The documentation

A system is only useful if people can use it

Building the color system was one thing. Making sure the internal team could actually use it, without needing to ask me, was the other half of the job. I wrote and designed a 13-page reference document covering every concept, setting, and edge case.

PDF
Deliverable
Color System v1.2: Project Documentation
13 pages. Terminology, settings overview, component style guide, dos and don'ts, contrast examples, light and dark mode references, real page layout examples. August 2023.
Cover. Project overview
Scope, purpose, version history
Terminology
Color system, component style, color roles defined
Settings overview
How every setting works
Component style guide
Use when / don't use when
Style combinations
Safe role + style pairings
Light mode examples
Contrast references
Dark mode examples
Contrast references
Page layout examples
Real application of the system

The v1.2 version number matters. This wasn’t a one-and-done doc. It went through a revision cycle based on real feedback from the team using it. That’s what makes it a living reference rather than a file that got created and forgotten.

Learnings

What I took away from building this

1
A system without documentation isn't a system. The color logic could have lived in my head. Writing it down, clearly, with examples, is what made it something the team could actually own and use independently.
2
The best compliance tools don't feel like compliance tools. If the accessible option had required extra steps, people would have skipped it. Making it the default, and making the override feel intentional, is what changed the behavior.
3
Designing for internal users is underrated. The implementation team isn't the end user, but their decisions directly affect thousands of employees reading benefit information. That's worth taking seriously.