DM
Back to Projects
InterviewMate — Voice-First AI Mock Interview Platform
CompletedReactNode.jsExpress.js+7 more

InterviewMate — Voice-First AI Mock Interview Platform

InterviewMate is an AI-powered mock interview platform that lets users practice realistic interviews through live voice conversations.

Timeline

1–2 months

Role

Full Stack Developer / AI Engineer

Team

Solo

Status
Completed

Technology Stack

React
Node.js
Express.js
MongoDB
JWT
Vapi.ai
OpenRouter
Gemini
Tailwind CSS
Recharts

Overview

InterviewMate is a voice-first AI mock interview platform. Users speak to an AI interviewer in real time, and after the session ends, they receive structured feedback with per-question scores, improvement points, and progress tracking across sessions.

The goal was to make interview prep feel like the real thing — not a question bank or a chatbot, but a live conversation with an interviewer who asks follow-ups, holds context, and gives honest feedback at the end.

The Problem

Most interview prep tools are static. They give you a list of questions, maybe some model answers, and call it practice. That doesn't help with the part that actually matters: thinking under pressure, speaking clearly, and staying composed in a real conversation.

Hiring a human coach to practice consistently is expensive. AI chatbots feel nothing like a real interview. And most tools give feedback that's too vague to act on — "improve your communication" isn't useful.

How It Works

The flow is straightforward from the user's side: configure an interview, start talking, review the report. Behind the scenes, two separate systems handle it.

The interview session runs through Vapi, which manages the live voice conversation in real time. The full transcript is captured and saved as the session progresses.

Once the interview ends, the analysis pipeline kicks in asynchronously. The transcript goes to OpenRouter, gets evaluated by Gemini, and comes back as structured feedback — per-question scores, strengths, areas to improve, and an overall performance summary. The user sees their results a few moments later.

Keeping these two systems separate was the most important architectural decision. The live session stays fast and responsive because it never waits on AI analysis. And the analysis step is deterministic — it always works from the same saved transcript, so if something fails, it can be retried cleanly.

Screenshots

Landing Page & Voice Sandbox

Landing Page & Live Simulator

Performance Evaluation Dashboard

Performance Evaluation Dashboard

Setup Room & Active Session Workspace

Setup Room and Session Workspace

Interview Processing Flow

Interview Processing Flow

What I Built

Real-Time Voice Interview

A live voice interview session powered by Vapi. The AI interviewer asks questions, listens to responses, handles follow-ups, and manages the conversation flow naturally. Users speak — the AI responds.

Dynamic Interview Setup

Users configure the interview before it starts: role, experience level, interview type, interviewer persona, and optional resume or job description context. The AI uses this to tailor the questions and tone of the session.

Transcript Capture

The full conversation is streamed, normalized, and persisted as the session runs. The transcript becomes the source of truth for everything that follows — analysis, reports, and history.

Async AI Evaluation

After the interview ends, the transcript is evaluated by Gemini through OpenRouter. The analysis returns structured data: per-question feedback, scores, strengths, weak spots, and an overall performance summary. It runs after the session, never during.

Multi-Model Fallback

If one Gemini model fails or hits a rate limit, the system automatically moves to the next model in the chain. The user's report still gets generated — the failure is handled silently.

Custom JWT Authentication

Full authentication built from scratch: signup, login, HTTP-only session cookies, protected routes, and session restoration. No third-party auth provider — just full control over the auth layer.

Interview History & Analytics

Users can revisit past interviews, read their reports, and see performance trends across sessions. The dashboard shows how scores evolve over time and where improvement is happening.

Technical Challenges

Keeping the live session fast

AI evaluation takes time. If the session waited for analysis before returning to the user, the experience would feel broken. The solution was to decouple them entirely — the interview ends, the transcript is saved, and the analysis runs in the background. The user gets their report when it's ready, not when the interview finishes.

Handling AI reliability

Language model APIs fail. They rate-limit, they time out, they return malformed responses. Building a multi-model fallback through OpenRouter meant the evaluation pipeline could survive individual model failures without the user ever knowing. The structure of the prompt also matters — asking for structured JSON output made the results parseable and consistent.

Transcript normalization

Vapi streams partial and final transcript updates in real time. Getting a clean, ordered, speaker-attributed transcript out of that stream required careful normalization before it could be reliably sent for analysis.

Session lifecycle design

A voice interview session has more states than a typical web interaction: configuring, waiting, in-progress, completed, analyzing, failed. Designing a session lifecycle that handled each of those states correctly — and recovered gracefully from failures at any point — was one of the more complex parts of the backend.

What I Learned

This project pushed me into parts of full-stack development that most projects don't touch — real-time voice, long-running AI jobs, and asynchronous pipelines where each step depends on the last.

The biggest shift in thinking: voice AI products aren't just AI wrapped in a UI. The session management, transcript handling, and reliability patterns around the AI layer are just as important as the model itself. Getting the model to produce good output is one problem. Making sure that output always reaches the user — even when things fail — is a separate and harder problem.

Future Direction

  • Resume-aware and company-specific interview tracks
  • Deepgram STT and ElevenLabs TTS for a fully custom voice pipeline
  • Real-time interruption handling
  • Adaptive follow-up questioning based on user responses
  • PDF report exports and team dashboards
  • Historical skill trend analysis and personalized improvement plans