Giulia Bins

Work / Tradeverifyd

The product’s most used screens

A supply chain product lives on whether people trust its data. And there is a lot of data, so it can’t look like an airplane cockpit. I redesigned the screens where that trust broke: empty screens that said nothing when they had four different things to say, and a supplier map that buried the one risky supplier.

Role
Staff Product Designer
When
June to October 2026
Product
Supply chain intelligence platform, B2B
Focus
Product design, critique to shipped, data you can trust

Note.The screens on this page are redrawn and simplified because of an NDA. Names, labels and data are fictional. The decisions and the reasoning are mine.

Context

Tradeverifyd helps companies see who they buy from, tier by tier, and what risk sits in that chain. The centerpiece is a supplier map: it starts from the customer's company and branches out to its suppliers, tier by tier, with risk scores, screening results and notes on every card.

People take what they see on these screens to their boss. If the screen looks sure when the data isn't, or doesn't show where the problem really is in the chain, the product fails at its only job.

Part 1

Empty screens that say why

The problem

Two backend fixes had just stopped the product from inventing suppliers when there was no trade data. The right call, with a side effect: a company with no records showed its own name and nothing else. A new customer's first screen was a lone box, with no status saying what had happened: still loading, something failed, or nothing found.

Supplier map · Acme Water Co.
Acme Water Co.Your company
Redrawn with fake data. What a new customer saw: their own name, alone.

One blank, four situations

That blank was doing the work of four different situations, and the customer couldn't tell them apart. All four read as "they have nothing on us." A failed load even said "nothing here yet", exactly like a healthy empty map.

  1. The data failed to load.
  2. The company isn't in our relationship data yet.
  3. Suppliers were found, but nothing connects them back to the company.
  4. We genuinely hold no trade records for this company.
Redrawn. Four situations hiding behind one blank screen.

What I did

I wrote the analysis and the spec, then a small system around it: loading, genuinely empty, error, and a rule of never showing a raw error message. Designed once, reused on search, the supplier map and monitoring. I shipped a shared empty state with a tone, and the four map states on top of it. Then I applied the same kit to the events feed, which read like a debug view.

!

We couldn't load this map

Something failed on our side. Your data is fine.

Try again
?

Still mapping this company

Its suppliers show up here as soon as we confirm them.

Add a supplier you know
0

No trade activity found

Try the parent company, or add the suppliers you already work with.

Search the parent company
~

Confirming connections

We found related suppliers and we’re confirming how they connect to this company.

Redrawn with fake copy. Each situation gets its own answer and a next step, without suggesting the data is incomplete.

Decisions that mattered

  • Tone is part of the message. Finding no trade activity says nothing bad about the customer's suppliers, so that state stays neutral, never a warning color.
  • Don’t fill an empty screen with the wrong thing. One idea was to show a related company that had more data instead. I said no. That company had been sold years before, and it only looked related because of an error in the data. Showing the wrong company is worse than showing a clear empty screen.
  • Copy without promises. No apology, and no "we've flagged it" when nobody had agreed that this opens a ticket.
  • Don't guess the state from counts. A map can be full of suppliers while the company itself connects to none of them. That turned the design into a backend requirement: the data has to say why a map is empty, not only that it is.
  • Ship only what's true today. Only the failed-load state shipped behavior. The others waited until the data could say why.

Part 2

A supplier map you can read

The problem

Customers couldn't find the supplier that mattered. I walked the live product and logged nine problems: a nagging banner, a toolbar so full it clipped its own navigation, lines between suppliers you couldn't follow, a side panel that opened with an internal ID.

Then I counted what the cards carried on a large map. One label, about where the data came from, was on every single card, so it told nobody anything. The one supplier on a sanctions list looked like all the others, and its loudest element was that same label.

Measuring beat opinion. Showing that the same label sat on every card settled what “it feels noisy” never could.

What we decided

I brought the critique and the numbers to a UX call with product and engineering. We decided together: drop the data source label and keep a label only when it tells the customer something that matters, order suppliers by how critical they are, soften the lines, and put the score first in the side panel.

Then I turned the auto-generated meeting summary into one tracked list, fixed two errors in it, and flagged three items that read as decided but weren't, so nobody built them.

What I changed

  • Navigation where people look for it. The list of maps moved to the left, the map's title comes first, and the tabs sit right under it.
  • The list shows each map's status. A risk dot per map, a pulse when something in it is critical, a warning, a loading sign. You know where to look before opening anything.
  • Calmer connections. Softer lines that show the path without fighting the cards.
  • Riskiest first. Suppliers ordered by risk grade, then whether they carry a finding, then how severe, then how close they are. A flagged supplier pulls its whole path up with it.
  • Critical can't be missed. A serious finding, like sanctions or forced labor, turns the card red whatever the score says, draws its path in red, and drives the counts so the page can't contradict itself.
  • No repeated information, and real flags. The label on every card and the internal ID are gone. Only what the customer declared and real screening findings get a tag. Country codes got real flags, not emoji, which break on Windows.

I built it as a prototype with the real product components, not mockups, with a note for engineering on everything the product still lacked for the prototype to be complete.

These screens are protected

They are redrawn with fake data, and I share them on request. Enter the password to see them, or ask me for access.

What came next

I filed the next layer as eight design issues: the overview, the header, a worst-first list, the hand-off to the AI assistant, lean cards, a side panel you can trust. While prototyping I also found a real bug, a score that never updated after discovery, and measured it before raising it: latent, not yet visible to customers.

Result

Failed loads stopped looking like empty maps. The data now says why a map is empty, which the new screens need. The supplier map decisions were tracked from critique to shipped in one place, and the next layer is defined as eight design issues.

To be clear: the prototype was never meant to be merged. It was the spec engineering built from.

A design problem is often a data problem in disguise.

What I took with me: the most useful thing the empty screens produced was the list of what the data couldn't say yet. And when a room argues about how something feels, count it.