Twelve engagements. The numbers, not the narrative.

Each case describes the business, the freight, the volumes, the systems and the result. The client's name stays with the client. Our CTO will take any number here apart with you on a call — see the bottom of this page.

Read them by the number in the heading. Everything under it exists to explain how the number was produced and what it cost to get there.

All3PL & retailFreight margin & auditWarehousing & fulfillmenteCommerce & omnichannelLast-mile & quick-commerceAI, data & planningCargo & terminal
C01Carrier integration layer and billing leakageFreight margin & audit · 3PL & retail
C06Freight audit automationFreight margin & audit
C05EDI accelerator3PL & retail
C09A production operating modelWarehousing & fulfillment · 3PL & retail
C08Operational data backbone for a high-volume fulfillment platformWarehousing & fulfillment · eCommerce & omnichannel
C10AI governance and cost recoveryAI, data & planning
C02Quick-commerce platform, built from zeroLast-mile & quick-commerce
EXH. C01Non-asset 3PL · LTL, FTL, parcel and international freight

Carrier integration layer and billing leakage

Freight margin & audit · 3PL & retail

Non-asset 3PL · LTL, FTL, parcel and international freight · US East Coast and Midwest · freight audit run in a spreadsheet after the fact · 8 months

One carrier changed its API and the rating flow went down for three weeks. Missed SLAs, penalty exposure, operations quoting by hand. Every other carrier integration sat in its own patching queue, waiting for the same thing to happen to it.

What was breaking. Three problems that looked separate and were not. Rating ran through integrations with no isolation, so a single carrier’s change took the whole flow down. Tracking had never been unified — clients did not trust the visibility they were given, support drowned in “where is my shipment” tickets, and account managers pulled statuses by hand out of separate carrier portals. Freight audit happened retroactively in Excel: fuel surcharge, detention and residential reconciled after the fact, with some delivered services never billed at all. Combined monthly write-offs and unbilled charges came to $45,000.

What we built. The engagement began with a CTO-sponsored technical audit that sequenced the work by revenue impact rather than technical tidiness.

Carriers went behind one internal API with a circuit breaker per carrier, so one failing carrier no longer cascades and adding a carrier became configuration rather than code. Tracking consolidated into a canonical event model behind a single client-facing interface. Freight audit moved into a Spring Boot service consuming invoices over Kafka, comparing billed amounts against contracted rates and accessorial rules automatically.

Then we closed the revenue side: every tariff-bearing operational event now creates a billable record by construction. A delivered service cannot quietly go unbilled.

The real constraint. They could not stop shipping while we worked, which ruled out the clean version of this project — freeze, rebuild, cut over. So sequencing became the design decision. Rating isolation went first because an outage was costing money that week, and known-bad code elsewhere was deliberately left alone for months while it was not the expensive thing. Revenue impact decided the order, not architectural conscience.

What changed.

01Cascading carrier-API outages: zero in the six months after launch
02New carrier onboarding3 weeks → 4 days
03Freight audit covers 87% of invoice volume with no manual touch
04Monthly losses$45,000 → $3,800
05Client shipment-status tickets cut in half
Stack Java 17 · Spring Boot · Kafka · PostgreSQL · React · Docker · Kubernetes · Prometheus · Grafana
$45,000 → $3,800 a month in billing losses
EXH. C06US freight broker · LTL · ~12,000 carrier invoices a month

Freight audit automation

Freight margin & audit

US freight broker · LTL · ~12,000 carrier invoices a month · 8 carriers, 8 rate structures, PDFs and EDI 210 mixed · AP team of four working in Excel · 5 months

Building one manual dispute took 45 minutes, so anything under $50 was written off without challenge. At 12,000 invoices a month, thousands of small variances were never challenged.

