Skip to main content
Dispatch Desk
Demo time: Tue 29 Sep, 10:30Demo time: 10:30Hina Tariq

Design system

The tokens and components every screen is built from. Press Tab to see focus styles.

Colour

Every text colour passes WCAG 2.2 AA: 4.5:1 for text, 3:1 for input borders and the focus ring. Colour never carries meaning alone; badges and alerts always add an icon and a word.

Tokens

  • --color-bg#F5F7FA · Page background
  • --color-surface#FFFFFF · Cards, table, dialogs
  • --color-surface-sunken#EEF1F5 · Table header, subtle panels
  • --color-surface-hover#F2F5F9 · Row hover
  • --color-border#DCE1E8 · Dividers, card borders
  • --color-border-strong#8792A2 · Input borders
  • --color-text#1A2230 · Body text
  • --color-text-muted#4A5566 · Secondary text
  • --color-text-subtle#5F6B7D · Meta text only
  • --color-brand#1D5FD1 · Links, primary buttons, focus
  • --color-brand-hover#174EAD · Primary button hover
  • --color-brand-subtle#E8F0FD · Selected, current
  • --color-danger#C62828 · Danger button
  • --color-danger-hover#A61B1B · Danger button hover

Brand contrast

  • White on brand5.82:1
  • Brand on white5.82:1
  • White on danger5.62:1
  • Subtle text on white5.40:1

Tones: text on background

  • NeutralDraft, cancelled, handled8.28:1
  • InfoScheduled6.71:1
  • ActiveIn transit6.41:1
  • SuccessDelivered5.78:1
  • WarningWarning6.23:1
  • CriticalCritical6.58:1

Typography

Inter, with tabular figures in tables, times, IDs and KPIs so numbers line up.

Type scale

  • Trip TRP-24121 · Lahore → Karachi--text-3xl · 28px · KPI numbers
  • Trip TRP-24121 · Lahore → Karachi--text-2xl · 22px · Page titles
  • Trip TRP-24121 · Lahore → Karachi--text-xl · 18px · Section headings
  • Trip TRP-24121 · Lahore → Karachi--text-lg · 16px · Card titles, inputs on phones
  • Trip TRP-24121 · Lahore → Karachi--text-md · 14px · Body default
  • Trip TRP-24121 · Lahore → Karachi--text-sm · 13px · Table cells, badges
  • Trip TRP-24121 · Lahore → Karachi--text-xs · 12px · Meta, secondary lines

Weights

Regular 400 · body text

Medium 500 · labels, buttons

Semibold 600 · headings

Spacing, radius and shadow

A 4px grid. Components never use raw pixel values.

Space

  • --space-1 · 4px
  • --space-2 · 8px
  • --space-3 · 12px
  • --space-4 · 16px
  • --space-5 · 20px
  • --space-6 · 24px
  • --space-8 · 32px
  • --space-10 · 40px
  • --space-12 · 48px
  • --space-16 · 64px

Radius

  • --radius-sm · 4px
  • --radius-md · 6px
  • --radius-lg · 10px
  • --radius-full · 999px

Shadow

  • --shadow-sm
  • --shadow-md
  • --shadow-lg

Buttons

One primary action per area. Secondary for everything else, ghost for low-emphasis actions, danger only for actions that destroy something.

Primary

Secondary

Ghost

Danger

Link styled as a button

Form controls

Every field has a visible label. Hints and errors sit under the label and are linked to the input, so screen readers read them too.

Text field

Optional. Up to 30 characters.

Enter the weight in kilograms.

Select

Where the truck is loaded.

Choose the pickup city.

Textarea

Visible to everyone on the dispatch team.

Tell us why the window changed.

Checkbox

The trip shows “Vehicle or driver missing” until you assign one.

Radio group

Vehicle

Busy vehicles stay in the list, disabled, with the reason.

10,000 kg · Lahore
8,000 kg · Refrigerated · Karachi
On TRP-24121 until 16:00
Escalate to

Choose who to escalate to.

Samina Raza
Kashif Mirza

Badges

Every badge has an icon and a word, so it still reads in greyscale or for colour-blind users.

Trip status

DraftScheduledIn transitDeliveredCancelled

Severity

CriticalWarningHandled

Plain badge

ReeferHTV

Alerts

Critical alerts interrupt screen readers (role=alert). The rest are announced politely (role=status).

Tones

The demo clock is frozen at Tue 29 Sep, 10:30.
Nothing needs your attention on this trip.

Check the plan

  • Drop 1 opens 40 min before the truck can get there from the pickup.

Cards and empty state

Card

Cargo

What the truck is carrying

Pharma, 2–8 °C · 3,200 kg · 8 pallets

Card without a header

Cards group related details. The header row is optional.

Empty state

No trips match these filters

Try a different search, or clear the filters to see every trip.

Skeleton

Shown until saved data has loaded, so the page never flashes wrong content. The shimmer stops when reduced motion is on.

Table rows

Stat cards

KPIs. When a card filters the table, it becomes a toggle button with aria-pressed.

Clickable (filters)

Display only

On-time rate82%9 of 11 delivered

Dialog and toast

Dialogs use the native <dialog> element: focus moves in, Tab stays inside, Esc closes, and focus returns to the button that opened it. A toast confirms what happened.

Dialog

Add note

Everyone on the dispatch team can see notes.

Toast

Stepper

Steps you have reached are buttons, so you can jump back. The text line always says where you are; on phones it replaces the labels.

Step 2 of 4, step 3 reached

Error summary

Shown at the top of a form when Next or Save fails. It takes focus, and each link jumps to its field.

Pattern

Table

Sticky header, 48px rows, no zebra stripes. Sortable headers cycle ascending, descending, then back to the default order.

Sortable

Sample trips
TRP-24118Saffron Hill Foods12,000 kg
TRP-24103Kestrel Pharma3,200 kg
TRP-24127Greyrock Cement18,500 kg

Exception rules

What makes a trip need attention. The rules are configuration: this table is built from the same list the app uses.

11 rules

Exception rules
RuleWhen it firesSuggested actions
Temperature out of rangeThe latest reefer reading is outside the cargo’s allowed band.Contact driver, Escalate, Record action
Missed time windowA stop’s time window has closed and the truck hasn’t arrived.Contact driver, Reschedule stop, Notify client, Escalate
Tracking lostNo position from the truck for more than 45 minutes.Contact driver, Escalate
Late arrival riskThe latest ETA for a stop is after its time window closes.Notify client, Reschedule stop, Record action
Driver hours limitThe driver is close to or over the 10-hour daily driving limit.Plan rest stop, Reassign vehicle or driver
Vehicle or driver missingA scheduled trip has no vehicle or driver within 12 hours of pickup.Reassign vehicle or driver
Needs a refrigerated truckTemperature-controlled cargo is on a vehicle without refrigeration.Reassign vehicle or driver
Over vehicle capacityThe load is heavier than the assigned vehicle can carry.Reassign vehicle or driver, Record action
Long wait at stopThe truck has waited at a stop longer than the 2 h free time (detention).Notify client, Record action
Consignment note missingThe truck left the pickup without a consignment note (bilty) on file.Mark consignment note received, Contact driver
POD overdueNo signed proof of delivery 24 hours after delivery.Mark POD received, Notify client