AI-powered outbound voice call assistant. Enter a phone number, Nirvaan places an AI-driven call via Retell AI, then tracks the call in real time and surfaces a structured summary when it ends.
User submits phone number
│
▼
Node.js backend calls Retell API → creates outbound phone call
│
▼
Frontend polls /call-details/:call_id every 2 s
│
▼
CallProgress shows live call status (ringing → in-progress → ended)
│
▼
CallResults renders transcript, sentiment, and call summary
| Layer | Technology |
|---|---|
| Frontend | React 18, TypeScript, Vite, Tailwind CSS |
| Backend | Node.js, Express |
| AI / Voice | Retell AI (outbound call + LLM agent) |
| Containerization | Docker, Docker Compose |
- Node.js 18+
- Retell AI account — you need an API key, an agent ID, and a provisioned phone number
git clone https://github.com/ashvinctrl/Nirvaan.git
cd Nirvaan
cp .env.example .envEdit .env:
RETELL_API_KEY=your_retell_api_key
AGENT_ID=your_retell_agent_id
FROM_PHONE_NUMBER=+1xxxxxxxxxx
PORT=8050docker-compose up --buildFrontend: http://localhost:5173 — Backend: http://localhost:8050
# Backend
cd backend && npm install && node app.js
# Frontend (new terminal)
cd .. && pnpm install && pnpm dev| Method | Endpoint | Description |
|---|---|---|
POST |
/submit |
Creates an outbound call. Body: { "phone_number": "+1..." }. Returns call_id. |
GET |
/call-details/:call_id |
Returns current call status, transcript, and metadata from Retell. |
backend/
app.js Express server — Retell API integration
src/
components/
Form.tsx Phone number input and submission
CallProgress.tsx Real-time call status polling
CallResults.tsx Transcript and summary display
AudioControls.tsx Playback controls (if recording available)
pages/
hooks/
- Fork → feature branch → pull request
- Run
pnpm lintbefore opening a PR
MIT