Making cyber risk legible at a glance

Client
DCS
Role
Senior Product Designer
Year
2026
Tags
Design system, Accessibility, Web, UI
CyScan is a cyber risk visibility platform for regulated SMEs and mid-market organisations. It sells one thing above all else: visibility. That proposition lives or dies in the interface, so closing the gap between the two was the work.
Premise

The claim the interface had to hold up

The platform continuously monitors an organisation's internal and external environment, surfaces vulnerabilities and exposures and turns them into something a leadership team can act on. The proposition is that cyber risk is a business risk, not just an IT problem.

If a user cannot tell at a glance what is critical, what changed and what to do next, the product has collected data without delivering visibility. That was the gap I was brought in to close.

Engagement
December 2025 to February 2026, three months.
Team
A delivery lead, one front-end engineer and me, with review sessions with the Chair, CEO and CTO throughout.
Problem

What I found

I began with an analysis of the shipped product, version 1.4.13. The summary dashboard was the clearest expression of the problem. It was failing in ways that were structural rather than cosmetic.

The shipped CyScan summary dashboard before the redesign, with every severity rendered as an identically sized filled tile
The existing product. Every severity rendered at identical visual weight, regardless of value.
Visual weight was decoupled from magnitude
Every severity was a filled rectangle of the same size. Critical at 0 occupied exactly as much space as Low at 3,915. The eye was pulled to a large red block that carried no quantitative meaning. In a risk product that is not neutral. It actively misdirects attention.
Two different taxonomies were rendered identically
Open sat in the same tile grid as Critical, High, Medium, Low and Information. But Open is a record state, not a severity. It was also the sum of the others, so a total was displayed as a peer of its own component parts with nothing in the hierarchy separating them.
Colour was overloaded and partially inverted
Colour did at least three unrelated jobs on one screen: severity, record state and interface chrome. Teal meant Information severity and also appeared in the tracked pills. Blue meant Open and also the navigation. Within the severity ramp itself, Critical was a lighter, brighter red than High, so the most urgent category rendered as the visually softer of the two.
Severity order broke across the layout
Tiles read in a two-column zigzag, placing Critical and Medium in one column and High and Low in the other. Severity descended in neither direction, so no reading path matched the meaning of the data.
Every metric appeared twice
Attack surface, findings and risk debt were each shown in all and critical variants side by side, with near-identical numbers: 14,767 against 13,340. Twelve tiles where the meaningful comparison was one.
Nothing on the page had a time dimension
No trend, no baseline, no comparison against the previous scan. Risk debt 13,538.76 is a decimal with no unit and no reference point. A user could not tell whether it was good, bad, improving or deteriorating. For a platform whose proposition is continuous monitoring and provable resilience, the absence of change over time was the central gap.
Everything was weighted equally, so nothing was prioritised
The product sells knowing what matters most. The dashboard made no claim about what mattered most and pushed critical exposure below two full rows of counting tiles.
Legibility compounded all of it
Small white text on large areas of saturated orange and mid-blue, heavy white cards with drop shadows layered beneath and inconsistent number formatting within a single view.
Diagnosis

The system encoded the wrong variables

The interface was not hard to read because it was unattractive. It was hard to read because the visual system encoded the wrong variables. Size meant nothing, colour meant three things and totals looked like parts.

That reframing told me where the work was. It also told me where it was not.

Scope

A UI-scoped rebuild

Three months, one front-end engineer and a product already in use.

The statement of work was explicit: no changes to existing functionality at this stage, with functional opportunities left to a future phase. The information architecture was not in scope either. The navigation, the object model of clients, projects, realms, assets, targets, applications, findings and attack surfaces, plus the data structure underneath, all stayed as they were.

An inception phase set the rest. Stakeholder input, a page-by-page review and an agreed set of screens to upgrade, with room to adjust the mix as the review found things.

8 to 10 existing screens
Visual design upgraded across the working product, using standard, high-performance charting components rather than bespoke visualisations.
2 to 3 new executive pages
Summary views built for non-technical stakeholders, CFOs and CEOs among them.
A themeable design system
Light and dark support, component libraries with full state variations and typography guidelines.
Accessibility
Updated interfaces meeting contrast and usability standards.
Prototypes of key flows
Basic Figma prototypes demonstrating interaction intent, without changing functionality.
A complete Figma file and handover
The full design system and every updated screen, plus handover notes written for the developers building it.

That constraint fitted the problem. What the product contained and how it was organised were not what made it hard to read. How it was rendered was. So the entire improvement had to come from the visual system: encoding, hierarchy, colour, typography and layout.

It also meant the engineer could rebuild against a component library without waiting on structural decisions, which is what made twelve weeks viable.

Accessibility

A design driver, not a compliance step

Some of CyScan's users have dyslexia. That was not a hypothetical persona or a checklist item. It was a known characteristic of people using the product daily. It moved legibility from a quality bar to a core requirement.

The existing interface was close to a worst case: small white text on large saturated grounds, competing surfaces and pure white against pure black in equal measure. High-saturation backgrounds are a known source of visual strain for dyslexic readers. Maximum black-on-white contrast can produce the same effect.

I built a four-theme system from two independent, user-controlled toggles, dark mode and accessibility mode, giving Dark, Light, Dyslexia (Dark) and Dyslexia (Light).

Accessibility is a user preference sitting beside dark mode, not something buried in settings or inferred from a profile flag.

Typography is identical across all four themes. The variants are entirely colour. That was deliberate: a user switching modes gets a genuinely equivalent interface, not a separate and lesser one.

What changes is the ground and the ramp.

Dyslexia (Light)
Replaces the cool near-white surfaces with warm off-white and cream tones, removing the glare of a bright white ground.
Dyslexia (Dark)
Replaces the blue-black surfaces with desaturated neutral greys, softening the contrast between panel and page.
No pure white or pure black text
Standard dark sets body text at pure white and the dyslexia variant steps it down to an off-white. Standard light uses a near-black and the dyslexia variant lifts it to a softer dark grey. Contrast stays comfortably readable but stops short of the maximum that causes text to shimmer.
The severity ramp is desaturated, not reordered
Critical, High, Medium, Low and Information keep their relative positions and their distinguishability, at lower intensity.
The summary dashboard in the standard dark theme, on blue-black surfacesDark
The summary dashboard in the standard light theme, on cool near-white surfacesLight
The summary dashboard in the dyslexia dark theme, on desaturated neutral greys with off-white textDyslexia (Dark)
The summary dashboard in the dyslexia light theme, on warm off-white and cream surfaces with softened dark grey textDyslexia (Light)
The same screen across all four themes. Layout and type are constant. Only the colour system resolves differently.

One naming decision is worth stating. The token system names the variants after dyslexia, but the user-facing control says Accessibility mode. Nobody should have to identify themselves as dyslexic to a piece of software to get a legible interface. The internal name describes the design intent. The external label describes the choice.

System

What shipped underneath

Colour

Primitives resolved through semantic groups

I built the palette as primitives resolved through semantic groups, covering brand, system background, text, text inverse, status colours and borders, with each semantic token pointing at a primitive rather than a hex value. Every one of the thirty theme variables resolves across all four themes from a single definition.

The colour token structure, showing semantic groups aliasing primitives and resolving across four themes
One token set, four resolutions. Semantic groups alias primitives, so a component styled system background 01 is correct in every theme without conditional logic.

This is what made four themes affordable. Without semantic aliasing, four themes is four times the design work and four times the front-end work. With it, it is one system with four resolutions, which is the only reason a twelve-week timeline could carry an accessibility requirement at all.

Typography and components

Defined once, built against

The type scale was defined once and applied across all themes, enforcing consistent hierarchy on screens that previously mixed weights, sizes and number formats within a single view.

I designed and documented a component library in Figma, mirrored in Storybook by the front-end engineer: navigation items with state and count variants, tabs, cards, charts and data displays. Documenting in both meant the engineer built against a specification rather than against screenshots.

Every component was documented with its full state matrix, so theme behaviour was verifiable per component rather than caught late at page level.

The button matrix, showing every variant and state in both light and dark
Buttons, every variant and state, in both grounds.
The input component in placeholder, focused and filled states
Inputs, from placeholder through focus to filled.
The search component in rest, focused and active states, the last with a clear action
Search, with the clear action appearing only once there is something to clear.
Responsive

Pinning content on wide displays

I defined breakpoints from tablet through to extra-large displays. Beyond 1280px, content pins centrally rather than continuing to stretch. Dashboards on wide monitors keep a readable line length and a stable scan path instead of dispersing across the viewport. On a data-dense product where users scan rather than read, that is a legibility decision as much as a layout one.

Solution

The redesign

Summary

Magnitude carried by the mark

The redesigned summary dashboard, with each domain shown as a proportional ring and its severity breakdown listed beside it
Severity encoded by proportion, with colour paired to a label and a value in every case.

Severity is now carried by a proportional mark. Attack surface, findings and risk debt each read as a single ring with the breakdown beside it, so magnitude is expressed by the chart rather than by identically sized coloured blocks. The charts are standard high-performance components rather than bespoke visualisations, which keeps them fast on a data-dense page and maintainable by the team after handover.

Colour is never the sole carrier of meaning. Every severity appears as a swatch, a text label and a value together. That holds for colourblind users, in greyscale and under both reduced-intensity themes.

Chrome and data are separated in the palette, so interface colour no longer competes with severity colour for the same channel.

Trend

The dimension the old product had nowhere

The most substantial gap I found was the absence of change over time. A platform selling continuous monitoring showed only a present-tense snapshot.

Findings plotted as stacked bars across twelve months, split by severity
Twelve months of findings by severity. The first thing the old dashboard could not answer: is this getting better or worse.
The same twelve months shown as remediation progress, with tracked, closed and open plotted together
The paired view: tracked against closed against open. Same component, second question.

Findings are now plotted across twelve months by severity, with a second tab showing remediation progress: what is tracked, what has been closed and what remains open. That pairing answers two different questions with the same component. How exposed are we and are we actually fixing things.

Two audiences

Standard and executive views

The client screen carries two views behind a segmented control in the header. Same client, same data, two entirely different framings of it.

The standard client view, showing severity breakdowns across attack surface, findings and risk debt with tabs to remediation, details and reports
The operator's view. Severity breakdowns across attack surface, findings and risk debt, with remediation, details and reports one tab away.

Standard is the working view. It opens on the full severity breakdown across attack surface, findings and risk debt, with tabs through to remediation, details and reports. Everything needed to move from a number to a specific finding to an action is on the screen or one click from it. This is for the person whose job is to fix things.

The executive client view, reduced to a single graded health score on a visible scale, paired with health over time
The same client, reduced to a single graded score and its direction of travel.

Executive strips all of that away. New summary pages for non-technical stakeholders were a defined deliverable. DCS brought the health score forward as the business need behind them. Leadership wanted a single number that answered how exposed are we without requiring interpretation.

My work was deciding how that number should behave as an interface: that it carries a severity grade rather than standing alone, that it sits on a visible scale so the number has context instead of needing to be memorised, plus that it is paired with health over time so the reader sees direction of travel alongside position. That pairing is the whole first screen. An executive gets where they stand and which way it is moving without reading a single finding.

The executive view expanded, revealing findings progress and the project breakdown beneath the health score
Progressive disclosure. The detail is one click away, not in the way.

This is where the product's commercial argument becomes an interface decision. If cyber risk is a business risk, a board-level user has to read the risk position without first becoming a security analyst. The design problem was not building a second product. It was deciding what an executive does not need to see, which is a harder question than what they do.

Working

Keeping the business in the room

The Chair, CEO and CTO joined regular review sessions across the engagement. On a three-month rebuild with a single engineer, that cadence kept scope honest. Decisions were made in the room rather than deferred. The product's commercial framing stayed connected to interface decisions rather than being reconstructed afterwards.

The theme system was reviewed by the client's team via a structured document covering all four variants. It came back with positive feedback and no change requests.

Handover

Leaving it buildable

Key flows were prototyped in Figma at a basic level, enough to demonstrate interaction intent without implying any change to how the product works. The engagement closed with a complete Figma file holding the design system and every updated screen, handover notes written for the developers implementing it, then a final walkthrough with the stakeholders who had been in the reviews all along.

Outcome

Shipped and in daily use

Easier to read, at a glance
The C-suite and wider team reported that the interface is easier to read and surfaces the insights they need at a glance. That is the brief, stated back in their words rather than mine.
A foundation, not a set of screens
The four-theme token system, the component library and the responsive rules shipped as the platform's design foundation, giving the team a documented system to build on.
Reflection

What I would do differently

Validation was lighter than I would want
The theme system was reviewed by the client's team and returned without change requests, but that is stakeholder review, not usability testing. With more time I would have run moderated sessions with dyslexic users on real tasks such as locating the highest-severity finding or comparing two clients, then measured completion and time on task across all four themes. Positive feedback with no changes requested is encouraging. It is weaker evidence than task performance.
The accessibility variants are colour only
Holding typography constant kept the system tractable and the modes equivalent. It was the right call for the timeline. But contrast and saturation are only part of what affects dyslexic readers. Line length, line height, letter spacing and paragraph alignment all matter. A fuller version of this work would extend the theme system into typographic tokens, not just colour ones.
Critical and High remain close
Both sit in the red family, separated primarily by lightness. It preserves the intuition that both are urgent, but the two most consequential categories are the hardest pair to tell apart at speed. I would want to test whether separating them by hue outperforms the current ramp before changing it.
The all and critical duplication survived
The summary screen still shows each domain twice, side by side. That is inherited structure, outside what this engagement covered, but it is the remaining place where the dashboard asks the user to diff two layouts rather than stating a difference outright.