Home Case Studies Work AI Playground About CV & Contact
English Español Français Deutsch
The Number 44
← Case studies Maps & Design Systems

Tracking the world's supply chain, one trip at a time.

Maps, trip tracking and a scaled component system for Brambles' Supply Chain Illumination (SCI) platform, covering 352 million physical assets moving across 300,000+ supply chains in 60+ countries.

Network Map. The birds-eye entry point into the whole network: asset and location clusters at a glance, quick filters for moving versus dwelling assets, and a running total. Every number on this screen is a real, filterable slice of the map beneath it, not a static count, so the wide view and the fast filter live in the same screen.

Project snapshot

One connected mapping and tracking system, designed for SCI and scaled across other Brambles products, rather than rebuilt per module or per team.

352m
physical assets tracked across the network
60+
countries the network operates in
300k+
supply chains covered
6
SCI surfaces sharing one map system: Network Map, Trips, Journeys, Locations, Asset Visibility & Insights on Arrival

The challenge, in short

A marker on this map is never just a pin. It's a pallet of vaccines, fresh produce racing a clock, or a part that stops a production line if it's late. Brambles moves 352 million physical assets through 300,000+ supply chains in 60+ countries, so showing the whole network was the easy part. The real design problem was speed: getting from "here's everything" to "here's what needs me right now."

Showing the whole network was the easy part. Making it fast to filter down to what mattered was the actual design problem.

A single trip's poly line broken into breached and optimal segments, with a moving circle and status bubble at the current position
One trip, full detail. Poly line, direction arrows and live status, the moment a user needs exactly one shipment's story.
The SCI Network Map in dark mode, with asset clusters, quick filters and a layers panel rendered against a dark basemap
Light and dark map styles. The same cluster and marker logic holds regardless of theme.
The Layers panel, showing layer type toggles, map style options and a globe/flat projection toggle
The Layers panel. Layer type, map style and projection, controlled from one place.

My role, in short

I own the UX for the Network Map, Trips, Asset Visibility and Locations surfaces on SCI, as Principal Product Designer at Brambles. The map system I built has since outgrown SCI, it's now the shared map language behind five Brambles products, maintained by 21 UX team members rather than by one person's design file.

Impact, in short

The map system this case study walks through didn't stay inside SCI. It's grown into the shared map language across Brambles, now built into 5 products, maintained by 21 UX team members, relied on by hundreds of enterprise brands and read by thousands of internal and external users every day.

5products now built on the shared map language across Brambles
21UX team members maintaining the system today
100sof enterprise brands relying on it daily
1,000sof internal and external users reading it every day

Try the map yourself.

The mapping pattern this case study describes was rebuilt in my AI Playground as a working, reusable component. This is the Playground, running, and it opens on the Overview: a live asset map with search, filters, clustering and layers, on fictional supply chain data.

Work in progress. The overview, dashboards, trips, campaigns and administration areas are open; other sections show as coming soon. Built from the Playground’s own design-system components by directing Claude and OpenAI Codex in VS Code, with GitHub Copilot inline, on fictional data throughout.

How the Playground works →

Live · password protected

This is the Playground itself, running.

Not a screenshot or a recording. It’s gated while it keeps evolving; if you’d like to try it, ask me for the password.

Don’t have the password? Email me or message me on WhatsApp and I’ll send it over.

Unlocked for this visit · interact directly aboveOpen full screen ↗
Overview map, live. The mapping pattern inside the Playground, opening on the Overview home page. Blurred until unlocked.

One trip, opened to the detail.

The same Playground, this time loaded straight into a single trip’s summary rather than the map’s Overview, so you can see the route, timeline and detail panel a trip opens into once it’s selected, not just the map it’s picked from.

Live · password protected

This is the Playground itself, running.

Not a screenshot or a recording. It’s gated while it keeps evolving; if you’d like to try it, ask me for the password.

Don’t have the password? Email me or message me on WhatsApp and I’ll send it over.

