Veradic
Functional prototypeVoice AI for freight brokers — cover more loads, make fewer calls.
- Role
- Solo builder — product, strategy, design, engineering
- When
- Hobby project
- TypeScript
- Remix.run v3
- Twilio ConversationRelay
- Cloudflare Durable Objects
- Supabase
- Cloudflare Pages
- Stripe Billing
- OpenRouter
- Databricks (AI evals)
What It Is
Veradic is the AI front desk for independent freight brokers. Brokers spend 6–8 hours a day on phone work — check calls to drivers, coverage calls to carriers, screening inbound carrier calls. Veradic handles that phone work and sends dispatchers the outcomes that matter.
This is a hobby project — a spare-time vehicle for going deep on LLM orchestration and AI tooling by building something real enough to have opinions. I've treated it with full product rigor anyway: market research, competitive analysis, financial modeling, and a working prototype, because the learning only counts if the constraints are real.
The Strategy: Standalone-First
Rather than asking brokers to commit to a full TMS from a brand-new company, Veradic launches as two standalone voice products with a low-commitment entry point, then layers in the TMS once there's traction and trust:
flowchart LR
A[Veradic Outbound<br/>AI check calls · $19/mo] --> B[Veradic Inbound<br/>AI carrier screening · $29/mo]
B --> C[Bundle<br/>$39/mo · 25% off usage]
C --> D[Veradic TMS<br/>load-based tiers, $499 ceiling]
Why Outbound first: the broker initiates the call, the AI dials a known number with a known purpose, and the expected outcome is simple (location, ETA, confirmation). The failure surface is small. Inbound — where an unknown carrier calls and the AI negotiates in real time — is higher-value but requires trust that Outbound earns first.
What's Built
The functional prototype covers the full customer journey:
- Marketing site with radically transparent pricing — every price on one page, an interactive bill calculator, and a hard $499/mo ceiling. No sales calls.
- Self-serve onboarding — account → workspace → phone → voice selection (with a live test call to your own phone) → script → carriers → first campaign, in under 10 minutes. The last step is watching the AI make your first real carrier call.
- Broker dashboard — active campaigns, live call activity, spend tracking, trial usage, and a "needs attention" queue for calls that require a human.
- Live call view — streaming transcript with entity extraction (rate, equipment, origin, availability) updating as the call progresses, plus Listen / Whisper / Take-over intervention controls.
- Command palette (⌘K) across calls, carriers, campaigns, invoices, and settings.
Under the hood: FMCSA-aware dialing (live MC + DOT lookups before every call), carrier identity verification on connect, recorded transcripts with structured outcomes on every call, and clean human handoffs with full context.
Screenshots
Scroll sideways through the gallery — click any screenshot to view it full-size.

Business Model
Flat monthly subscriptions plus metered usage that gets cheaper at volume. Manual flagging means brokers aren't charged for calls they handled themselves. Inbound is priced per-load, not per-call — brokers can't control how many carriers call about a load, so per-call pricing would create unpredictable bills.
The TMS uses load-based tiers that auto-scale both ways: book 300 loads this month and 20 next month, and the bill adjusts down automatically. No manual downgrades, no retention calls, never more than $499/mo — deliberately undercutting incumbent TMS pricing that starts above $500.
The financial model runs monthly for 24 months across base and conservative scenarios — built bottom-up from per-call voice costs, tiered usage pricing, and three acquisition channels:
| Base case | Conservative case | |
|---|---|---|
| First profitable month | M4 | M10 |
| Cumulative break-even | M6 | M19 |
| Max cash outlay | ~$1.5K | ~$8.8K |
| Customers at M24 | ~254 | ~92 |
| ARR at M24 | ~$890K | ~$236K |
| Net margin at M24 | ~77% | ~29% |
The point of modeling both: even the pessimistic scenario bootstraps on under $10K of at-risk cash, because ~90% of revenue is usage-based and the cost structure scales with it.
Positioning
Five competitors mapped across the indie-broker TMS and voice-AI landscape. The wedge: incumbents are either enterprise-priced ($500–$1,000+/mo), feature-gated, stagnant, or AI bolt-ons that don't serve independent brokers at all.
The AI front desk for indie freight brokers. Answers your carrier calls, vets them in real time, and gets smarter the longer you use it.
Roadmap
| Phase | Product | Focus |
|---|---|---|
| 1 | Outbound | Check calls, coverage outreach, quote follow-ups |
| 2 | Inbound | Carrier screening, FMCSA validation, scorecards, live handoff |
| 3 | Carrier Intelligence | Data flywheel: carrier directory, ratings, rate history by lane |
| 4 | TMS | Full load lifecycle, rate cons, invoicing, factoring integrations |
Stack
Deliberately lean for v1: TypeScript end to end on Remix.run v3, hosted on Cloudflare Pages, with Supabase as the backend. The live voice loop runs on Twilio ConversationRelay — STT, TTS, and routing over a websocket terminated by a Cloudflare Durable Object per call, which doubles as that call's conversation-state store. Stripe Billing enforces the metered AI-usage pricing. LLM calls route through OpenRouter for dynamic model selection — swap models per task without rewrites — and Databricks' AI test harness evaluates the long-running agentic call workflows.
One design detail I'm fond of: carrier validation (FMCSA lookups) is slow, so the conversation is the loading spinner. The agent opens with "What's your MC/DOT number?" and "Which load are you calling about?" — by the time the carrier answers and the agent asks for their rate, the scorecard is in hand and flows straight into the negotiation: "It says here you're not authorized to carry after the 11th due to a pending insurance lapse."
v2: a purpose-built orchestration layer that breaks each conversation across multiple specialized agents and persists conversation state and memory between turns — bounding what any single agent has to hold in context, to keep long calls grounded and hallucination-free.