Back to portfolio
Logistics · Java and Spring Boot

LogiFlow

Logistics and delivery management platform in Java and Spring Boot: orders with sagas, live tracking, incidents, SLA and a driver app

My role
UX/UI Designer · Architecture analysis
LogiFlowLogiFlow
01

Context

LogiFlow is a logistics and delivery management platform for carriers and last-mile operations: orders, picking at distribution centers, fleet, routes, incidents and SLA in a single operation, from order to customer's door, with an app for drivers.

I did the product, the UX/UI and the architecture analysis. The technical foundation is FTGO, the Java and Spring Boot microservices architecture from the book Microservices Patterns, with sagas, a transactional outbox and CQRS; on top of it I designed the logistics rules, flows, screens and design system.

Technical foundation
FTGO · microservices-patterns
License
Apache-2.0
My role
UX/UI Designer, architecture analysis
Stack
Java, Spring Boot, Apache Kafka, MySQL, Docker
02

Business problem

In a delivery operation, an order goes through many hands: the customer who buys, finance who approves, the distribution center that picks, the driver who delivers. Each step usually lives in a different system or spreadsheet, and the coordinators only find out about a delay when the customer calls.

LogiFlow brings it all into a single operation: it shows what will be late before it is late, handles failed deliveries with clear rules and gives drivers an app that works even without signal.

03

The technical foundation

From FTGO come the Spring Boot services: orders with a lifecycle driven by sagas (create, cancel and revise), approval against the customer's account, a picking ticket with states, couriers with availability and a pickup and drop-off plan, order history in CQRS, an API Gateway and Swagger docs for each service.

04

The LogiFlow product

The last-mile logistics layer and the entire interface: distribution centers, fleet, live tracking, incidents with an attempt limit, SLA per delivery window, management dashboard, reports, access roles and the driver app.

05

Architecture

Each service is a Spring Boot application with its own database. Writes that span more than one service become sagas orchestrated by the Order Service, and events go out through Apache Kafka with a transactional outbox: the event is stored in the same transaction as the data and published afterwards, so nothing is lost between the database and the queue. Alongside, how each FTGO concept becomes a LogiFlow concept.

FTGO services, the CreateOrder saga and the mapping to LogiFlow
06

Architecture decisions and trade-offs

Six decisions recorded as ADRs: the context, what was decided, what each one costs and how it shows up for the people using the product.

Architecture decisions with context, cost and on-screen effect
07

Information architecture and flows

Before the screens: the product map, the five access roles and the three flows that matter most: from order to delivery, a failed delivery, and revising or cancelling an order.

Product map, roles and main flows
08

The screens in Figma

Twelve desktop screens with a clickable prototype, for the people who coordinate the operation.

  1. 01 / 10

    Operations dashboard

    The first screen answers “what will go wrong today?”: orders of the day, routes on the road, on-time deliveries against target, delays and open incidents, each distribution center's SLA and the list of orders at risk of delay, with the margin in minutes.

  2. 02 / 10

    Orders

    Search, filters by status, center, window and driver, sorting and pagination. Each status has a fixed color, and awaiting approval, approved and rejected are the order's actual states in the Order Service.

  3. 03 / 10

    Order detail

    The order lifecycle as a timeline, with the saga and picking ticket steps, the driver's plan with each pickup and drop-off (the Delivery Service Plan), the SLA margin, the items and the audit trail of who changed what.

  4. 04 / 10

    New order

    The form explains that the order starts as awaiting approval, because that is what the saga does. A window outside the customer's receiving hours is blocked at the field, and the summary notes that the same validation runs on the server.

  5. 05 / 10

    Live tracking

    Active routes with each driver's progress, filters for late ones and those without signal, and on the map the selected route with completed stops, the next one and the margin until the end of the window.

  6. 06 / 10

    Incidents

    The queue of delivery problems and how each is handled: who reported it, the photo, the distance from the address, the SLA deadline and three possible outcomes. Rescheduling requires a reason, and the third attempt is the last.

  7. 07 / 10

    Reports and SLA

    On-time deliveries per week against target, failure causes and productivity per driver, read from the CQRS view so they don't weigh on the operation.

  8. 08 / 10

    Fleet

    Drivers and vehicles with shift availability, which comes from the Delivery Service, plus each driver's vehicle, license and on-time performance.

  9. 09 / 10

    Users and permissions

    The permission matrix by role, enforced in the API and not only in the UI. B2B customers and drivers see only their own orders.

  10. 10 / 10

    Sign-in

    Sign-in by email or company single sign-on (OIDC), with lockout after failed attempts. Account recovery uses a neutral message that doesn't reveal who has an account.

09

Interface states

Loading, empty, error and action feedback. The error keeps the filters and shows a code for support, and the rejected and in-progress notices come straight from the saga states.

Loading, empty, error and success
10

Driver app

The courier plan is an ordered list of pickups and drop-offs. The app turns that list into the day's route, with proof of delivery by photo, signature and location, and an incident report that is saved offline and syncs when the signal returns.

Day route, proof of delivery and incident
11

UX/UI decisions

What guided the interface choices:

Margin instead of status
For coordinators, “on the road” says little. The margin in minutes until the window closes tells them whether to act
One color per status
The same color in lists, detail, map and app, so problems are spotted without reading
Orange only for action
The main action of each screen and what needs attention; everything else is neutral
Visible rules
Attempt limits, required reasons and server-side validation are shown on screen, so nobody is surprised
Driver first
Large buttons, few fields and offline support in the app

Visual System

A custom design system in Figma, with color, spacing and radius variables, text styles and components with variants: button, order status, input, menu item, filter and KPI card. Cool neutrals for long reading, orange for action and one color per status.

Palette

Signal Orange

#F2551D

Main action and alerts

Night

#0E1525

Side menu

Ink

#101828

Headings and text

Delivered Green

#067647

Delivered and on time

Picking Purple

#5B3CC4

Being picked at the DC

Failure Red

#B42318

Delay and failed attempt

Typography

Space Grotesk

700

Headings and KPI numbers

Inter

400 / 500 / 600 / 700

Interface, tables and forms

JetBrains Mono

400 / 700

Order codes and times

12

Next versions

What comes next on the product roadmap:

Route planning
Stop order suggestions by window, weight and vehicle capacity
B2B customer portal
Tracking of their own orders and proofs of delivery
Recipient notice
Tracking link and arrival estimate via WhatsApp
Proof of delivery in the portal
Photo, signature and location of each delivery available to the customer
13

References and credits

LogiFlow's technical foundation is FTGO, by Chris Richardson and Eventuate, Inc., published under the Apache 2.0 license.

14

Takeaways

Designing on top of a real architecture changes the interface: eventual consistency becomes an “in progress” state, saga compensation becomes a rejection reason, and the read/write split defines where lists and reports live.