What was breaking. The leakage was structural rather than accidental. Invoices arrived from eight carriers in incompatible formats and an accounts payable team of four normalized them by hand, which had stopped scaling against 30% annual volume growth. There was no drill-down from an invoice line to the operational event behind it, so every client question turned into a manual investigation. And nothing about the disputes themselves was measured — win rate by carrier, monthly recovery, dispute aging. Disputes ran blind, which meant nobody could tell a good carrier relationship from an expensive one, and every renewal was negotiated on memory.

What we built. An automated freight audit pipeline. PDF ingestion with per-carrier extraction rules, EDI 210 parsing for the structured feeds, everything normalized into one canonical invoice object.

The audit engine checks every line against the contracted rate card — base rate, fuel surcharge formula, the full accessorial schedule. That let the dispute threshold drop from $50 to $5, with each flagged variance auto-assembling its own evidence package: contracted rate, billed amount, variance, and the contract clause it violates. Every invoice line traces back to its shipment event. The dispute module generates a formatted letter in one click, and recovery is tracked live by carrier, aging and status — which turned the renewal conversation from an anecdote into a number the broker owns.

The real constraint. Dropping the threshold tenfold only works if assembling evidence is free. That inverted the project: the hard part was never the audit logic, it was extraction that stays correct when a carrier silently changes its PDF layout. We used explicit per-carrier extraction rules and made extraction failures loud instead of letting them degrade into false variances.

What changed.

01Monthly recovery from carrier overcharges$8,000 → $67,000
02Dispute threshold $50 → $5
03Invoice normalization3 hours a day of manual work → automatic
04AP team absorbed 40% volume growth with no added headcount
Stack Python · Apache Airflow · dbt · PostgreSQL · Metabase · Docker
Monthly recovery from carrier overcharges: $8,000 → $67,000
EXH. C05Non-asset 3PL with major US retail accounts

EDI accelerator

3PL & retail

Non-asset 3PL with major US retail accounts · LTL and FTL · EDI maps hand-built per partner · 4 months

Every new retail contract started earning eight to ten weeks after signature. Not because operations were slow — because the EDI maps were built from scratch, by hand, one trading partner at a time. Two months of a signed contract’s revenue were going into a mapping exercise, every time they won an account.

What was breaking. Shipments went out without a valid ASN and chargebacks accumulated before the account had turned profitable. The gap between the physical pallet and the transmitted 856 ASN ran about 4%, because the SSCC-18 GS1-128 label generator was a disconnected desktop tool and carton-pallet structure was typed into EDI by hand. Large retail chains issue compliance chargebacks at published rates against cost of goods, and they issue them regularly.

Nobody tracked 997 acknowledgments. Rejections accumulated in silence until a client called or a penalty letter arrived, which meant the first signal of an EDI failure was a commercial one.

What we built. An EDI accelerator with prebuilt transaction maps for large US retail-chain profiles, covering 850, 856, 810, 940 and 945, configured per partner without code changes.

We integrated the SSCC-18 label generator with warehouse pick confirmation, so confirming a carton simultaneously generates the GS1-128 label and the 856 ASN carton record. Physical and transmitted data now match by construction rather than by diligence — the discrepancy is not caught, it is made impossible.

We added 997 monitoring: every outbound transaction carries a response timeout, and rejections surface on the ops dashboard within 15 minutes with a notification to the account coordinator.

The real constraint. Prebuilt maps are a promise you cannot keep in a lab. A partner profile that works against documentation and fails against the retailer’s actual VAN is worse than no accelerator at all. So the accelerator was validated live: the client’s first new retail contract was connected through it during the project itself, on the client’s real deadline, before we had a second one to prove the pattern.

What changed.

01Trading-partner onboarding: 8–10 weeks → 12 days, revenue starting roughly 6–8 weeks earlier
02856 ASN discrepancy4% → 0.3%
03Retail chargebacks from EDI errors eliminated within 60 days
04First new retail contract connected through the accelerator during the project
Stack Java 17 · Spring Boot · PostgreSQL · EDI VAN integration · React · Docker
Trading-partner onboarding: 8–10 weeks → 12 days
EXH. C09US 3PL operator · fulfillment hub · 35,000+ shipments a day

