Watch the demo: https://www.youtube.com/watch?v=OpVFIRtRqm8

Inspiration
Recruiters spend hours dialing shortlisted candidates just to ask the same questions. Most calls go unanswered or end in two minutes. The shortlist is the bottleneck, so we built an agent that calls all of it.
What it does
OpenLine is a recruiting console with an AI phone screener built on CALL-E. The recruiter no longer dials anyone.
- Type a few details and AI drafts a structured job description.
- Upload resume PDFs. AI reads them, fills the profile, and gives each one an ATS score. Strong matches are shortlisted.
- One click, and the agent will call the candidate.

- When the call ends, you get a clean transcript, structured answers, and a confidence score. You decide who moves on to the interview.

How we built it
- Next.js 16, React 19, and TypeScript, deployed on Vercel.
- Neon Postgres with Drizzle, and Cloudflare R2 for resume files.
- CALL-E for the calls, with a result schema for structured answers.
- OpenAI reads resume PDFs as pages, so scanned resumes work too.
- A single port file is the only code that talks to CALL-E. It checks every script and phone number before dialing.
Challenges we ran into
- CALL-E cannot list past calls, so we save every call row before dialing. A lost call ID would be a call we could never read back.
- The agent cannot look things up mid-call, so every fact it may share goes into the script up front.
- Our first agent talked too much. We cut the opening to one scripted line and told it to accept the first answer.
- Recruiter notes placed in the script could steer the agent. We now keep them out of what the agent is told.
- Non-English transcripts cannot be checked by our English guard, so those calls go straight to a human.
Accomplishments that we're proud of
- The full loop works live: resume to shortlist to call to decision.
- The safety model. The agent always discloses it is an AI and asks consent. A guard blocks topics like age, religion, and current salary in three separate places.
- OpenLine never rejects anyone. Every final decision belongs to a person.
- Try a call lets anyone test the agent on their own phone without saving any data.
What we learned
- Voice agents follow instructions literally. Shorter scripts make better calls.
- Never trust a model to have obeyed. Check its script before the call and its words after.
- Refusing a bad phone number is better than guessing a country code.
What's next for OpenLine
- Book the interview slot on the same call.
- Support the guard in every call language.
- Let candidates pick a callback time when they cannot talk.
Built With
- aws-sdk
- call-e
- cloudflare-r2
- drizzle-orm
- neon
- next.js
- node.js
- openai
- postgresql
- react
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.