Inspiration
Freight brokers spend hours every day manually calling carriers one by one just to check availability and get a rate, then calling back again to negotiate. I wanted to see if an AI voice agent could handle that entire loop autonomously: real phone calls, real negotiation, not just a lookup.
What it does
SupplyLine is a freight-sourcing agent that takes a load (origin, destination, equipment type, weight, pickup date) and calls multiple carriers directly using CALL-E to check availability and get a quote live, real phone conversations, not simulated. It then compares the quotes, and if there's a meaningful gap between them, it calls the higher-priced carrier back a second time and negotiates a better rate using the competing quote as leverage. Once a final rate is settled, the broker can review the AI's recommendation and book the load.
How we built it
Built with Next.js 14 (App Router) and TypeScript, using server actions to call the CALL-E SDK directly. Carrier data and quotes are held in an in-memory store for the demo. Round 1 places parallel calls to each carrier with a structured result schema (availability, rate, pickup confirmation, evidence); Round 2 places a targeted negotiation call to the highest bidder. A summarization step (Kimi/Moonshot API) turns the final comparison into a plain-language recommendation for the broker, with a deterministic local fallback if that API is unavailable.
Challenges we ran into
The biggest challenge was working against a beta telephony platform under real-world conditions, including a platform-wide instability incident on CALL-E's side that caused call queue delays and temporary rate-limit tightening, which I had to design around (per-carrier failure states in the UI instead of the app hanging indefinitely on a stalled call). I also hit and fixed a couple of real integration bugs along the way, including a case where the SDK expected a singular recipient object with a phones array rather than a recipients array, and a case where my summarization API key was provisioned on the wrong regional endpoint.
Accomplishments that we're proud of
I'm proud that the negotiation mechanic isn't a gimmick it's a real, working two-round call flow that produces genuine savings from an actual live conversation, not a scripted outcome. In one real test run, SupplyLine negotiated a carrier down from an $1,800 quote to $1,700 through a live phone call, entirely autonomously. I'm also proud of how the app holds up under unreliable real-world conditions: when a carrier call fails, times out, or comes back incomplete, the UI degrades gracefully per-carrier instead of breaking the whole flow which mattered a lot once I started testing against a live telephony platform instead of mocks.
What we learned
I learned that building against a real voice-calling API is fundamentally different from building against a typical REST API call state, timing, and even audio quality are outside your control, and a resilient app has to treat "the call didn't go the way we expected" as a normal case, not an edge case. I also learned the value of verifying actual API responses instead of trusting assumptions from documentation or spec: two of my early integration bugs came from unverified assumptions about the shape of CALL-E's request and response objects, and both were only caught by inspecting real call data.
What's next for SupplyLine
Support for more than two competing carriers per load, persistent storage instead of in-memory state, and expanding the negotiation logic to handle multi-round back-and-forth rather than a single counter-offer.
Built With
- ai
- call-e-sdk
- kimi
- moonshot
- next.js
- node.js
- react
- tailwind-css
- typescript
Log in or sign up for Devpost to join the conversation.