A production operating model

Warehousing & fulfillment · 3PL & retail

US 3PL operator · fulfillment hub · 35,000+ shipments a day · no SLOs, no runbooks, no incident process · 12-month contract, ongoing

Their CTO was personally closing night incidents after a phone call. That is not a reliability problem. It is an operating-model problem wearing a reliability costume.

What was breaking. Reliability was felt rather than measured. No SLOs on order ingest, carrier API or EDI flows. No runbooks, so the same failures were solved from scratch every time. Response times ran 45 to 90 minutes and the organization was paying its most expensive person for the absence of a process. A four-hour failure inside the peak window stops outbound entirely and costs $80,000 to $120,000 in SLA penalties.

Monitoring watched servers rather than the business. A dropped WMS integration or an interrupted EDI feed was discovered two to four hours later, when orders stopped moving and somebody noticed.

What we built. OpenTelemetry across all services, with business signals on one dashboard: order throughput, carrier API latency, EDI 945 success rate, scan event frequency, shipment creation rate.

An SLO per critical integration — warehouse order sync, carrier rate APIs, EDI 945 — with error budgets reviewed monthly with the client. Tiered on-call across three time zones: P1 alerts routed and escalated within 2 minutes, P2 within 10; nights and weekends fully owned by our SRE team. Forty-plus runbooks, monthly chaos engineering, and a service manager running escalation and quarterly SLO reviews.

The real constraint. The bottleneck was a person, and people are harder to remove from a process than code is. Taking night incidents away from the CTO meant asking the business to accept published numbers it could be held to — an SLO is a commitment in both directions, and the first month of error budgets is where that gets tested. The engineering was ordinary. Getting the organization to agree to be measured was the project.

What changed.

01P1 MTTR45–90 minutes → 11 minutes
02100% of night and weekend incidents closed with no client involvement — the CTO went back to strategic work
03Availability of critical integrations: 99.6%, against 94.1% the year before
04One night carrier-connectivity failure averted$90,000 in SLA penalties avoided
Stack OpenTelemetry · Prometheus · Grafana · PagerDuty · Kubernetes · Go · Ansible · Terraform · Python
P1 MTTR: 45–90 minutes → 11 minutes
EXH. C07US 3PL operator · LTL / FTL · own platform on C# .NET

Contract-to-hire engineering team

3PL & retail

US 3PL operator · LTL / FTL · own platform on C# .NET · 6 months

Engineers productive in two weeks, against a two-to-three-month ramp

What was breaking. The client had changed vendors several times in two years, and every new team needed another two to three months to learn a C# TMS with carrier-rating logic, EDI flows and freight audit before it could contribute. Hiring was not closing the gap either: a senior C# engineer with logistics experience took four to six months to find, and most candidates knew .NET but had never seen a TMS, a WMS or an EDI feed.

What we did. Our tech lead screened specifically for C# engineers who had worked on logistics platforms, carrier APIs or EDI. Three were selected and joined the client's engineering organization — its backlog, its ceremonies, its day-to-day management. The tech lead ran weekly code review, set architectural standards and structured the handover of codebase context. Over six months the team took ownership of carrier integrations, billing logic and the EDI pipeline.

What changed.

01Engineers contributing to production work within two weeks, against the previous two-to-three-month ramp
02Three senior roles filled; comparable direct hires had been taking 4–6 months per role
03All three engineers moved to the client's permanent team, with no interruption to delivery
Stack C# .NET 8 · ASP.NET Core · Entity Framework Core · SQL Server · Redis · Azure
Ramp to production 2–3 months → 2 weeks
EXH. C08eCommerce fulfillment operator · millions of order-related records a day · USA

Operational data backbone for a high-volume fulfillment platform

Warehousing & fulfillment · eCommerce & omnichannel

