AI voice agent platform
CallGenie
CallGenie is a web platform for businesses that want AI voice agents to handle routine calls — outbound follow-ups, lead capture and booking requests — while their team keeps visibility over every conversation. I built the platform around Vapi voice agents, with a Next.js dashboard and a PostgreSQL data model for campaigns, contacts and call records.
- Role
- Full-stack development
- Status
- Live product site and demo available.
- Links
- Visit live site

The problem
Small and growing teams miss calls and let lead follow-ups slip because phone work does not scale with headcount. Off-the-shelf voice AI handles the conversation, but a business still needs somewhere to load contacts, run campaigns on a schedule, see what happened on each call and act on the bookings that come out of it.
Approach
I treated the voice agent as one component and focused the product on the operational layer around it: getting contacts in, deciding when calls go out, and turning call results into something a team can act on. The dashboard covers campaign set-up, CSV contact import, scheduling, call tracking, booking management and reporting.
What I built
- CSV contact upload for building call lists without manual entry
- Campaign scheduling for outbound calling runs
- Call tracking with per-call status and history
- Booking management for appointments captured during calls
- Reporting dashboards for campaign and call performance
- Vapi-powered voice agents for natural, real-time conversations
Architecture
Next.js and React (TypeScript) for the dashboard and marketing site. PostgreSQL stores campaigns, contacts, call records and bookings. REST APIs connect the dashboard to the Vapi voice-agent platform, which handles speech, telephony and the live conversation.
Key decisions
Build on a voice platform rather than a custom speech stack
Using Vapi for speech, telephony and turn-taking kept the project focused on the business workflow — campaigns, contacts, bookings and reporting — instead of rebuilding real-time voice infrastructure.
Relational data model for campaigns and calls
Campaigns, contacts, calls and bookings are naturally relational. PostgreSQL makes it straightforward to report across them, for example bookings per campaign or call outcomes per contact list.
CSV import as the first data entry path
Most teams already keep contacts in spreadsheets or a CRM export. Supporting CSV upload first removes the biggest barrier to running a first campaign.
Screens

