Skip to content
Cenvori Labs
Work

Systems we've shipped and still maintain.

Below is one logistics stack we built and still operate: partner EDI, a load-board integration, and email automation. Client names stay under NDA — the screens, numbers, and code are ours.

Tender inbox screen with an AS2 transport panel and an outbound 990 message
Logistics · EDI integration
EDI 204 / 990 / 214 over AS2
A signed and encrypted AS2 endpoint that takes partner load tenders, answers with a 990 accept or reject from the ops screen, and reports delivery status back as a 214. Every message is stored raw, so a disputed tender can be replayed segment by segment.
1 400+ tendersMDN under 300 msX12 · OpenAS2 · Laravel
Dashboard of live load postings with refresh age and API status
Logistics · Load board API
Load posting synced with DAT
Loads go to the DAT board from the internal dashboard instead of by hand, and a scheduler bumps each posting on the API's own 15-minute cadence. Anything that slips past that window is flagged in red before a broker calls about a stale rate.
248 live postings99.8% API successGo · PostgreSQL · cron
Email bot thread negotiating a rate with a carrier
Logistics · AI automation
Bots that answer carriers
Mailbox bots read incoming carrier email, pull the rate out of the text, and counter within a floor the dispatcher sets. Each bot keeps its own tone and working hours, and the thread is handed to a human the moment it goes off-script.
5 s median first reply600+ replies a dayGmail push · LLM · queue
How the three fit together
01
A tender arrives
The shipper's 204 lands on the AS2 endpoint and shows up as a load in the dashboard.
02
It goes to the market
Accepted loads are posted to DAT through the API and kept fresh automatically.
03
Carriers get answered
Replies are handled by the bots until a rate is agreed, then a person takes the thread.
One dashboard, three integrations, two engineers on call.
Client names and internal identifiers withheld under NDA — details available on request.

Want to see something closer to your use case?

Get a quote