eCommerce fulfillment operator · millions of order-related records a day · USA · one orders table at 3.2 billion rows, unpartitioned · 6 months

VACUUM ran for more than six hours and competed with the production workload. Analytical queries had grown from two seconds to seven minutes and were now colliding with operational writes.

What was breaking. At peak, that degradation meant queue buildup that puts cutoffs at risk — which in this business is not a performance metric, it is a shipment that does not go out. Nightly batch jobs lagged the inventory picture, so replenishment and routing decisions were being made on yesterday’s data. And there was no client-ready data layer at all, so every status or stock question from the operator’s own clients became a support ticket and a manual export.

What we built. A two-tier architecture: an operational tier for writes and current reads, an analytical tier for reporting and history. A bigger box would have bought perhaps a year — the contention was between two workloads with opposite access patterns sharing one table, and no amount of hardware settles that argument.

We partitioned the orders table by month with pg_partman and migrated all 3.2 billion rows incrementally and in parallel with no downtime. VACUUM now runs per partition in 15–20 minutes with far less impact on production. A read replica pool with streaming replication and PgBouncer separated reads from writes, and CDC via Debezium replicates changes into ClickHouse in near real time.

On top of ClickHouse we built a client-ready data layer with dbt, so the operator’s own clients get self-service access to their orders, stock and SLA metrics instead of asking a human.

The real constraint. There was no maintenance window and there was never going to be one — the order stream does not pause for a migration. That removed every textbook option. Rows had to move underneath live writes, in parallel, without ever leaving the table in a state the application could not read. The migration design was dictated entirely by the absence of permission to stop.

What changed.

013.2 billion rows migrated with no downtime
02Analytical queries4–7 minutes → 8 seconds
03Inventory moved from nightly batch lag to near real time
04Client status and stock tickets dropped once self-service went live
Stack PostgreSQL 15 · pg_partman · PgBouncer · Kafka · Debezium · ClickHouse · dbt · Python · Prometheus · Grafana
Analytical queries: 4–7 minutes → 8 seconds, across 3.2 billion migrated rows
EXH. C03EU omnichannel retailer · 3 fulfillment centers · 8 markets

Order orchestration and one source of truth for inventory

eCommerce & omnichannel

EU omnichannel retailer · own store, marketplaces and B2B EDI · 3 fulfillment centers · 8 markets · legacy middleware failing 2–3 times a week · 6 months

After every middleware incident, operations moved 60 to 150 orders by hand. Twice a week. That was the recovery procedure, and it had been for years.

What was breaking. Duplicate webhooks caused the same order to be processed twice. Static routing across three fulfillment centers produced systematic split shipments — double delivery cost, worse margin, and late deliveries whenever load was uneven. The product master had diverged across ERP, channels and warehouses, which surfaced as picking errors and wrong substitutions. Status notifications lagged 45 to 90 minutes, and missing-update complaints made up 18% of all support tickets. Across eight markets none of this stayed local: one channel’s duplicate webhook became a support queue in three countries, and the manual recovery ran on the same small ops team every time.

What we built. We replaced the middleware with an event-driven Go ingestion layer publishing to Kafka. Every event carries an idempotency key, so duplicate webhooks are filtered at entry and double processing is ruled out architecturally rather than patched after the fact.

A routing engine now evaluates real stock position, the delivery-cost matrix and the promised ship date to select a single fulfilling center — a split shipment became an exception that has to justify itself. Product-master alignment made the ERP the source of truth, with attribute changes replicated to channels and warehouses by event. The order state machine publishes every status transition, and notifications go out within seconds.

The real constraint. You cannot ask a marketplace to stop resending webhooks, and you cannot ask eight markets to align their channel behavior for your convenience. Everything upstream was non-negotiable, which meant correctness had to be enforced at our boundary or not at all. Idempotency at entry was not a refinement — it was the only place in the whole system where the problem could be solved once instead of eight times.

What changed.

