Inspiration
Independent travel advisors spend hours on hold with hotels negotiating rates, confirming amenities, and chasing upgrades, then still have to type up notes for the client file. We built CallDesk so an AI agent can make that call for them: brief the objective, dial the hotel, negotiate live, and hand back structured notes they can drop straight into a booking record.
What it does
Advisors open CallDesk, fill a short call brief (hotel, guest, objective, context, language), and start the call. The agent places an outbound voice call while a live transcript streams into the UI. When the call ends, the transcript is turned into structured notes: outcome, negotiated terms, key quotes, and any discrepancies worth flagging. Past calls stay in a simple history so the demo feels like a real desk tool, not a one-shot script.
How we built it
We shipped CallDesk as a Next.js App Router app with TypeScript, Tailwind, and shadcn/Base UI. Backend route handlers own the call lifecycle in an in-memory store: create a call, list history, fetch a call, and stream live updates over SSE. Outbound voice runs through a provider layer that can use Vapi for real calls or a mock provider with a scripted transcript for reliable demos. After the call completes, an LLM extracts structured notes from the transcript with a fallback if extraction fails.
Challenges we ran into
Telephony timing was the hard part. Transcripts can lag after a call ends, so the stream had to wait and poll until the provider finished writing artifacts. Phone number formatting, call status mapping, and keeping the UI in sync without double-fetching GET plus SSE all took careful wiring. Under hackathon time pressure we also had to cut auth, persistence, and CRM export so the 90-second demo stayed focused on the wow moment: watching an AI negotiate a hotel call in real time.
Accomplishments that we're proud of
What we learned
What's next for CallDesk
Built With
- ai
- nextjs
- openai
- react
- shadcn
- sse
- tailwindcss
- tavily
- typescript
- vapi
- voice-ai
Log in or sign up for Devpost to join the conversation.