Air cargo booking platform · Case study
Designing a booking platform where one character changes the price
A platform where cargo operators price, book and track air freight.
Every field feeds routing or pricing. Nothing can be skipped and fixed later, because later is after the booking is confirmed.
01 — From Typed Dimensions to a Defensible Price
Making the pricing consequence visible while it is still editable
A shipment is not priced on what it weighs. It is priced on chargeable weight — the greater of actual and volumetric weight — and volumetric weight is derived entirely from the dimensions the operator types in.
How a price is formed
- DimensionsVolumetric weight
- Actual weight
Chargeable weight is the greater of the two. Which means the unit those dimensions are entered in is not a formatting preference — it is a multiplier.
Before
- Enter dimensions
- Submit
- Price
Solution
- Enter dimensions
- Chargeable weight
- Price
- Submit
The cm/in control was given real visual weight so the unit gets read rather than assumed, and chargeable weight recalculates in place as the operator types. The pricing consequence arrives before the commitment, not after it.
Designed for
02 — From One Box to Grouped Pieces
Keeping a dense form survivable
A real shipment is rarely one size. It is several groups of boxes, each with its own count and dimensions, plus handling rules that decide which aircraft can take the freight.
Shipment structure
- Shipment
- Piece group 1
- Quantity
- L × W × H
- Unit
- Piece group 2 …
- Handling
- Stackable
- Turnable
- Per item / total
- Piece group 1
Before
- One flat table
- One size for the whole shipment
- The exception does not fit
Inputs were grouped into logical sections, and piece variations put into expandable blocks — flexibility without a longer page, and less to hold in mind in a form nobody reads twice.
Designed for
03 — From a List of Rates to a Comparable Grid
Making pricing scannable in two directions
A list of routes is not enough to price a shipment. Operators compare across weight tiers and across carriers at the same time, and the table has to hold both readings at once.
Rate comparison
| −100 kg | +100 kg | +300 kg | +500 kg | |
|---|---|---|---|---|
| Carrier A | · | · | · | · |
| Carrier B | · | · | · | · |
| Carrier C | · | · | · | · |
→ Read across — what more cargo costs
↓ Read down — which carrier is cheaper
Alignment holds across every carrier, or the vertical reading stops being trustworthy.
What makes a quote explainable
- Base rate
- Surcharges
- Total
Surcharges are itemised rather than buried in a total, so an operator can defend a quote to a client without leaving the screen.
Users can
04 — From Confirmation to Coordination
Closing a loop that cannot be undone
Confirming a booking is a financial commitment. Reversing it means support tickets, delays and cost — so the confirmation screen answers every question the operator would otherwise raise, and keeps answering it afterwards.
The commit
- Review
- Confirm
- AWB issued
- Booked
The AWB reference stays visible, routing and shipment summary sit above the fold, and the status timeline is already on the page — so what happens next is answered before it is asked.
One status vocabulary, whole lifecycle
- Confirmed
- Received
- Departed
- Arrived
- Delivered
The branch
- Schedule changed
- Surfaced in the row itself
An operator checking a shipment is not idly wondering where it is. They are deciding whether to move a truck, warn a client, or rebook. A schedule change belongs where they are already looking, not in an email thread.
Users can
05 — Building inside a design system I did not author
Extending a system in production without adding to its maintenance cost
I designed inside a system that was already shipped, used by other designers and built by a team of developers. That carries a specific discipline: before adding anything, understand why what is already there was built that way.
Approach
- Reused
- Extended
- Documented
- Reused
→ form controls, tables, status indicators, buttons
- Extended
→ the unit toggle, the expandable piece group, the status timeline
- Documented
→ named layers, ordered structure, states and edge cases specified
Each new thing was built as a variant of something that already existed, so it inherits the system's behaviour instead of sitting beside it. A new pattern is a maintenance cost somebody else pays.
Contributed to
Status