The problem
The brokerage’s drayage team was quoting entirely by hand. Each lane meant emailing carriers individually from Outlook, reading through each response (every carrier formats their rates differently), copying numbers into personal Excel sheets, calculating totals, applying a markup, and formatting a quote to send to the customer. No shared system existed — each rep maintained their own spreadsheet and carrier contact list.
At 5–10 minutes per lane, excluding the time it takes carriers to respond, that adds up to 25–50 minutes per day, 2–4 hours per week, and 8–16 hours per month — mostly rote work. The real cost wasn’t just the time; it was the mental load of interpreting each carrier’s email format, which left less capacity for the actual analysis that makes a quote competitive.
There was no shared carrier database either. If a rep knew a carrier was strong on a particular port, that knowledge stayed with them.
What we built
A web application that handles the full drayage quoting workflow — from logging a lane to delivering a customer-ready quote — without replacing email as the communication channel.
The quoting flow has six steps:
- Log a lane — rep enters the origin port, destination, container specs, and customer. Becomes a shared opportunity list visible across the team.
- Blast carriers — the platform filters a shared carrier database by port and the rep’s preferred carriers. Generates a pre-formatted rate request; the rep sends from their own Outlook via one-click mailto links. Rep is notified by email when their response threshold is hit.
- Parse responses — reps forward incoming rate emails to the platform. A two-stage pipeline (rule-based extraction followed by an AI correction pass) maps each carrier’s email into 27 standardized charge buckets. Original emails are always one click away for reference.
- Compare rates — a side-by-side table sorted by total cost, with inline editing and per-item P&L visibility.
- Build a lineup — rep selects a primary carrier and any number of backups, ranked in order.
- Mark up and export — flat or percentage markups per line item, with a live P&L view. One click generates a formatted CSV ready to send to the customer.
Carrier notes, contacts, and port coverage are shared across the team. Any rep can see what another has written about a carrier.



The results
Quoting is 2–4x faster. The gains are most pronounced on large rate requests.
One rep ran a 17-lane RFQ through the platform: emailed 49 carriers (44 responded), and completed all 17 quotes in 40 minutes — about 2.5 minutes per lane. The same request using the old process would have taken between 1.5-3 hours.
Carrier response rates stayed the same (40–90%) because rate requests still come from the rep’s own email address — carriers can’t tell the difference.
| Metric | Before | After |
|---|---|---|
| Time per lane (excl. carrier response) | 5–10 min | ~2.5 min |
| Hours saved per rep per month | — | 3–10 hrs |
| Team-wide hours saved per month | — | 16–50 hrs |
| Carrier response rate | 40–90% | 40–90% (unchanged) |
Beyond the numbers, reps reported a meaningful drop in cognitive load. No more interpreting each carrier’s unique email format, no more guesswork on P&L, and building a solid backup carrier lineup upfront is now a two-minute task instead of a scramble.
Technical details
- Stack: Go backend, HTMX frontend, SQLite database
- AI parsing: Two-stage rate extraction — a rule-based pass followed by an AI correction layer that handles non-standard formatting, missing line items, and ambiguous charge types. The AI model is configurable and swappable.
- Deployment: Single Docker container on Fly.io, with continuous database backup to S3
- Auth: Email-based login codes (no passwords)
- Ongoing maintenance: Tier 0 (~2 hours/month)