Unlocked for this visit · interact directly aboveOpen full screen ↗
Trip detail, live. The same Playground, opened straight into one trip’s summary rather than the map’s landing view. Blurred until unlocked.

The challenge

A marker on this map is never just a pin. It is a pallet of vaccines, a container of fresh produce with a clock running against it, or a part that stops a production line if it does not arrive on time.

Brambles moves physical assets through more supply chains than almost any other company on earth. Supply Chain Illumination (SCI), the platform I design for, exists to answer a genuinely hard question at that scale: where is a given asset right now, is it on schedule, and is it still in acceptable condition, across 300,000+ supply chains and 352 million physical units in more than 60 countries.

It was always going to be right to show the entire network at a glance. Hiding that scale would have been dishonest about what the product actually does. The harder problem, the one I actually had to design for, was speed: how fast someone could go from "here is the whole network" to "here are the handful of assets, locations and trips that need me right now." That is the same tension I designed for on the Discovery case study, what a screen shows and what a user actually needs to know are rarely the same thing, and the gap between them is where the real design work happens.

Showing the whole network was the easy part. Making it fast to filter down to what mattered was the actual design problem.

My role

I own the UX for the Network Map, Trips, Asset Visibility and Locations surfaces on SCI, as Principal Product Designer at Brambles.

That covers the interaction design for individual screens, trip summaries, condition charts, timelines, asset and location detail drawers, and the underlying rules that make the system hold together at scale: what a cluster is, when it breaks apart as a user zooms in, what colour communicates about asset condition, and how those rules stay consistent whether someone is looking at a single trip or the whole network.

The map system itself outgrew SCI. It's now the shared map language behind five Brambles products, maintained by 21 UX team members rather than by one person's design file, the clearest evidence I have that a pattern was actually solving a real problem, rather than just meeting one team's spec.

Chapter 01

Anatomy of a map

Before any screen could be designed, the map itself needed a shared vocabulary: what counts as a cluster, what counts as a marker, and what each one is allowed to say. The Network Map and the Trips map are built on the same foundation, but they answer different questions, so they follow different rules.

SCI's maps are built on Mapbox as the core map engine, chosen for a stable base map, strong performance at scale and flexible styling that supports light and dark themes. Mapbox handles pan, zoom and the default viewport. Everything a user actually recognises as "the SCI map", the markers, the clusters, the trip lines, the side panels, is a component I design and specify on top of that foundation, built to stay consistent with the Brambles Design System rather than inheriting Mapbox's own visual defaults.

I also built these components in code, using AI-assisted tooling, not just in Figma, so that when a new screen or feature was being explored, in SCI or on another product entirely, the team pulling from the system was working from something they could actually drop in and test, not a static reference. The gospel Figma file and the codebase are kept in sync deliberately, updating one without the other defeats the point of having a design system at all.

The three rules below, what a cluster is, what a marker is, and what colour means, are the foundation everything else on the map is built from, so they're the ones worth walking through here. The wider system goes considerably further: viewport behaviour, search, the mini filters and full filters panel, a dynamic key that only ever shows what's actually visible on screen, and the asset detail, location detail and timeline components those markers and clusters open into, are all documented and componentised the same way.

What is a cluster?

On the Network Map, a cluster groups multiple assets or locations that sit near each other, so the map reads at a glance instead of drowning in individual pins. Clusters use iconography for what's actually inside them, a store, a manufacturing site, a mix of asset types, rather than a single generic dot, and that iconography gets more specific as a user zooms in. As a user zooms further, clusters break down into individual asset and location markers, or into smaller, more specific clusters within the original one.

A blue cluster badge with a target icon and a count of 10, representing moving assets
Moving assets
A dark cluster badge with a store icon and a count of 10, representing locations
Locations
A red cluster badge with a question mark icon and a count of 10, representing unidentified dwells
Unidentified dwells

What does colour mean on the Network Map?

