Diandra Grubbs
Control Tower 2.0 / Internal operations platform / Retool → React migration / Case study
Product design · IA & interaction

Rebuilding a support platform from the information up.

Control Tower is the internal platform every Ritchie Bros. support team uses to move a transaction from auction to payment to released asset. I re-architected it around how that work actually happens — grounded in an audit of 51 real support actions — and led both the product definition and the design.

Role
Product Designer — owned IA, interaction & product definition
Team
2-person design team · no PM counterpart
Scope
6 platform sections · 5 support roles
Timeline
[ Add dates ]
Tools
Figma · HTML prototypes · SOP audit
01The product

A control tower for every transaction

Ritchie Bros. runs one of the world's largest marketplaces for heavy industrial equipment. Behind every sale is a chain of people making sure it completes.

Customer Care Agents answer buyer and seller questions. CSMs manage relationships. Fin Ops reconciles money. Lien Specialists clear titles. Each of them lives in Control Tower — the internal tool that lets them see and act on what's happening across an account.

The name is the right metaphor: like air-traffic control, the job is keeping many moving things coordinated and intervening at exactly the right moment. The platform's job is to give each role a clear line of sight and the right controls — without burying them in everything the system could show.

This project was the 2.0: a full migration off a low-code Retool build and onto a purpose-built React application — and the chance to fix the structure, not just the surface.

02The problem

A tool that grew, not one that was designed

The Retool version had been built feature-by-feature, in response to whatever request came in next. It worked — but the structure underneath had never been designed. The cost showed up in the day-to-day:

03The approach

Start with the work, not the screens

Without a PM, I could have started sketching layouts. Instead I started with an audit. I went through the team's standard operating procedures and pulled out every discrete thing a support user actually does in the platform — 51 distinct actions in all.

That library became the source of truth for everything that followed. Each action got mapped to the roles that perform it and the data it touches. Patterns emerged on their own, and the platform's structure fell out of the work instead of being imposed on it.

51 audited SOP actions
grouped by role
& data →
6 primary platform sections
Homerole-specific
Eventswork queue
Unified Customer Recordthe account
Payment Managementmoney
Asset Supportequipment
Adjustment Requestscorrections
04The architecture

Six sections, each earned

The six sections weren't a navigation guess — each one is where a cluster of audited actions naturally lived. I sequenced them around how work flows, leading with Events, the queue where a support user's day actually begins.

01

Home

Role-specific landing. What a Care Agent needs to see first is not what Fin Ops needs.

02

Events

The work queue — the entry point to a user's day, where incoming items get triaged and routed.

03

Unified Customer Record

One search, the full account. The flagship surface for resolving anything tied to a buyer or seller.

04

Payment Management

Shared by Fin Ops and support, organized into four task-scoped subsections.

05

Asset Support

Everything tied to the equipment itself, from the support side of the lifecycle.

06

Adjustment Requests

Corrections and exceptions, with approval handled as an access level rather than a separate role.

05Deep dive · flagship

Unified Customer Record

One search. Full picture.

The UCR was the answer to the platform's biggest failure: that one customer lived across many screens. The promise is simple — search once, and get the whole account in a single, navigable place.

▸ Replace with: UCR full-page layout (identity header + section nav + content)

Your screen here Drop in your Figma frame of the three-layer page: sticky identity header, section navigation, and the dynamic content area.

A page in three layers

The record holds a lot, so the structure has to keep the user oriented no matter how deep they go. A sticky identity header anchors who you're looking at, section navigation sits below it, and only the content area scrolls. You never lose the thread of whose account this is.

A search model built on chips

Search uses composable chips rather than a single fuzzy field. The model encodes real rules — a sale-number path is mutually exclusive from person chips — so the system can't be asked an ambiguous question. Results land in a persistent slide-over tray with full round-trip navigation back to where you started.

One drawer, two jobs

I designed a hybrid drawer that idles as a notes surface and becomes a detail inspector on demand — so the same persistent space serves both the "jot something down" and "look closer" needs without a second panel. It pushes content rather than covering it, using horizontal auto-layout.

Payments that route themselves

The Payments tab opens with a Needs Allocation section — the work that actually needs a human — and a decision-tree remediation flow walks the user to the right fix. Out-of-balance payments were classified as invoice-initiated, so they live where the user already thinks to look.

▸ Replace with: search-tray round-trip · or the hybrid drawer in both states

Your flow here A short before/after or interaction sequence reads stronger than a static screen — show the search → tray → record round-trip, or the drawer idle vs. inspecting.
06Deep dive · the queue

Events

Events is where the day starts, so the layout is built around triage. I explored a status-grouped accordion that merges each event card with its buyer detail inline — letting a user assess and act without leaving the queue or opening a new screen.

The open questions I worked through here were about multi-event expansion (how many things a user can hold open at once before the queue stops being a queue) and the navigation pattern back to a full buyer record. I carried the same IA-first discipline from the UCR straight into it.

▸ Replace with: status-grouped accordion, one row expanded

Your screen here Show the accordion with one status group and a single event expanded to its inline buyer detail.
07System & decisions

Patterns, and the tradeoffs behind them

Owning the work solo meant every structural call was mine to make and mine to justify. I logged the reasoning as I went — here are a few of the load-bearing ones.

Action surface

Slide-over tray as the default

One primary pattern for actions — a slide-over tray — with modal, inline, and stepped-tray layered in only where the action type genuinely demanded it.

Tradeoff  A single dominant pattern is easier to learn, at the cost of forcing a deliberate justification each time an action needed to break from it.
Notes

Write anywhere, read in one place

Notes can be created contextually in any section, but their full history lives unified on the customer record — filterable by where each was written.

Tradeoff  Contextual creation adds a sync model to maintain, but it matches how people actually think: capture in the moment, review in one place.
Components

Just-in-time, not up-front

I built components as patterns proved themselves across screens rather than speculating on a full library before the structure had settled.

Tradeoff  Some rework as patterns matured — but far less than committing early to abstractions the work hadn't yet earned.
Color

Five semantic colors, mapped to meaning

A constrained five-color semantic system, each mapped to a specific UCR surface — so color always carries meaning rather than decoration.

Tradeoff  Restraint means resisting "just one more" color; the payoff is that users can read state at a glance.
Status / action Information Resolved Needs attention In progress

Semantic mapping shown as placeholder — swap in your real five-color assignments.

08Impact

What it changed

⚑ Fill these in — don't ship the case study without them
[ metric ]
A hard number is strongest — e.g. time-to-resolve a customer issue, before vs. after.
[ metric ]
Adoption or coverage — roles onboarded, % of SOP actions now supported in one place.
[ qualitative ]
A direct quote from a Care Agent, CSM, or stakeholder carries real weight here.

If the platform hasn't fully shipped, that's fine — reframe this section as "Validation": stakeholder buy-in at the director presentation, prototype testing results, or decisions adopted into the build. Reviewers respect honesty about where a project stands more than invented numbers.

09Reflection

Owning the whole question

The thing I'm proudest of isn't a screen — it's that the structure holds up.

Because the architecture came out of a real audit of real work, every later decision had something to be checked against. When I wasn't sure whether something belonged in Events or the UCR, the action library answered it.

Working without a PM forced me to own the product question as well as the design one — what this should be, not just how it should look. That's the part of this work I most want to keep doing.

Next, I'd pressure-test the IA with the roles I designed it around and let real task-completion data, not my assumptions, decide where the structure flexes.