Shafeen Alam
All work
Interpres SecurityDesign systemCybersecurity

Designing a design system for trust

Interpres had powerful cybersecurity intelligence and an interface that had grown through isolated decisions. I introduced a shared visual and interaction system, partnered with engineering on an incremental MUI and Tailwind migration, and extended the system so AI-generated recommendations could be explained and acted on.

Role
Design Lead, AI/UX. Sole product designer
Timeline
June to December 2024
Team
CTO, Head of Product, 5 engineers
Constraints
Two-week sprints, licensed charting library
case.md
$ cat outcome
coverage_levels: 5 → 3
a11y_complaints: → 0
An audit of the existing Interpres color palette, showing numbered neutral and brand scales with hex values and measured contrast ratios annotated against AA and AAA thresholds
Where I started: an audit of the palette I inherited. Every color run through a contrast checker and annotated with its ratio, marked AA or AAA where it passed and left bare where it did not. This is the inventory that made the case, not the system that replaced it.↗ open full size
Why it mattered

When status rests on red and green and controls behave differently, analysts cannot fully trust what they see.

60-second read

Problem

The interface had grown through isolated decisions. Similar controls behaved differently, status meaning rested on red and green, and components had no documented states.

System decision

Build a shared language for risk, coverage, evidence, confidence and action, incrementally, inside shipping work rather than as a redesign pause.

My contribution

Sole designer. Audit, accessible foundations, component library on MUI and Tailwind, design QA in Storybook, and the AI interaction patterns.

Impact

A coverage model rebuilt from five levels to three with accessibility complaints dropping to zero, a component library on MUI and Tailwind, and ten reusable patterns for explainable AI.

Jump to

01 · Shipped

A shared language for how Interpres communicates risk, coverage, evidence, confidence and action, built inside shipping work rather than instead of it.

5 3
coverage levels, rebuilt so the ranking survives without hue, complaints to zero
7
component states documented per control, from default to error
2
frameworks consolidated onto, MUI and Tailwind, dialogs first

These describe specific product workflows the system enabled. They are not system adoption metrics. I did not have formal adoption analytics during the engagement, so I keep the two claims separate.

02 · The problem was not a missing UI kit

Analysts had to interpret dense data, move between related threat objects, compare coverage levels and decide what to address first. The product also had to keep growing inside two-week sprints on a constrained third-party framework. When I joined as the only designer, the interface reflected the speed the company had been building at.

  • Similar controls behaved differently across modules.
  • Navigation patterns did not scale as new areas were added.
  • Status meaning depended heavily on red and green.
  • Components lacked complete interaction and error states.
  • Important workflows presented too many decisions at once.
  • Design intent and implemented behavior were not always aligned.
  • A new AI assistant raised fresh questions about evidence, confidence, latency, permissions and control.

Interpres did not need a component library. It needed a shared language for communicating risk, coverage, evidence, confidence and action.

03 · Where the priorities came from

I spent my first week auditing the product and running recorded walkthroughs with people across the company. Two of the four priorities that came out of it, accessibility and consistency, could not be solved screen by screen. This case study is what I built to solve them.

The audit, and the other two priorities

04 · Building it without stopping delivery

A pre-seed company cannot pause feature work for a redesign, so the system had to earn its place incrementally. Four operating principles, and every shipped workflow improved the foundation while every system decision made the next workflow faster.

Start with recurring friction

I prioritized patterns that appeared across high-value workflows rather than beginning an abstract catalog. Dialogs came first because they combine inputs, selection, hierarchy, validation, progressive disclosure and a primary action.

Design for the real stack

The product was moving toward MUI and Tailwind. I worked with the front-end engineer to find where those foundations could replace one-off implementations while still serving Interpres-specific needs.

Define behavior, not appearance

Every component documented its default, hover, focus, selected, disabled, error and loading behavior. The goal was predictable interaction, not a gallery of polished static examples.

Validate inside real workflows

Components were tested in reporting, navigation, investigation and remediation. That is where a generic component turns out to need a usage rule or a domain-specific composition.

05 · Accessibility-first architecture

Our MITRE ATT&CK coverage matrix used a five-level color scale. Customers began raising valid concerns, particularly those with deuteranopia or protanopia, that the levels were indistinguishable and did not meet ADA and WCAG contrast standards.

The palette I was handed

The inherited Interpres brand sheet, three rows. An eight-step purple ramp from #AC73FF to #450088, an eight-step neutral ramp from #90919C to #0C0A0E, and a row of four semantic anchor swatches: red #DA3434, green #04B897, amber #FBBF25 and blue #00A0FF. Every swatch is labelled with its step number and hex value
Brand and neutrals as they existed, two eight-step ramps, plus a single row of four semantic anchors for red, green, amber and blue. Hex values documented throughout, and no contrast information anywhere on the sheet.↗ open full size
The inherited Interpres semantic scales, four eight-step ramps running 100 through 800 with hex values labelled: red from #7D1F1F to #FF8C8C, teal green from #0A6558 to #39F0CB, amber to orange from #9E3C0E to #FFDA63, and blue from #0D669B to #7AE4FF
Four semantic ramps, eight steps each. The red and green rows are the two the coverage matrix leaned on hardest, which is exactly the pair a deuteranopic or protanopic analyst cannot separate. Plenty of color available, and no guidance on which pairs were safe together.↗ open full size

