Skip to content

rsvedant/Dial0

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Dial0

Dial0 Logo

Research, call orchestration, and founder oversight in one loop.

Next.js React TypeScript Convex Vapi OpenAI Firecrawl Inkeep Autumn Resend

Dial0 is an agentic voice operations platform that researches a request, orchestrates an outbound phone call with cloned voices, and streams transcripts, status, and reports back to founders in real time.

Start a call from the dashboard, watch transcripts and monitor URLs update live, and ship the end-of-call report directly into your workflows.

Overview

The app combines a Next.js interface, Convex real-time backend, and Vapi voice automation to take a typed user intent and convert it into a fully managed call. Context is assembled through Inkeep + Firecrawl research, routed through a guardrailed system prompt, and executed via Vapi while founders monitor transcripts, events, and outcomes inside the dashboard.

Architecture at a glance

flowchart TD
    USER["User<br>(Initiates call intent)"]
    AGENT["Inkeep Main Agent<br>(GPT/OSS-120b)"]
    RAG["Firecrawl<br>(Web Crawling, Retrieval)"]
    CONTEXT["Dynamic Context Builder<br>(GPT/OSS-120b)"]
    VAPIMCP["Dial0 VAPI MCP<br>(Initiates & Controls Call)"]
    CALL["Call Target<br>(Person or business user wants to talk to)"]
    TRANSCRIPTS["Live Listen + Transcript<br>(Websocket, Streaming)"]
    REPORT["End of Call Report"]
    CONVEX{{"Convex<br>(Transcripts,<br>Summaries,<br>Call Events)"}}

    USER -- Call/Chat Intent --> AGENT
    AGENT -- Web Search & Retrieval --> RAG
    AGENT -. Decision, hands off context .-> CONTEXT
    CONTEXT -- Initiate Call --> VAPIMCP
    VAPIMCP -- Connects to --> CALL
    VAPIMCP -- Streaming Audio --> TRANSCRIPTS
    VAPIMCP -- Call Events --> TRANSCRIPTS
    VAPIMCP -- On call end --> REPORT
    AGENT <--> CONTEXT
    TRANSCRIPTS --> CONVEX
    REPORT --> CONVEX
    CONVEX --> USER

    classDef intake fill:#f5ede2,stroke:#b45309,stroke-width:2px,color:#1f1b16;
    classDef intelligence fill:#f1edff,stroke:#5b21b6,stroke-width:2px,color:#1f1b4d;
    classDef voice fill:#fff5e5,stroke:#d97706,stroke-width:2px,color:#3f1d0a;
    classDef data fill:#e7f7f0,stroke:#047857,stroke-width:2px,color:#0f3f2d;
    classDef hub fill:#ece9ff,stroke:#4338ca,stroke-width:3px,color:#1c1633;

    class USER intake;
    class AGENT,CONTEXT intelligence;
    class RAG intelligence;
    class VAPIMCP,CALL voice;
    class TRANSCRIPTS,REPORT data;
    class CONVEX hub;

    linkStyle default stroke:#4338ca,stroke-width:2px;

    style CONVEX fill:#e6f7ff,stroke:#0077b6,stroke-width:2px;
Loading

Legend

  • Intake & Trust Founders capture intent and preferences that frame the call.
  • Intelligence & Planning Inkeep and Firecrawl assemble research and guardrails before dialing.
  • Voice Execution Dial0’s Vapi MCP initiates and controls the call with cloned voices.
  • Data & Oversight Convex persists transcripts, summaries, and alerts for live oversight.

Feature highlights

  • Intent-driven calls Conversation context is composed in app/api/vapi/start-call/route.ts from Convex state and delivered as a system prompt.
  • Live transcripts & status hooks/use-chat.ts merges Convex call events, transcripts, and streaming SSE responses into rich chat bubbles.
  • Voice cloning & overrides convex/actions/voiceCloning.ts registers ElevenLabs voices while settings (api.orchestration.getSettings) handle per-user overrides.
  • Dynamic research loop Firecrawl + Inkeep enrich issues before dialing to improve first-call resolution.
  • Founder supervision Components like components/chat/live-call-transcript.tsx stream monitoring links, recordings, and summaries in real time.

🚀 Technology stack