01Middleware failures: 2–3 per week → zero in the first month
02Split shipments down 34% — direct monthly delivery savings
03Duplicate-webhook double processing eliminated entirely
04Notification latency45–90 minutes → under 30 seconds
05Status complaints: 18% → 3% of ticket volume
Stack Go 1.21 · Kafka · PostgreSQL · Redis · React · Kubernetes · Datadog
Middleware failures: 2–3 a week → zero in the first month
EXH. C12US multi-channel B2B distributor of industrial components

Demand forecasting as a production process

AI, data & planning

US multi-channel B2B distributor of industrial components · 82,000 SKUs · 4 distribution centers · 12 suppliers with lead times from 3 to 45 days · 7 months

Planning for 82,000 SKUs rested on six people in Excel. A 12% stockout rate meant lost sales and broken B2B commitments, while overstock froze $8M in working capital — the two failures ran at the same time, in the same catalog.

What was breaking. Planners spent 70% of their time gathering data rather than deciding anything. Forty percent of the catalog had intermittent demand — months of zeros, then a single-buyer spike — which is exactly where standard forecasting models fail and exactly where being wrong costs the most. Lead times ranged from 3 to 45 days across twelve suppliers, but purchasing did not account for individual supplier reliability. And whatever the forecast produced was moved into the ERP by hand.

What we built. An ensemble rather than a single model: LightGBM with 40+ features for regular demand, roughly 60% of the catalog, and a Croston/neural-network hybrid for the intermittent 40%, calibrated to the industrial-components profile.

A supplier-reliability model built on 24 months of order history turns a per-supplier lead-time distribution into an automatic safety-stock adjustment, so an unreliable supplier costs inventory rather than service level.

Most importantly, the forecast went into the workflow instead of into a dashboard. Recommendations flow by API straight into the ERP replenishment module as draft purchase orders for one-click approval. Accuracy monitoring by segment triggers retraining when quality drops, so model drift is a handled condition rather than a future incident.

The real constraint. The model was never going to be the hard part. Six planners who had run this catalog for years were being asked to trust a system, and a forecast that arrives as a report gets overridden until it is ignored. So the deliverable was defined as a draft purchase order inside the tool they already used, with the planner keeping the final click. Adoption was designed before accuracy was optimized.

What changed.

01Stockout rate: 12% → about 4% in six months
02$2.3M in working capital released from overstock in the first year
03Planner time spent gathering data70% → 15%
04About 85% of draft replenishment orders generated automatically for planner approval, with drift monitored in production
Stack Python · LightGBM · PyTorch · Apache Airflow · dbt · PostgreSQL · FastAPI · React · MLflow · Docker
$2.3M in working capital released in the first year
EXH. C10US mid-market 3PL · in-house data science team

AI governance and cost recovery

AI, data & planning

US mid-market 3PL · in-house data science team · eight months into AI with no model in production · 3 months

Good demos, no business impact, and leadership drifting toward the kind of disillusionment that shuts down the healthy initiatives along with the dead ones.

What was breaking. Spend had no owner. LLM APIs were costing $42,500 a month, including calls running from staging into integrations nobody used. Two vendors had sold “AI features” that turned out to be regex underneath, never technically verified by anyone on the client side. Three genuinely promising ML projects were stuck in Jupyter notebooks with no deployment pipeline, no monitoring and no route to production — so the company was simultaneously overpaying for AI and getting none of it.

What we built. A structured audit first: every initiative got a status, a real ROI estimate and a technical-readiness rating, which made the portfolio legible to leadership for the first time.

We turned off the staging LLM API calls, which saved $14,000 in the first week. We dropped two pseudo-AI vendors after technical verification. Then we built an ML deployment pipeline — MLflow for tracking and versioning, FastAPI serving, Docker, CI/CD with quality gates — which gave the three stuck projects an actual route to production.

Then a governance rule that outlives us: no new AI initiative starts without defined success metrics, an ROI estimate and a named business owner. The first priority use case, automatic carrier invoice classification, went live under it.

