WORK / CASE STUDY 001 ENTERPRISE SYSTEMS — AGENTIC AI JUL—AUG 2026
FREIGHT ERPDJANGO + POSTGRESMCP FOR AGENTS

The quote
that becomes
the invoice

A freight desk priced air and sea in spreadsheets, mailed them as PDFs, then retyped the accepted one into an invoice. Now every figure is entered once.

CLIENT
Confidential — freight forwarding
SECTOR
Freight forwarding & logistics
SCOPE
Architecture, build, deployment
DURATION
12 days — 66 commits
TEAM
1 engineer, agent-assisted
12→1d
SECOND FREIGHT MODE, TO LIVE
9.5k
AIRPORTS + PORTS SEEDED
1788
TESTS, GREEN AT EVERY MERGE
0
DOCUMENTS RE-KEYED PER JOB

THE BRIEF

Nothing was missing. Everything was retyped.

Two freight modes on one desk. Air prices per kilo against a flight, sea per container against a sailing. Quotes lived in Excel, rates in email, the accepted one was retyped into the ledger and the invoice retyped again.

The obvious fix was a general ERP with a freight add-on. Each one quoted asked the desk to price sea the way it prices air, or to run two products side by side. That asymmetry is the business — flattening it sells them their own workaround.

CONSTRAINTS

  1. Air prices per kilo, sea per container — no core could pretend they are alike.
  2. One deployment per client, on their own VPS: no shared database, no per-seat licence.
  3. A blocked CDN still has to submit and validate the quote, not degrade politely.
  4. Every AI surface had to vanish on one setting — not every buyer wants AI in an ERP.

THE BUILD

Four phases. Twelve days.

/01

Listen

Sat with the desk through a live air quote and a live sea quote, writing down every figure it typed more than once.

D 1
/02

Architect

Modelled one abstract quotation both modes inherit, with money, numbering and workflow owned by a service layer neither mode copies.

D 2
/03

Build

Shipped air, then sea, then the customer portal, proforma, tax invoice and carrier tracking that hang off an accepted quote.

D 3—10
/04

Operate

Added the MCP server an agent files enquiries through, the dashboard that reads every register, and the per-client Dokploy deploy.

D 11 →

WHAT WE SHIPPED

Air & sea quotation modules PER KILO / PER CONTAINER
Customer portal ACCEPT / DECLINE / UPLOAD
Proforma & tax invoicing ADVANCE / RECEIPTS / AGEING
Carrier tracking AWB / CONTAINER / B-L
MCP server for agents SIX TOOLS / SCOPED KEYS

STACK ON THIS PROJECT

BACKEND

PythonDjangoCelery

DATA

PostgreSQLRedisS3

UI & DOCUMENTS

HTMXAlpine.jsWeasyPrint

AI & INFRA

ClaudeMCPDockerDokployLinux

THE OUTCOME

Four documents. One computation.

BEFORE / AFTER

Second freight mode, to live 12 days1 day
Places money is defined 31
Endpoints kept by hand 9,4900
Documents re-keyed per job 40

“Sea shipped the day after air, because the core had already refused to know which mode it was serving. 1,788 tests keep it that way.”

BUILD NOTE — WEIRD LABS