I audited the full palette in two passes. Every value went through a contrast ratio checker and was annotated with its AA or AAA result and the measured ratio, or left with the bare ratio where it failed. Then I re-rendered the interface under protanopia, deuteranopia and tritanopia filters to find which pairs were perceptually ambiguous rather than merely numerically compliant.

What the audit actually found

Compliance was not the blocker. Even where colors passed AA, the experience still failed. Five levels were too granular for anyone to interpret at a glance, nobody could articulate what separated full coverage from moderate coverage, and the distinctions rested on hue with almost no difference in luminance or shape.

This was not a compliance gap. It was a comprehension gap, and AAA does not fix one of those.

The incremental option was available and tempting: nudge the hues until every swatch passed. It would have closed the tickets without addressing the thing customers were actually describing.

What I changed

01

Simplified the scale

Five levels down to three. Less cognitive load, a distinction people could actually articulate, and closer to how threat coverage is conventionally visualized.

02

Designed for perceptual separation

Hues chosen to hold their distinction under simulated color-deficient vision, not just in a contrast calculator. Tested across multiple filters.

03

Added secondary cues

Tooltips and labeled indicators explaining what each level means, so the meaning no longer travels by color alone.

04

Documented it as a baseline

The palette shipped with WCAG ratios, use-case guidance, and worked examples of acceptable and unacceptable combinations.

The coverage visualization rendered under protanopia, deuteranopia and tritanopia simulations, showing states that become indistinguishable
The same coverage states under color vision simulations. This is the artifact that ended the debate, because it is not an opinion about accessibility, it is the product being unreadable.↗ open full size
The original five-level coverage scale with closely related color swatches and terse labels
Before: five coverage levels whose distinctions were difficult to explain, let alone see.↗ open full size
The revised three-level coverage scale with clearly separated colors, explicit labels and supporting guidance
After: three levels, each paired with explicit language and supporting guidance.↗ open full size
100%
of colors meet WCAG 2.1 AA, most reach AAA
Zero
accessibility complaints from customers after release
Baseline
adopted across every dashboard and visualization

Accessibility is not a checkbox, it is a lens for clarity. Reframing the question from make it compliant to make it comprehensible for everyone changed the information model, not just the palette, and improved the visualization for every analyst who used it.

06 · From foundations to components

With the semantics settled I built reusable components on MUI primitives plus Interpres-specific behaviors: buttons and icon buttons, toggles and checkboxes, inputs, selects and list items, cards and status treatments, tooltips, dialogs and progressive disclosure, navigation and breadcrumbs, and iconography with usage guidance.

Each one was tied to product behavior rather than added for completeness. Breadcrumbs were not decoration, they solved a real investigation problem where an analyst could follow a chain of threat relationships and lose track of where they started.

Input field specifications showing filled and outlined variants with label placement, hint text and helper text
Inputs, with label placement, hint and helper text, and multiline behavior specified.↗ open full size
A second sheet of input and select states covering default, hover, focus, filled, disabled and error conditions
The states that decide whether a component is usable: focus, disabled, error, and everything between.↗ open full size
Button specifications across variants and sizes, each showing enabled, hover, focused, selected and disabled states
Buttons across variants and sizes, every state drawn rather than described.↗ open full size
An icon set with usage guidance showing sizing, alignment and semantic pairing
Iconography with usage guidance, so the same glyph does not come to mean three things.↗ open full size

07 · Closing the gap with code

A system that exists only in Figma is a document. I set the product up locally so I could pull builds, inspect how components were actually constructed, and compare implementation against intent. That gave me Storybook, where I could review components in isolation, inspect awkward states, and watch changes behave inside live screens.

Working with the front-end engineer, that turned handoff from a one-directional delivery into a loop. Design decisions were informed by the component architecture, and implementation decisions were checked against user intent and system consistency.

The Storybook component library showing Interpres components rendered in isolation with their controls and states
Storybook, where implemented behavior becomes reviewable rather than assumed.↗ open full size
A design QA comparison of a Figma specification beside the implemented component in a running build, with differences annotated
Design QA against a running build, before a pattern was allowed to spread to more workflows.↗ open full size

08 · Proving it in a workflow

The report-generation redesign was the first workflow rebuilt on these components, and the composition it produced, a scrollable grouped selection with a persistent action area and indeterminate states, became the pattern every other selection-heavy dialog reused. That is the test a system has to pass: not whether one screen improved, but whether the next one was faster because of it.

The redesign, the trade-offs, and what it measured

09 · Extending the system for explainable AI

Interpres was also building a conversational assistant so analysts could interrogate exposure data without synthesizing it across dashboards by hand. A conventional chat surface was not enough. In security, an answer has to be understandable, traceable and safe to act on, which means the assistant needs a consistent language for explaining how it got there.

One reasoning structure, reused everywhere

