Logistics · Freight marketplace / Live web
Freight matching is a domain problem before it is a map.
Kenya-first freight matching built around route, capacity, cargo compatibility and booking rules.

The problem
A shipment needs more than a truck nearby. The route, remaining capacity, cargo type, timing and price must fit, and the people involved need a clear booking process.
What I owned
Shipment intake, matching and pricing rules, quote/booking lifecycles and the architecture joining public web, role-aware mobile and backend services.
The difficult constraint
Capacity changes along a route. Cargo compatibility and booking state constrain what can be offered. Exact tracking information must be authorized, while mobile connectivity can be intermittent.
The architecture
An Nx monorepo holds Angular web, Ionic/Capacitor mobile, a NestJS API and shared domain/contracts/auth-policy packages. PostgreSQL/PostGIS supports the data and geospatial layer; Socket.IO supports authorized realtime updates. The previous Next.js app is preserved for rollback/reference.
Why these decisions
Keep matching and pricing in framework-neutral domain code, with tests for segment capacity and dominant capacity-share pricing. Separate location authorization from its presentation. Tracking protocols include acknowledgement/outbox foundations for reconnecting devices.
The result
The freight web product is public and under active iteration. The current manifest records Angular 22, TypeScript 6, Ionic 9, NestJS 11 and Node 24. Mobile is under device testing; this case study does not claim a released Android/iOS Haulio app.
Product learning
The latest October update makes exact pickup/drop-off details optional for an initial estimate. Asking for only what is needed at that stage makes the intake easier while retaining the detailed workflow later.
Evidence & scope +
- Current README and technology architecture inspected; legacy Next.js described as rollback/reference.
- packages/domain source and tests cover compatibility, capacity and pricing.
- Latest local commit: 3 October 2026, optional request details and larger landing text.