Inspiration

Every trading business has an RFQ inbox and a guy on the phone. A customer emails "12 units of the Predator Helios 16 AI, RTX 5080, 32GB, 2TB, need it in two weeks" — and someone calls four distributors, asks the same question four times, spends forty minutes, and the prices go stale by tomorrow. Worse: "Predator Helios 16 AI" is a family, not a SKU. A distributor quoting the RTX 5070 variant is a wrong answer wearing a cheaper price tag, and a human scanning four quotes for the lowest number will send it.

What it does

QuoteDesk turns an inbound RFQ email plus a product URL into a verified customer quote:

  1. Intake — deterministic parsing of the email + URL into a structured RequestedSpec (no LLM, no fetch).
  2. One CALL-E call task, all distributors as recipients — a strict per-recipient result schema forces every extracted field to carry a transcript evidence span and a confidence grade: confirmed (read back on the call), heard_once, or unstated.
  3. Configuration identity resolution — every quote is compared field by field against the ask. Verdicts are fail-closed: verified_match, wrong_configuration, or unverified. Unstated is never a match. Price and ETA must be read back (confirmed) or the row cannot enter the customer quote — "forty-two five" and "forty-two fifty" are one vowel apart and one of them is a hole in your margin.
  4. The sell-side close — landed cost + margin from a market config (India default: IGST, freight, forex buffer), a drafted customer quote that is generated, never sent (a human hits send, by email — the right channel for the customer side), a hash-chained append-only ledger, and a per-distributor reliability scorecard that compounds with every RFQ.

In the demo, the cheapest distributor (₹2,31,000, 3 days) confirms on the call that it's the RTX 5070 / 1TB variant — QuoteDesk excludes it as wrong_configuration. The second cheapest never read the ETA back — blocked. The quote is built on the verified one.

How we built it

TypeScript + @call-e/calle + zod. One multi-recipient call task with recipient_result_schema per distributor and a cross-call result_schema rollup — the idiomatic CALL-E pattern, not four loops. Idempotency keys derive from (rfqId + distributor set) so a retry can never double-dial; the returned call id is persisted to the ledger immediately because there is no list-calls endpoint. Dry-run on canned fixtures is the default; --live is explicit. 26 tests run with zero credentials and zero calls.

Challenges

CALL-E exposes no client cancellation — a created call runs to completion — so QuoteDesk dispatches exactly one controlled wave per RFQ and documents it honestly. Voicemail and unextractable results reconcile fail-closed as unverified: a state for human follow-up, not an error to retry blindly.

Accomplishments

We verified the live path on a real +91 call: GPU, RAM, storage and price came back confirmed with read-back evidence spans; an ETA said once graded heard_once and was blocked; a product family the callee never named graded unstated and kept the quote ineligible. Both fail-closed rules fired on a real phone line, unprompted.

What's next

Computers is the wedge. Pharma, auto parts, building materials, industrial MRO, chemicals — every trading business runs on RFQs and phone calls. The distributor scorecard is the part that compounds into a business.

Built With

Share this project:

Updates

Submission history