Colour tells a user what state a cluster or marker is in before they click anything. Blue means moving assets. Purple means assets dwelling at a known, expected location. Red means an unidentified dwell, an asset sitting somewhere it has no reason to be, which is often the first signal of something lost or stolen. This is deliberately a different colour language to the one used on Trips, because the Network Map is answering "where is everything and what state is it in," not "is this specific shipment on track."

A blue cluster badge with a target icon, representing moving assets
Moving
A dark marker with a store icon paired with a purple count badge, representing assets dwelling at a known location
Dwelling
A red marker with a question mark icon paired with a purple count badge, representing an unidentified dwell
Unidentified

What is a marker?

An individual moving asset gets its own halo or pulse marker, a visual cue that something is live and in transit. Once an asset stops moving, whether at a known location or an unidentified one, it groups into a cluster with the relevant location marker rather than sitting on the map as a lone dot. We're also exploring sizing dwelling markers by how long an asset has been sitting still, so the map itself could eventually start answering "which of these has been here too long," but that isn't shipped yet, it's a direction we're actively testing, not a live rule.

A blue halo or pulse marker, representing an individual moving asset
Asset
A dark marker with a store icon, representing a dwelling asset at a known location
Location

What changes when a trip is shown individually?

Displaying a single trip on its own surfaces a level of detail the cluster-and-marker language above deliberately leaves out: the poly line itself, directional arrows along it, a departure location, stopped location pins, a last-seen location pin or a moving circle, information bubbles and waypoint markers. None of it replaces the rules above, it's the same visual language with the volume turned up, because reading one shipment is a different task to reading three hundred thousand of them, and it needs the extra detail to match.

One trip, full detail. Poly line, direction arrows, departure and stop pins, a waypoint marker and a moving circle with its status bubble, all the pieces the cluster view abstracts away until a user needs exactly one shipment's story.

These are not incidental UI decisions. They are the rules that let the same map component work whether it is showing 12 assets or 12,000, and they are documented once, as design-system reference, precisely so a designer joining another SCI surface, or another Brambles product entirely, inherits the same logic rather than reinventing it.

Light and dark map styles. The same cluster and marker logic holds regardless of theme. Dark is one of several Mapbox base styles the system now supports, alongside Streets, Outdoors and Satellite Streets, each earning its place for a genuine task rather than being offered for its own sake, night-shift readability, terrain awareness, or high-fidelity visual context when inspecting a route.

Layers, and building for the next feature before it exists

The Layers panel. Layers type, map style and projection are all controlled from one place, so a user can isolate exactly the data and view they need without hunting across separate menus.

The Layers panel controls what the map shows. By default, both asset and location layers are enabled. Turning a layer off removes everything tied to it in one action: markers, clusters, filters, search results and legend entries, so the map never displays or filters data a user has deliberately hidden. I've since prototyped a dedicated Unidentified Dwells layer in code, so a user can isolate exactly the assets that most need investigating without filtering through everything else first, and Trips is the logical next layer type to design once that ships.

The most recent release of Layers shipped a globe and flat map projection toggle: a genuine accessibility feature, not a visual flourish. Some users experience motion sensitivity from a rotating globe view, and some logistics tasks, planning a route, scanning distances, are simply easier on a flat projection, while others, understanding long-haul network coverage, read better on a globe. Both states are clearly labelled, keyboard accessible and screen-reader friendly, and the projection choice persists across every map in the product until a user changes it again. The same is true of map style: whichever base style a user picks, Light, Dark, Outdoors or Satellite Streets, is remembered as their preference and carried across every other map surface in SCI, so they're not resetting it screen by screen.

Designing for that toggle meant writing the acceptance criteria before the feature existed: what "globe view" and "flat view" needed to mean to a screen reader, how focus should move, what should and should not reset when a user switches. That is the same discipline behind the cluster and marker rules above, decide the system's behaviour once, in writing, so every team building on top of it inherits the same standard.

Once the map itself had a shared language, individual screens could be built to actually answer a question, not just show data.

Chapter 02

Trip status and condition

