INDEX / CASE STUDY 001 ENTERPRISE SYSTEMS — AGENTIC AI JUL—AUG 2026
FREIGHT ERP DJANGO + POSTGRES MCP 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.

CLIENTConfidential — freight forwarding
SECTORFreight forwarding & logistics
SCOPEArchitecture, build, deployment
DURATION12 days — 66 commits
TEAM1 engineer, agent-assisted
DROP THE HERO SHOT
QUOTATION BUILDER, WIDE CROP
12→1d
SECOND FREIGHT MODE, TO LIVE
9.5k
AIRPORTS + PORTS SEEDED
1788
TESTS, GREEN AT EVERY MERGE
0
DOCUMENTS RE-KEYED PER JOB
01
  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
01 Air prices per kilo, sea per container — no core could pretend they are alike.
02 One deployment per client, on their own VPS: no shared database, no per-seat licence.
03 A blocked CDN still has to submit and validate the quote, not degrade politely.
04 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 →
DROP A PRODUCT SCREEN
SEA BUILDER — SAILING CARDS
DROP A DETAIL
OPTION TOTALS — SUMMARY RAIL
DROP A DETAIL
MCP CALL LOG — AGENT ACTIVITY
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
Python Django Celery
DATA
PostgreSQL Redis S3
UI & DOCUMENTS
HTMX Alpine.js WeasyPrint
AI & INFRA
Claude MCP Docker Dokploy Linux
03
  THE OUTCOME

Four documents. One computation.

BEFORE / AFTER
Second freight mode, to live 12 days  →  1 day
Places money is defined 3  →  1
Endpoints kept by hand 9,490  →  0
Documents re-keyed per job 4  →  0

“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