Product · 2025 · 07 / 10
Wisey.
An AI voice-agent that runs mock job interviews end-to-end, from intake call to scored feedback report.
- Context
Wisey is a voice-first interview prep product. A candidate signs in, tells a Vapi agent what role they're preparing for, and gets back a generated interview tailored to the stack and seniority they named. They then take that interview as an actual phone-style voice call with a second agent. The transcript streams in live, the session ends, and a Gemini 2.0 Flash model reads the full exchange and returns a structured report: five category scores from zero to one hundred, a strengths list, an improvement list, and a final written assessment. Everything persists to Firestore so past interviews and feedback are always a click away.
- Approach
The product only works if the voice loop feels like a real conversation, so I built around Vapi's web SDK instead of a chatbot. Two distinct workflows keep intake and interviewing separate, which makes the scoring prompt safe to iterate without regressing the signup path. Feedback generation runs through the Vercel AI SDK with `generateObject` and a zod schema, so the model cannot drift outside the five categories or skip fields. On the infra side, Firebase Admin handles session cookies and server reads, Firestore stores everything, and Next.js 15 App Router wires server actions straight into the UI. One person, one weekend of scoped iterations, no backend service to babysit.
- Outcome
Shipped end-to-end: generation, live voice interview, transcript capture, scored feedback report, retake, and per-user history all work in the deployed build. It stands as a working demonstration of how far a single engineer can get with voice agents, structured LLM output, and Firestore as the spine, without touching a custom backend. Archived as a reference implementation for voice-first LLM products rather than a commercial push.
- Process
- 01
Voice, not chat
The whole session is a real voice call with a Vapi agent. No chat window. The candidate speaks, the agent listens, the transcript streams in live and only the final utterances are kept for scoring.
- 02
Two-agent split
One workflow generates the interview (role, stack, seniority, question count) and writes it to Firestore. A second agent runs the interview itself off the stored questions. Generation and execution are cleanly separated so the scoring prompt can evolve without touching the intake flow.
- 03
Structured feedback
After the call, Gemini 2.0 Flash receives the formatted transcript and returns a typed object via `generateObject` + zod schema. Five fixed categories scored 0-100, plus strengths, gaps, and a final assessment. No free-form essays, no drift.
- 04
Firestore as the spine
Interviews, transcripts, and feedback all land in Firestore collections keyed by userId and interviewId. Firebase Admin on the server, client SDK for auth. Zero custom backend to maintain.
- Credits
- Product & build
- Salah Boussettah
- Next
→ Sketchfolio
Experiment · 2025