← Lab

Exploring Experiment 08

Live Cluster Browser

What does it look like when an algorithm finds the counterfeit ring hiding behind dozens of storefronts?

Built with
  • Figma
  • Claude Code
  • SVG
  • Carbon icons
  • Astro

The third step after From Marker to Pixels: the same network intelligence graph, from a marker sketch, to a Figma mockup, to something you can run.

Cluster Browser Brand X, all marketplaces
Seller Association
  1. Run the algorithm, or press Step to walk through it one rule at a time.
Threat analysis No groups flagged
0
Sellers flagged
0
Groups
0.00
Threat level
0.00%
Pattern recognition
0 Cluster Selected Drag nodes, hover links, filter with the legend.

All data is fictional. IP addresses, phone numbers and domains use ranges reserved for documentation and testing.

From marker to live code

The graph started on a paper pad at OpSec Security, became a Figma Cluster Browser, and years later became the live experience above. Hand-drawn, persona-driven sketches won leadership buy-in for the network intelligence MVP before a single screen was designed. The live rebuild was refined in versions, each one critiqued and kept so the progression stays visible.

Pen sketch of the network graph: linked phones and addresses, an alert icon with auto-linking, and a floating data panel
01 Marker sketch: auto-linking, and details that wait until you hover.
Pen and marker sketch of a tinted panel grouping close associations and an association dragged into focus
02 Marker sketch: close associations in a 10%-20% tinted group.
Figma Cluster Browser with blue entities, red storefront capsules and the Seller Association arc on a dark canvas
03 Figma: the Cluster Browser, with storefront capsules and the Seller Association arc.
Figma threat panel with threat level and pattern recognition scores
04 Figma: the threat panel for a selected cluster.
Version 1.0 of the live graph, laid out by a physics simulation
05 Version 1.0: a physics layout proved the idea, but nodes piled up and labels collided.
Version 1.2 after a run, with red capsules and the Seller Association arc
06 Version 1.2: composed by hand to match the Figma frame.
Version 1.3 with the rule rail, the graph and the legend filter
07 Version 1.3: a rule rail to step through the detection, and a legend that filters.

Version 1.4: refining the score

Version 1.4 goes back to the threat panel from the Figma frames and refines the scoring itself, with IBM Carbon icons throughout.

  • Score badges on the canvas. Each flagged group carries its own badge, as in the mockup: a pattern recognition pill, a large threat level, a severity tag and a ten-segment meter.
  • Severity in Carbon status colors. Critical from 80, high from 60, medium from 40, so a score reads at a glance before you read the number.
  • A threat strip with a visual per metric. Sellers as a row of people, groups as lettered chips, threat level as a meter and pattern recognition as a bar, all in tabular numbers.
  • Selection focus. Selecting a group fills its capsules with a soft red glow and steps everything else back, the way the Figma frame dims unselected clusters.
  • Carbon icons. Router, phone, home, store, email, location, user and thumbs-up for the entities, plus security, meter, chart and notification icons in the panels.

Version 1.3: step through it

Version 1.3 keeps the 1.2 composition and makes the explanation interactive. The goal is the same open-box idea as the shipped product: an analyst should be able to see each rule fire, go back to any rule, and understand why a group was flagged.

  • Step through the rules. Run it, pause it, or step one rule at a time. Every rule in the progress rail is a button, so you can jump back to rule 2 and see its evidence again.
  • The legend is a filter. Hover a type to preview it, click to keep only that type in focus, following Carbon's legend behavior.
  • Links explain themselves. Hover or tap any link for the relationship, the country and when it was first seen, from the sketch note about edge metadata on hover.

Version 1.2: closer to the Figma

