Skip to content
Amanuel Yizelkal
All work11 / 12

A two-sided trucking marketplace for the Djibouti–Ethiopia corridor, with escrow

My product

Role
Founder & Full-stack Developer
Year
2026
Status
In development
Links
Private
  1. Expo apps
  2. Next.js web · admin
  3. NestJS API
  4. Escrow ledger
  5. PostgreSQL · Prisma
  6. MinIO

PK-12

Cargo owners post loads, transport companies bid to carry them, and the platform matches the two sides, holds payment in escrow until delivery is proven, takes a commission and referees disputes. It owns no trucks and dispatches nothing: it is a matchmaker, an escrow agent and a referee.

The problem

Cargo owners on the Djibouti–Ethiopia corridor need carriers they can trust, and carriers need to be paid once a delivery is proven. A marketplace that matches the two and holds payment in escrow addresses both.

Approach

I wrote the full specification first: the job lifecycle as a state machine, the money rules (ledger, escrow and the commission gate) and the actors on each surface. Then I built a skeleton where only the API touches the database and every surface shares one contract package.

Architecture

A NestJS API, Next.js apps for cargo owners and transporters and for operations, and two Expo apps (marketplace and driver). Zod contracts are the single source of truth for the wire; CI runs lint, typecheck, test and build on a self-hosted runner.

Features

  • Job lifecycle designed as an explicit state machine
  • Escrow ledger with a commission gate, specified before any money code
  • Separate surfaces for shippers, carriers, drivers and operations
  • One shared Zod contract package for every app

Stack

NestJS, Next.js, Expo, TypeScript, PostgreSQL, Prisma, MinIO, Zod, Turborepo, Docker

Results

  • Phase 0 complete: infrastructure, build, CI and documentation

“For a product that holds other people's money, the spec is the product.”

Next projectPayment Gateway
Amanuel Yizelkal