A shipment leaves. Something needs tracking. Something goes wrong. Someone needs to see it fast, without opening a support ticket.

A trip follows a single asset's most recent journey: its start location, every dwell in between, and its end or current location. This is a different job to the Network Map, so it uses a different visual language. Trip lines between dwells are blue by default, and switch to show breached versus optimal duration segments the moment a user turns condition on, so a customer can see exactly where along the route a problem happened, not just that one did. Location markers on a trip follow the same logic: black by default, turning red the moment a breach is recorded at that specific dwell, whether the asset was sitting still or moving between two points.

The trip summary page was designed so the two questions that matter most, where is this shipment, and is it still in acceptable condition, are both answerable without a click. Route, dispatch point, last-seen location, duration, and live temperature and shock condition sit on the same screen. The same components then scales down to a compact summary for a table row, and up to the full trip detail view, one pattern, several densities, rather than a second design built from scratch for each context.

When something has actually gone wrong, the same temperature and shock data drives the condition chart below: the full trip plotted against optimal, low-risk and high-risk threshold bands, with a date-range slider and zoom controls to jump straight to the moment it crossed the line rather than scanning a whole journey by eye. A shock spike can mean a hard brake or collision, a slow temperature climb can mean a failed refrigeration unit or a door left open across a long route, and the same smart devices can flag an unexpected change in light or weight on a stationary pallet, a signal something was opened or removed while parked. Insights on Arrival, a separate SCI module, answers the related but distinct question of what condition a shipment was in when it reached its final destination, using this same underlying data.

Trip summary and condition, in one view. The same summary pattern, extended with a live condition chart, adapted for optional legs, extended detail, temperature-extracted and shock-selected states, and bulk selection, rather than a bespoke screen per scenario.

Trip timeline

The timeline view answers "what actually happened on this trip" with a route map, numbered stops, dwell time at each one, and incident markers dropped directly onto the map rather than buried in a log. A separate log view exists for when someone genuinely needs the raw sequence of events, but the map stays the primary way to understand a journey, because a route with a red marker on it tells a faster story than a table ever will.

Trip timeline, full route. Numbered stops, dwell time at each one and incident markers plotted directly onto the map, plus the underlying log for anyone who needs the raw detail.

The vertical timeline on the map has a horizontal counterpart too, a compact road strip that sits directly under the condition chart on the trip summary screen. Same dwell and location logic, laid out left to right instead of top to bottom: a purple bar marks dwell duration at each stop, and a truck icon marks the asset's current position, blue while moving, purple while dwelling, green once delivered, headlights on only when it's genuinely in transit. It's a small component, but it's what lets someone reading a temperature spike on the chart above see, in the same glance, whether the asset was parked at a stop or actually moving when it happened.

The road timeline, under the chart. The same stop and dwell logic as the vertical timeline, laid out left to right beneath the condition graph, so a breach on the chart above lines up with exactly where the asset was when it happened.

A trip is also made of legs, the pathway between any two locations on it, and exploring legs breaks the route into those individual segments, Leg 1, Leg 2, Leg 3 and on, each carrying its own breached-or-clear status rather than one verdict for the whole trip. A trip with a single bad leg out of six shouldn't read the same as a trip that failed start to finish. On the map, a leg is marked by its own square pin, sitting centrally over that leg's poly line rather than at a location, so a user can identify which segment they're looking at at a glance. Selecting a leg keeps the map and the timeline list in sync, so a user can jump between a leg on the route and its detail in the list without losing their place.

Legs, inside the same timeline. The trip broken into its individual segments, each flagged breached or clear on its own, so a problem on one leg doesn't blur into a verdict on the whole trip.
Incident detail, same timeline. Switching to Condition drills into a single incident, the exact stop or leg it occurred at, a temperature snapshot against threshold, and the asset it was tied to, without leaving the map.

Zoom out from a single trip, and it stops being a single thing. It's one instance of a route, and that route is one way of running a flow.

Chapter 03

Flows and routes