Frontend

  • Next.js 15.5.3 – App Router UX with server actions and streaming UI.
  • React 18 – Concurrent rendering, hooks-first components.
  • TypeScript 5 – End-to-end typed client and server code.
  • Tailwind CSS 4.1.9 – Utility design system for rapid iteration.
  • Radix UI – Accessible primitives for dialogs, menus, and overlays.
  • Lucide React – Crisp iconography across dashboards and controls.
  • Next Themes – Dark/light theme management.
  • Sonner – High-signal toast notifications during live calls.

Backend & data

  • Convex – Real-time database, queries, and mutations powering the agent loop.
  • Convex Actions – Secure server-side bridges into external APIs.
  • Better Auth – Session + magic link auth flows (via @convex-dev/better-auth).
  • Autumn – Usage metering and billing hooks for minutes and issues.

AI, voice, and research

  • Vapi – Voice MCP orchestrating outbound calls and tool execution.
  • OpenAI / GPT-OSS-120b – Primary reasoning model served through Groq.
  • ElevenLabs – Voice cloning and natural speech synthesis (via Vapi integrations).
  • Deepgram – Streaming transcription for live call monitoring.
  • Inkeep – Structured knowledge retrieval for call context and answers.
  • Firecrawl – Web research enrichment before dialing.

Communications & tooling

  • Resend – Transactional email for auth, alerts, and call summaries.
  • Bun – Dev/runtime tooling (install, scripts, server).
  • concurrently – Parallel Next.js + Convex dev servers.
  • Zod – Input validation for API routes and prompts.
  • Mermaid – Diagramming for architecture visualizations.

Key directories

  • app/ Next.js routes, including /api/chat SSE proxy and /api/vapi/start-call dial orchestration.
  • components/ UI primitives and live call visualizations (components/chat/*).
  • convex/ Database schema, queries, mutations, and actions powering the agent loop.
  • hooks/ Client hooks such as useChat() for streaming UI state.
  • lib/ Auth helpers, geo enrichment, default voice definitions, and AI integrations.

Getting started

git clone https://github.com/rsvedant/Dial0
cd Dial0

# Bun (recommended)
bun install

# or npm
npm install

Environment variables

Copy .env.example and fill in secrets:

cp .env.example .env.local
  • Convex CONVEX_DEPLOYMENT, NEXT_PUBLIC_CONVEX_URL, NEXT_PUBLIC_CONVEX_SITE_URL.
  • Vapi VAPI_PRIVATE_API_KEY, VAPI_PUBLIC_API_KEY, VAPI_PUBLIC_ASSISTANT_ID, VAPI_PHONE_NUMBER_ID, VAPI_ORG_ID, optional VAPI_WEBHOOK_URL for ngrok tunnels.
  • Resend + auth RESEND_API_KEY, RESEND_FROM, INTERNAL_EMAIL_PROXY_SECRET.
  • Agent research AGENT_BASE_URL, AGENT_API_KEY.
  • Autumn usage & GitHub OAuth AUTUMN_SECRET_KEY, GITHUB_CLIENT_ID, GITHUB_CLIENT_SECRET.

Run the stack

# Start Convex locally (reads CONVEX_DEPLOYMENT)
bunx convex dev

# In another terminal
export $(grep -v '^#' .env.local | xargs)
bun run dev

This runs next dev --turbopack alongside Convex via the dev script. Visit http://localhost:3000 for the dashboard.

Vapi webhook

  • VAPI_WEBHOOK_URL can point to an ngrok tunnel to receive call events while local.
  • Outbound requests include issueId and authToken for Convex correlation and are persisted via api.orchestration.appendCallEvent.

Deployment

  • Frontend Deploy to Vercel or Bun-compatible hosts (next build + next start).
  • Convex Promote with bunx convex deploy.
  • Secrets Mirror your .env.local values into production platforms (Vercel, Convex dashboard, Vapi console).

Contributing

Open issues or pull requests are welcome—focus on incremental improvements to the agent loop, observability, and voice quality.


Built with ❤️ by the Dial0 team.

About

Dial0 is an AI agent that takes painful customer service off your plate. Clone your voice, tell it what’s wrong, and it researches your case, reaches the right people by phone or message, escalates when needed, and keeps you updated in real time (via live listen and transcripts) until it’s fixed.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors