Malanta.ai · 2024-2026
Imminent Threats: From a Narrow List to a Full Analyst Workflow
My role: Lead Product Designer
- 3
- Ways to group the same list: attack infrastructure, assets, exposure type
- 2
- Main users, and each one picked a different view
- 2 days
- Figma screenshots to a 6-page clickable Cursor prototype
- 37
- Color tokens in the design system this workflow runs on
Tools
Teams
Bottom line
My role: Lead Product Designer. I owned the product framing and interaction architecture for the Imminent Threats workflow, from first sketches to final delivery, including the design system it's built on.
The problem: One long list of hundreds of threats. In session recordings users scrolled, clicked at random, and left, and in conversations they told us they couldn't find their way.
- Product's first fix, nesting alerts, confused users. Product then moved to my proposal: attack infrastructure first, with a toggle to group by asset or exposure type.
- In every view, each row still shows how many attack infrastructures and assets are involved, so product's main signal is never hidden.
- Built the three-lens model on a governed design system (37 color tokens, 14 text styles, 11 component families); the same system now runs IoPA, Scopes, and the threat card, not just this screen.
Challenge
Approach
Design system, in service of four workflows
Built as delivery infrastructure, not decoration
The three-lens model only holds together if every card, badge, and panel across Assets, Attack Infrastructure, and Exposure Scenario reads as one product. That meant governing a Figma library, a component Gallery, and the shipped code as one distributed source of truth, with a named rule for which layer leads when two disagree.
This is the same system that runs IoPA, Scopes, and the threat card: one set of tokens and components, not a separate visual language per screen. Documented here because Imminent Threats is where the governance model (the Gallery contract, the light/dark parity check, the code-reveal loop) took shape first.
I treated the Gallery as the contract surface: every variant had to be visible in light and dark mode before it counted as done, and I verified the Figma MCP integration end to end (auth, file key, metadata reads) before trusting it in a design review, the same way I'd verify a junior's claim that something works.
That self-initiated build fed into the design system's move to Storybook: once engineering shipped the components there, I could update them directly alongside Cursor instead of routing every tweak through a handoff.
37
Color tokens (Figma Color Styles)
14
Text style variables, 2 typefaces
11
Documented component families
2
Modes: light + dark, parity-checked
Blue scale
100
#F0FDFF
200
#D9F8FE
300
#8CC7DC
400
#06B6D4
500
#028FC2
600
#0E7490
700
#155E75
800
#164E63
900
#012F69
Foundation
Canvas
#FAF9F5
Light 100
#FFFFFF
Light 300
#F2F2F2
Light 400
#D1D1D1
Dark 600
#0F3443
Dark 700
#0D2C38
Dark 800
#0A212A
Dark 900
#010B0D
Ascent
200
#F6E2D0
300
#FFB37F
400
#BCCCEC
500
#7E78C1
600
#AD009F
700
#1447E6
Status & category backgrounds
Low
#DCFCE7
Critical
#FFE2E2
High
#FCEBD4
Medium
#FFF1C8
New
#E1F7FF
Manual
#DBEAFE
Auto
#F3E8FF
Reputation
#FFE1FD
- Wrote visual consistency as policy with documented exceptions, not tokens alone: for example, a uniform 1px icon stroke everywhere except the page-level help icon, which stays thicker on purpose so it doesn't get lost.
- Gave every Gallery variant a code-reveal control so an engineer could copy exact JSX instead of eyeballing a screenshot, closing the parity loop deliberately instead of hoping it held.
Impact
What I'd do differently
Retrospective
- We didn't measure the grouping properly: no dedicated tracking was set up for the toggle. Today I don't ship a feature without deciding first how we'll measure it: which view people use, and how fast they decide.
- Most validation with users came after the structure was already mostly set. Next time I'd test earlier, before the structure is final, even if the first draft takes longer.