Trips, routes and flows are the same underlying movement data at three different zoom levels, each answering a different question about performance, not just location.

A flow is a regular journey a customer's product takes on our pallets, a factory to a store, a warehouse to a distribution centre. A route is one way of actually running that flow, factory straight to store is a route, factory via a warehouse and a distribution centre is a different route for the same flow, and most flows have several. A trip is a single completed instance of one of those routes, on one date, with one asset. Same shipment lane, three different lenses: a flow tells you whether the lane as a whole is healthy, a route tells you which path through it is fastest or slowest, and a trip tells you what actually happened on one journey.

Flows. Every regular lane between a start location and its relevant locations, with the metrics that flag whether that lane's performance is drifting, cycle time, dwell time, completed cycles, before anyone has to open a single trip to notice.

Opening a flow breaks it down into its routes, each one the same lane run a different way, with its own relevant locations and its own fastest, slowest and average cycle and dwell times. This is where the useful comparison sits: two routes serving the same flow, one consistently faster, and now that difference is visible and attributable rather than buried inside a single blended average.

Routes, inside a flow. The same flow, broken down into every distinct path it's actually run through, with the stops that make one route slower or faster than another.

Neither screen has a map yet, and that's deliberate rather than an oversight, everything above is still list-and-table work, not spatial work. It's the next map design challenge on this product: the same cluster, marker and trip-line language from earlier in this case study, applied one level up, so a route's dwells and an underperforming leg are as visually obvious on a map as a single trip's breach already is.

None of this holds together unless the same patterns scale down to individual assets and locations too.

Chapter 04

Scaling assets and locations

The same map, the same markers, the same detail screens, reached from a second door. That reuse is the actual evidence behind "built components that got adopted without a mandate to build them."

Assets and Locations exist as standalone modules too, searchable lists of exactly what's already plotted on the Network Map, for the operations users who think in a list first and a map second. Neither module invents a new pattern to get there: the same search, sort and filter language carries over from Trips and Flows, so a user who has already learned to work one list already knows how to work these.

Assets, as a standalone list. Every asset the Network Map plots, searchable and filterable by status, without opening the map at all.
Locations, as a standalone list. The same idea for sites rather than assets, filterable by location type, with the hop and dwell metrics an operations user needs to judge a site's health without a map in view.

A row in either list isn't a dead end. Clicking a location opens the same location screen a marker on the Network Map opens, boundary, address and movement metrics over a live map. Clicking an asset opens straight into that asset's journey timeline, the same journey a user would reach by clicking its marker on the map. List and map are two doors into the same rooms, not two separate features to build and maintain.

Location details, from either door. Boundary, address and movement metrics for a single site, reachable from the Locations list or a marker on the Network Map.
Asset journey, from either door. Full route, stop-by-stop timeline and current status for a single asset, reachable from the Assets list or a marker on the Network Map.

Extend the same map logic across geography and portfolio scale, and a different question becomes answerable: not "where is one shipment," but "where in the world are things not going to plan right now."

Chapter 05

Illuminate, seeing condition at scale

The trip-level colour language, proven on one shipment, pointed at across an entire supply chain instead.

Illuminate switches the Network Map into a dark, high-contrast mode built for looking at many trips at once rather than one. Every trip on screen renders by condition, breached in red, optimal in green, so a supply chain lead scanning the whole network can see where problems are concentrated without opening a single trip to check. It's the same red-versus-green language this case study has used from a single trip line onward, just pointed at a few hundred shipments simultaneously instead of one.

Illuminate, toggled on. The same Trips screen, switched from clustered counts to every trip line rendered by condition at once, breached in red, optimal in green, across the whole supply chain rather than one shipment.

Zooming into a specific area keeps the same colour language but adds a way to narrow it: a condition filter switches the map between optimal, breached or all trips, and a trip list on the right groups everything currently in view by status, not dispatched, dwelling, moving, delivered, so a supply chain lead can go from "where are the problems" to a filtered, countable list without leaving the map.

