A cloud resource dashboard with filters, a drill-down graph view and an export action

Capital One

Resource Dashboard

Engineers responsible for cloud resources had no single place to see them. Answering “what do I own, and what needs attention” meant three tools and a spreadsheet. I owned the dashboard that replaced that end to end, from research and requirements through design, build and enterprise release: one surface, two ways through it, and an export at every level. The demo linked above is a simplified, scrubbed recreation of it, rebuilt in public with invented data.

Open the rebuild A public rebuild of the internal tool, with the data scrubbed · source
RoleDesign engineer,
front end
StackReact, TypeScript,
MUI, AG Grid
ScopeIA, components,
end-to-end flows
StatusReleased to all
enterprise users
NoteIf you want to know more, let me know!
Context

Everything was somewhere, nothing was anywhere

The data already existed. Ownership lived in one system, compliance jobs in another, the resource inventory in a third, and the way you answered a question about your own infrastructure was to open all three and reconcile them by hand.

That is a shape of problem I keep running into: nothing is broken, every individual tool works, and the entire cost sits in the seams between them. It never gets filed as a bug because no single step is wrong. It just quietly taxes everyone who has to do it.

Key decisions

Two views over one dataset

Two groups of people arrive at a tool like this with genuinely different questions. One has a job to do today and wants the shortest path to it. The other is exploring, and needs to understand the shape of what they own.

Rather than average them into one compromised view, the dashboard has two and makes the default the urgent one. The job-focused view opens first, sorted by due date, because someone arriving without a plan is usually arriving because something is due. The hierarchy explorer is one toggle away for everyone else.

The dashboard in graph view, the Table toggle pressed, and the same filtered set as a table scrolled through all eight rows
One dataset, two readings, and the toggle between them. Same search, same filters, same eight resources: what changes is whether you are looking at the shape of what you own or at the list of what it wants from you.
Filters

Category, region and environment. They persist across the view toggle, so switching does not cost you the narrowing you just did.

Resources with jobs

A second source joined in rather than a filter over the first: which of your resources have work outstanding.

Table and Graph

Two readings of one dataset. The urgent one opens first, because someone arriving without a plan is usually arriving because something is due.

Export

Scoped to what is on screen: current filters, current level, nothing else.

The dashboard's default view, with its filters, view toggle, jobs filter and export called out
Point at a label and the picture goes there. Four controls, and the argument for each is that it survives the switch between views.

Drilling without getting lost

The explorer goes environment, then region, then type, then the resource itself. Four levels is enough to get lost in, so every level carries its own counts and a breadcrumb back out.

The counts are the part that earns its place. A level that only lists categories tells you where you can go; a level that lists categories with how much is in each tells you where you should go. It is a small addition that changes the drill-down from navigation into triage.

Drilling from environments to prod, to us-east-1, past four categories to ELB, and into the load balancer itself
Four levels, three clicks, and the breadcrumb in every frame. The counts are what turn this from navigation into triage: a level that lists categories tells you where you can go, and a level that lists them with how much is in each tells you where you should.

An export at every level

Every table exports, and what it exports is exactly what you are looking at: current filters, current level, nothing else.

This sounds like a checkbox feature and was one of the most-used things in the tool. People do not live in dashboards. They come in, narrow down to the thing they care about, and then need it somewhere else. A ticket, a spreadsheet, a message to the team that owns it. A dashboard that cannot hand off its own answer sends everyone back to the reconciling-by-hand it was built to remove.

Two filtered rows on screen, and the downloaded file below containing those same two rows
What comes out is what is on screen: current filters, current level, nothing else. Both ARNs are in the frame twice, once in the table and once in the file, which is the only way that claim gets checked rather than taken on trust.

A real boundary, not a prop

Every screen here fetches. The data layer is typed fetch functions behind small hooks that track loading, error and refetch, with a mocked REST surface behind them at the service-worker level rather than an imported array pretending to be a response.

That distinction is why the loading skeletons and the retry banner exist at all. A component handed its data synchronously has no in-flight state to design, no failure to recover from, and no way to find out it was wrong until it meets a real server. The same handlers run in Node for the tests, so those drive the actual fetch, loading, render, error and retry cycle instead of asserting against props.

One resource detail page scrolled through its full height: identifiers and metadata, ownership, five tabs, a compliance timeline and the jobs outstanding against it
One resource, top to bottom, at the length it actually is. Every field on the way down is a value that arrived over the boundary described above, with a skeleton in its place while it was in flight. The page is long because that is the answer: this is what it takes to stop somebody opening a second tool.
Impact

From three tools to one

The reconciliation step is gone. What used to be a cross-tool search is a paste-an-identifier lookup. Which of your resources have work outstanding used to be invisible, and is now the screen that opens by default.

The dashboard shipped to enterprise users. Figures below describe the shape of the work rather than usage numbers, which are not mine to publish.

BeforeAfter

No single view of your resources

One surface, two ways through it

Search across several tools

Paste an identifier, get the resource

Outstanding work invisible

Default view, sorted by urgency

Manual, fragmented exports

One-click export at any level

Metadata hard to parse

Organised for scanning

No compliance history

Event timeline and table