The real constraint. The blocker was political, not technical. Somebody senior had approved the budget and two vendors, and the audit’s honest finding was that part of it bought nothing. That is the finding most consultants soften into a roadmap. We wrote it as a per-initiative rating with the evidence attached, so the conversation was about a document rather than about a person — and the governance rule at the end exists so the same decision cannot be made informally again.

What changed.

01Monthly AI spend: $42,500 → $16,000, down 62% with no working initiative lost
02$14,000/month saved in the first week
03Priority use case in production 9 weeks after the audit
04Every initiative now has metrics, an owner and a path to production
Stack Python · MLflow · FastAPI · Docker · Kubernetes · dbt · PostgreSQL · Grafana
Monthly AI spend: $42,500 → $16,000, with nothing working lost
EXH. C02Urban quick-commerce startup · single metro · greenfield

Quick-commerce platform, built from zero

Last-mile & quick-commerce

Urban quick-commerce startup · sub-30-minute delivery promise · single metro · greenfield, nothing existed · 9 months (6 build, 3 stabilization)

A 30-minute promise leaves about three minutes for the entire warehouse-to-dispatch cycle, with no human dispatcher in the loop. Everything else in the window belongs to picking and to the road. The physics set the architecture before anyone drew a diagram.

What was breaking. Nothing existed — no dispatch orchestration, no inventory reservation, no courier or picker apps. Beyond the blank page, two failure modes were guaranteed by the model itself. Concurrent orders on the same SKU at peak create oversell, and a customer who discovers an item is unavailable after paying is a refund, a support contact and usually a lost account — in a business that only works on repeat orders. And couriers work budget Android devices on unstable urban LTE, so a lost delivery event means a dispute with no evidence behind it.

What we built. The full platform in six months. Customer apps bind each address to the nearest hub and cap carts by weight and volume, so an undeliverable order cannot be placed. Pessimistic database transaction locking rules out overselling structurally rather than probabilistically.

Substitution logic in the picker flow offers an alternative by attribute similarity and price delta with one-tap customer confirmation — the order is not cancelled and conversion holds. The picker app runs optimized in-warehouse routing with barcode confirmation and per-item timing, so slow zones show up as numbers instead of opinions.

The courier app is offline-first: local SQLite storage with background sync, proof of delivery by SMS code, cash handling with change calculation, on-device receipt printing. Events batch-sync without loss when the network drops.

The real constraint. The hardware was not ours to choose. Couriers use whatever phone they own, on whatever signal the street gives them, and no amount of backend quality survives that. Offline-first was forced rather than selected — every courier-side feature had to work with no network and reconcile afterwards, which is a materially harder build than the online version and the reason the delivery evidence chain holds up in a dispute.

What changed.

0185%+ of deliveries inside the 30-minute window from the first production month
02Dispatch synchronization1+ second → 0.01 second, 100× faster
03Five courier partners integrated through one adapter layer; new partners became configuration
04About 1 support ticket per 1,000 orders
05Out-of-stock cancellations reduced to isolated cases
06Zero critical incidents at go-live
Stack Python FastAPI microservices · PostgreSQL · Redis · React Native · Next.js · Celery · Docker · Kubernetes
85%+ of deliveries inside the 30-minute window, from the first production month
EXH. C04Express delivery operator · ~20 city hubs · Central Europe

Integration architecture and field reliability

Last-mile & quick-commerce

Express delivery operator · ~20 city hubs · Central Europe · three courier partners being added at once, mid-ERP rollout · 16 months

The company was scaling faster than its engineering could absorb it: expanding the hub network, rolling out an ERP, and adding three courier partners simultaneously, each needing its own integration logic.

What was breaking. The dispatch board was wired to integrations by hand, which capped growth at the size of the ops team. Disputed deliveries had no evidence base — proof of delivery, photos and geodata were captured unreliably, so the company absorbed “not received” losses it could not disprove. Arrival times did not update when routes changed, so customers watched stale ETAs and called about them. Orders, stock and delivery events lived in three systems reconciled by hand every day.