Trips in an area, filtered by condition. The same red-and-green trip lines, narrowed to a specific region, with an Optimal or Breached filter and a status-grouped trip list, so a cluster of red lines turns into an actual list of shipments to act on.

Showing that many trips at once changes what the next useful view actually is. The obvious next step is heat mapping, clustering breach density by geography so a region with a disproportionate number of red trips stands out at a glance, the same "spot it before it's a ticket" principle behind the cluster and marker language earlier in this case study, applied at portfolio scale instead of a single shipment. This is early, a toggle and a colour language proven at trip level, not yet a finished heat-map product, but it's the direction the map naturally wants to go once condition data exists for every trip in a supply chain, not just the one someone happened to open.

A pattern only proves itself once other people start depending on it.

Where this system stands today

The map system this case study walks through didn't stay inside SCI. It's grown into the shared map language across Brambles, maintained by a team rather than one person's design file.

5
Brambles products now built on this map system, not just SCI
21
UX team members designing against the same components
Hundreds
of enterprise brands relying on it to track their supply chains
Thousands
of internal and external users reading the same map language every day

Around 40 components and patterns have come out of this work so far: clusters, markers, trip lines, timelines, the layers panel, condition charts, and the list-and-map pairings this case study walks through. Each one is built once in code, not redrawn per screen, which is the actual reason five products and 21 designers can work off one system instead of five different interpretations of the same map. A component grounded in code is something a new screen can inherit and trust, not a reference image to reinterpret.

The data behind the map keeps growing. Brambles reports autonomous tracking devices deployed across 34 countries, reading infrastructure now instrumented at 80 North American service centres, and a fully serialised pool in Chile where the “Effortless Service Offer” has removed pallet declarations and physical audits for every customer, a change the company tied to a nine-point rise in its net promoter score there. Every one of those signals lands on this map. The network figures are Brambles’ own; the job of the map system is to make that much signal readable in seconds.

Sources: Brambles FY25 and FY26 results announcements, August 2025 and August 2026.

What this demonstrates

Every marker on this map is a pallet of something real. A shipment of vaccines. A container of fresh produce with a clock running against it. A part that stops a production line if it does not arrive.

The map's job was never to look good. It was to tell the right person the right thing before it became a problem.

This was never one screen. It was defining what every part of the map means, clusters, markers, trip lines, layers, condition colour, then making sure those definitions hold whether someone is looking at a single trip or three hundred thousand supply chains at once, and building the components so the next team doesn't have to define them again.

Try the map yourself.

The mapping pattern this case study describes was rebuilt in my AI Playground as a working, reusable component. This is the Playground, running, and it opens on the Overview: a live asset map with search, filters, clustering and layers, on fictional supply chain data.

Work in progress. The overview, dashboards, trips, campaigns and administration areas are open; other sections show as coming soon. Built from the Playground’s own design-system components by directing Claude and OpenAI Codex in VS Code, with GitHub Copilot inline, on fictional data throughout.

How the Playground works →

Live · password protected

This is the Playground itself, running.

Not a screenshot or a recording. It’s gated while it keeps evolving; if you’d like to try it, ask me for the password.

Don’t have the password? Email me or message me on WhatsApp and I’ll send it over.

Unlocked for this visit · interact directly aboveOpen full screen ↗
Overview map, live. The mapping pattern inside the Playground, opening on the Overview home page. Blurred until unlocked.

One trip, opened to the detail.

The same Playground, this time loaded straight into a single trip’s summary rather than the map’s Overview, so you can see the route, timeline and detail panel a trip opens into once it’s selected, not just the map it’s picked from.

Live · password protected

This is the Playground itself, running.

Not a screenshot or a recording. It’s gated while it keeps evolving; if you’d like to try it, ask me for the password.

Don’t have the password? Email me or message me on WhatsApp and I’ll send it over.

Unlocked for this visit · interact directly aboveOpen full screen ↗
Trip detail, live. The same Playground, opened straight into one trip’s summary rather than the map’s landing view. Blurred until unlocked.