EXPOSURE CONTROL GAP MITRE TECHNIQUE RECOMMENDED ACTION

Response cards

Findings in a predictable hierarchy instead of open prose

Evidence and source tags

Every claim tied back to underlying Interpres data

Confidence indicators

So an analyst can calibrate how much to rely on a result

Why this matters

Technical findings translated into decision context

AI uncertain

Incomplete or conflicting information admitted, with recovery paths

Human confirmation

Sensitive actions stop for an explicit decision

Role-based permissions

Limits on what the assistant is allowed to execute

Traceability panels

The origin and logic behind a recommendation, on request

Streaming and fallback

Progress made legible when analysis is slow

Persona-aware depth

The same finding framed for an analyst, a SOC lead, or a CISO

The AI layer reused the same visual hierarchy, status semantics, navigation logic and accessible component states as everything else, which is why the assistant reads as part of Interpres rather than a chatbot bolted onto it.

The Interpres assistant answering an analyst question with a structured response card, evidence links and a confidence score
The assistant in context, answering with a structured card rather than prose.↗ open full size
The Why This Matters explainability panel showing a confidence score and a persona selector for Analyst, Responder and CISO
Explainability, with persona-aware depth. The same finding framed for whoever is reading it.↗ open full size
The AI Uncertain state, offering recovery paths rather than a guessed answer
The uncertainty state. A refusal with a way forward is more useful than a confident guess.↗ open full size
A human confirmation dialog warning that an action will modify a live firewall policy, with confirm and cancel
The human confirmation pattern. One action, one confirmation, every time.↗ open full size

In prototype validation this cut average time to insight from about 45 minutes to 27, and analyst trust rose from 62% to 81% in post-task feedback.

This was a design system for an AI product. AI was not materially used to build the system itself in 2024. The section below is about what I would do differently now.

The full AI assistant case study

10 · What I would measure next

I did not have formal adoption analytics during the engagement, which is why the outcomes above are scoped to workflows. If the system had continued, I would have stood up a small health dashboard around five measures, none of which is the number of components.

01 Coverage Percentage of production UI using approved components and patterns
02 Reuse Ratio of reused components to new one-off implementations
03 Velocity Design and build time for comparable workflows, before and after
04 Quality Accessibility, interaction and visual-regression defects caught before release
05 Contribution health Requests, accepted additions, deprecated patterns, documentation completeness

11 · Retrospective

Written in 2026, not part of the shipped 2024 work

The original system was built for people making an AI product. It was not built through an AI-assisted process. Today I would take the next step and make the system legible to both people and tools, by encoding component intent, supported states, accessibility requirements and usage constraints as structured context rather than as visual examples alone.

The loop I would build

  1. An agent retrieves approved components, props, examples and usage rules.
  2. It composes the requested workflow from existing patterns rather than inventing new ones.
  3. Storybook renders the result across default, loading, empty, error, permission and responsive states.
  4. Automated interaction, accessibility and visual tests identify violations.
  5. The agent corrects the failures and reruns the checks.
  6. A designer and engineer review the result, including whether the pattern suits the user problem at all.

The goal is not automating design judgment. It is giving a model the same constraints and feedback loops that help a human team produce coherent, accessible work.

12 · What changed

For customers

  • Important workflows became easier to scan and finish.
  • Coverage and status became readable with a color vision deficiency.
  • Navigation preserved context across long investigations.
  • AI recommendations became structured, evidence-backed and checkable.

For the team

  • Designers and engineers shared component references and states.
  • Storybook made implemented behavior visible and reviewable.
  • MUI and Tailwind gave the product a more scalable foundation.
  • Design QA moved next to implementation instead of after it.

The most important outcome was not a library of controls. It was a clearer agreement about how Interpres should communicate risk and support a decision.

13 · Takeaways

01 A design system should start from recurring product problems, not from an inventory exercise.
02 Accessibility can expose a weakness in the information model, not just the palette. Five coverage levels nobody could distinguish was a content problem wearing a color problem's clothes.
03 Components become valuable when their behavior and intended use are explicit. A static example is a suggestion.
04 Storybook and live-build QA are what make system work credible. Design intent that never reaches the running product is a document, not a system.
05 AI experiences need reusable patterns for evidence, uncertainty, latency, permissions and human control, the same way ordinary interfaces need buttons.
06 A small system that changes shipped work beats a comprehensive library nobody adopts.

Trade-offs

What I chose not to doWhyWhat it protected
Adopting an off-the-shelf system wholesale Its defaults failed our contrast audit and did not fit dense security data. Components built on audited, accessible tokens.
Redesigning every screen at once A big-bang rollout would stall roadmap work for a quarter. Proof on one workflow (reports) before scaling.
AAA contrast everywhere It would have flattened the hierarchy analysts rely on. AA as the floor, AAA where text is dense and critical.

In cybersecurity, ambiguity creates risk. The system's job was to reduce it at every layer, from a checkbox state to an AI recommendation.

The AI assistant The BlackBerry system The CTEM platform
Next case studyCompliance integrity at enterprise scaleRead the case study