What we built. We standardized courier integrations behind one internal interface, so a new partner became a matter of configuring credentials and an endpoint. We connected three partners directly, and the client connected a fourth themselves using the same pattern.

We strengthened the delivery evidence chain: geotagged and timestamped photo, signature, SMS code. Every delivery now carries an evidence package that closes a dispute in minutes instead of absorbing it. Dispatch and customer communications were linked, so a route change recalculates the ETA and pushes an update automatically. A data warehouse and ETL pipeline consolidated orders, stock and delivery logs into one operational view.

The real constraint. Three programs were running at once, so the recurring integration queue had to disappear rather than grow. Standardizing partner onboarding as configuration removed that queue; the client connecting the fourth partner without us proved the pattern transferred.

What changed.

01Courier partner onboarding moved from custom development to configuration — fourth partner connected by the client alone
02Delivery disputes closed with evidence — unproven-delivery losses reduced to isolated cases
03ERP rollout completed without stopping live deliveries — our team connected the ERP to the live order stream
Stack Python (Django, Celery) · PostgreSQL · Redis · Google Cloud · Kubernetes · ETL · Sentry
Courier partner onboarding moved from custom development to configuration — the client connected the fourth partner without us
EXH. C11Container terminal operator · 800–1,200 containers a day · USA

Computer vision at a container terminal

Cargo & terminal

Container terminal operator · 800–1,200 containers a day · USA · 139 cameras recording to an archive nobody watched · 12 months

The terminal could see but not act. One hundred and thirty-nine cameras recorded to an archive that was reviewed only during incident investigations — after the money had already been lost.

What was breaking. The gap between physical reality and the digital record was closed by hand. Inspectors documented damage and checked marking across more than a thousand containers a day over three shifts, with quality depending on the individual and the lighting. Marking-versus-manifest discrepancies were caught after the fact, often after customs processing had started, and each one was a delay and a penalty. Damage disputes had no photo evidence, so the terminal regularly absorbed other parties’ claims. Off-the-shelf computer vision models were not reliable in real port conditions: fog, night, direct sun.

What we built. A software layer on the existing camera infrastructure — 127 fixed and 12 PTZ cameras at gate-in, gate-out, yards and approaches — turning video into events, evidence and workflow.

Transfer learning on YOLOv8 brought accuracy to production level. Inference runs through NVIDIA Triton, auto-saving a still frame with timestamp, container ID and camera on every detection. OCR extracts marking, ISO codes, hazmat placards and seal numbers, cross-referencing the manifest via the EDIFACT feed — a discrepancy alerts the dispatcher within 90 seconds, before customs rather than after. On exit, the system generates an annotated PDF report with confidence scores and submits it to the customs pre-clearance portal with no human involvement.

The real constraint. No usable dataset existed, and no general model was going to survive this terminal’s weather. That put three months of data collection in front of a single production inference — 45,000+ labeled images across 180+ categories of damage, marking defects and seal violations, gathered alongside the terminal’s own inspectors and tuned to this terminal’s cargo profile. It is the least impressive part of the project and the reason the model holds up in this terminal's weather.

What changed.

01340+ documentation discrepancies a month caught before customs clearance
02Zero customs delays from documentation errors in the first six months
03Damage claims handled with photo evidence instead of manual archive searches
04The camera infrastructure became a source of operational analytics for the first time
Stack Python · PyTorch · YOLOv8 · NVIDIA Triton · OpenCV · FastAPI · Kafka · PostgreSQL · React · MLflow · Docker · Kubernetes · EDIFACT
340+ documentation discrepancies a month caught before customs clearance

Take any case apart with our CTO before you commit to anything.

Ask our CTO to take any case on this site apart: the architecture, the team, the trade-offs, and what went wrong along the way.