HwyHaul · Freight Brokerage Internship · May – Jul 2026

The freight back office, run by AI — not by hand.

At HwyHaul, a freight brokerage moving loads between shippers and carriers, I built an AI layer that reads incoming carrier messages, drafts the reply, and clears the billing & AR back office — 100% on the laptop, zero API cost, and a human always clicks Send.

Yusuf Gadelrab excitedly holding up a HwyHaul t-shirt
Last day at HwyHaul — July 2026
77automated tests passing
18finance pain-points solved
100%local · no third-party API
$0ongoing API cost

The Problem

Two things quietly eat a brokerage's day.

The finance and ops teams lose hours to repetitive typing and manual cross-checking across four disconnected systems. That's exactly where automation pays off.

Writing the same emails by hand

Carrier delivery confirmations, payment-date questions, awkward late-payment replies, POD chasers, AR recovery follow-ups — the same messages, retyped all day, every day.

Inbox AI drafts them

Reconciling the back office by hand

The 30-day payment clock, release lists, carrier advances, and rate fixes — reconciled manually across the load portal, the TMS, Google Sheets, and QuickBooks. Four systems, no glue.

Ops tabs automate it

What I Built

Two products, one philosophy: AI drafts, a human decides.

Tap a module to see what's inside. Everything runs locally on a FastAPI server and sends real email through the desktop mail account — no cloud, no leaked data.

The core loop. A carrier texts a load request over WhatsApp or email. The system reads it, extracts the structured load (equipment type, target price, lane, reefer mode, driver combo), and drafts a reply in the brokerage's voice — always replying, even on a partial message, so no carrier is left hanging.
Structured extraction — pulls equipment_type, target_price, lane, load_size, reefer_mode and driver_combination out of messy free-text messages.
Always-reply design — even an ambiguous "SJ/LA?" shorthand gets a graceful clarifying response instead of silence.
Resilient by design — a VPN-aware client degrades cleanly to mock data when the internal network is unreachable, so it never crashes mid-shift.
Billing Ops. Back-office checks rendered as clean tables plus ready-to-send emails. A local agent flags what's off and drafts the outreach — you review and send. 25/25 tests green.
1Stale bank-info detection & false-delay flagging (catching the ~40% of delay flags that were false).
2POD verification and advance reconciliation — surfacing double-pay risk before it goes out the door.
3W-9 / 1099 tracker, 30-day payment-clock tracker, and the daily release list — automated end-to-end.
AR Ops. Accounts-receivable routing and the messy per-customer document rules, handled. 29/29 tests green.
1Invoice routing & rate reconciliation — fuel-surcharge corrections per customer contract, plus sales sign-off.
2Per-customer POD packaging — single combined PDF for one customer, separate documents for another, matched to each TMS's rules.
3Accessorial chasing, underinvoicing checks, and a clean "ready-for-payment" queue.

How It Works

From an incoming message to a sent reply.

A deterministic classifier keeps the demo instant; a local LLM is wired in as an optional upgrade. The pipeline drafts — it never fires blindly.

STEP 1

Incoming message

Carrier email or WhatsApp text arrives at the intake webhook.

STEP 2

Classify & extract

Reads intent, picks 1 of 8 reply types, pulls load / invoice / amount.

STEP 3

Draft in-voice

Fills the matching template in the brokerage's tone.

STEP 4

Human sends

You review, pick the recipient, hit Send — it goes out for real.

pipeline.py
# incoming email textclassifier.py          # intent → 1 of 8 reply types, extract load/invoice/amountemail_assistant.py     # fills the matching template in our voiceyou review + pick recipientMail.app (osascript)   # sends for real — no API key, no cost

The Stack & The Engineering

Built to run anywhere, cost nothing, and never lie about what's real.

Local-first AI

A local LLM (Ollama · qwen3-fast) is the brain, with a fast deterministic rules path so the live demo never lags. No data ever leaves the machine.

Swap-ready integration

Every data access point is marked with a single SWAP line that flips from mock JSON to the live portal / TMS / QuickBooks feed once credentials land.

Honest guardrails

Every draft is editable, a human clicks Send, and sample rows are clearly labeled — nothing shown is real internal data.

Python FastAPI SQLAlchemy Ollama · qwen3-fast Deterministic classifier Mail.app / osascript Mock-to-live SWAP layer VPN-resilient client pytest · 77 tests

Results & What I Learned

Shipped, tested, and honest about the edges.

All 18 finance pain-points, demoable

The AR/Billing controller's full list of 18 items — mapped end-to-end and demonstrable in one local web app, with the two purely-behavioral items flagged honestly as process, not AI.

77 automated tests green

Billing (25/25) and AR (29/29) suites plus intake coverage — a real, test-backed codebase, not a demo held together with tape.

Found & fixed a real crash

Tracked a 500-error where an expired third-party token timed out and crashed the inbound webhook — added error handling so intake stays up regardless.

The big lesson

"Learned more in a couple of weeks than most of a semester." Building AI that ships into a real operations team means designing for failure modes — VPNs down, tokens expired, messy input — first.

🔒 A note on the code: HwyHaul's implementation is confidential to the company, so the repository isn't public. This page is a high-level walkthrough of what I designed and built — a private code walkthrough is available on request.
🚚 What happened next: the systems in this case study became FreightDesk AI — now open for founding-client pilots at $999 setup + $249/mo. No clients are installed yet.

Let's talk

Want the deeper walkthrough?

I'm happy to screen-share the demo and talk through the architecture, the tradeoffs, and the failure-mode design.