Version 1.0 proved the idea, but its physics layout let nodes pile up and labels collide. Version 1.2 goes back to the original Figma frame and composes the graph by hand, the way an analyst would want to read it.

  • The IP is the hub. Phones and street addresses radiate from it, with country chips on the links, as in the mockup.
  • Storefronts sit in rows. Each home site's storefronts line up inside a capsule, and flagged links carry a small red marker.
  • The Seller Association arc is back. The long curve from the mockup now draws in when the algorithm proves both storefront groups belong to one operator.
  • Two-way arrows and calmer spacing. Larger nodes and labels on an even grid, and no more overlapping text.
  • Still interactive. Drag any node, zoom and pan, and run the same detection rules as version 1.0.

Technology stack

Everything runs in the browser. There is no charting library and no server behind the demo.

Visualization
Hand-written inline SVG: nodes, two-way arrows, country chips, flag markers, group capsules and the Seller Association arc. Labels are measured with the real font so every pill fits its text.
Layout
Versions 1.2 to 1.4: a composed canvas based on the Figma frame. Version 1.0: a custom force-directed simulation (springs, repulsion and cluster anchors) running on requestAnimationFrame.
Interaction
Pointer Events for mouse, pen and touch dragging, with pointer capture. Zoom and pan move the SVG viewBox, plus trackpad pinch. Hover and tap detail panels, keyboard focus on every node, and ARIA tabs for the versions.
Geometry
Cubic Bezier math for the association arc and its tag, padded bounding capsules in 1.2, and convex hulls (monotone chain) for the group outlines in 1.0.
Motion
CSS transitions and keyframes, stroke-dashoffset line drawing, and an IntersectionObserver that draws the graph in when it scrolls into view. All motion respects prefers-reduced-motion.
Detection logic
A scripted, rule-by-rule run over the graph data: shared infrastructure, home sites to storefronts, one operator, then the bridge to a second seller. Each rule writes a plain-language line to the log.
Design system
IBM Carbon tokens (Gray 100 theme, Blue 60 primary action, Red 50 status color, Carbon status colors for severity), IBM Plex Sans and Mono, and IBM Carbon icons in version 1.4 (Material Design icons in earlier versions).
Framework and code
TypeScript in Astro 5 components, bundled by Vite and served as a static page.
Data
A fictional network kept in the page. IP addresses, phone numbers and domains come from ranges reserved for documentation and testing.
Build and hosting
Designed in Figma, built with Claude Code, versioned on GitHub and deployed to Cloudflare by GitHub Actions.
The original product
At OpSec, the real system ran on graph databases (Neo4j, with ArangoDB evaluated in discovery) and a third-party graph visualizer. This demo recreates the experience, not that backend.

What the algorithm is looking for

At OpSec Security, analysts protected brands from counterfeit sellers on Amazon, eBay, Taobao and other marketplaces. Taking down one storefront rarely mattered: the same operator would open another the next day. The real target was the operator behind the storefronts.

We loaded years of enforcement history into a graph database (Neo4j, with ArangoDB in discovery) and looked for shared infrastructure. One IP address controlling several phone numbers and home sites, and those home sites listing a cluster of storefronts, is a pattern no honest seller makes. The graph surfaces it in seconds. A spreadsheet hides it across thousands of rows.

Design decisions carried into the demo

  • Start from the pattern, not the table. The algorithm groups and colors the ring, so analysts begin with the answer and drill into the evidence.
  • Every flag explains itself. The step log names the rule that fired and the entities it used, the same open-box principle as Open-box AI Tagging.
  • A 10% tint, not a wall of red. Groups get a low-opacity capsule so the nodes inside stay readable, straight from the margin note in the sketch.
  • Details on hover. A dense graph stays calm until you point at a node.
  • Not everything is guilty. Seller 002 shares no infrastructure, so it stays blue. A tool that flags everyone gets ignored.

How it works

Both versions are plain SVG with no charting library. Version 1.0 uses a small force-directed simulation: links act as springs and nodes push each other apart. Version 1.2 places every node on a composed canvas instead, then recomputes links, capsules and the association arc whenever you drag something. Zoom and pan move the SVG viewBox, so text stays sharp at any size.

Read the full project in OpSec: Rethinking Marketplace IT Security for Analysts, and the five-step process I design with in my design process case study.