Inspiration
Preparing for interviews is often stressful and unstructured. Most existing tools rely on generic, rigid question banks that don't adapt to a candidate's actual experience or the specific job description they are applying for.
We built PrepAI to create a realistic, adaptive mock interview experience—an AI coach that reads your actual resume, listens to your responses, and asks meaningful follow-up questions just like a human interviewer would.
What it does
PrepAI is a full-stack, AI-powered mock interview platform that turns job preparation into an interactive, feedback-driven experience:
- Resume & JD Parsing: Upload a PDF resume and optionally paste a job description. PrepAI extracts your skills and projects server-side into a structured profile.
- Adaptive Interviews: Questions are dynamically generated using Google Gemini API. Each follow-up builds naturally on your previous answer rather than following a static script.
- Voice & Live Confidence Tracking: Answer using text or voice (via Web Speech API) while getting real-time UI feedback on answer length and tone confidence.
- Detailed Evaluation Report: Upon completion, candidates get a comprehensive dashboard featuring an overall score, grammar/confidence breakdown, performance radar/bar charts, and per-question model answers.
How we built it
PrepAI is designed with end-to-end type safety, clean API boundaries, and a distinct "study lamp at night" visual identity (deep ink tones, warm brass accents, and custom typography).
- Framework: Next.js 14 (App Router), React 18, and TypeScript (Strict Mode).
- AI & NLP: Google Gemini API (
gemini-2.0-flash) for fast resume extraction, dynamic question generation, and report scoring. - Parsing & Voice:
pdf-parsefor server-side text extraction and browser-native Web Speech API for zero-cost voice input. - UI & Data Viz: Tailwind CSS, Lucide Icons, and Recharts for interactive performance graphs.
Challenges we faced
- Strict JSON Parsing from Unstructured Text: Extracting structured JSON reliably from raw resume text required crafting robust prompt boundaries and schema-enforcing instructions for the Gemini API.
- Context-Aware Dynamic Interview State: Ensuring the model maintains conversation context across turns without drifting off-topic or repeating questions required designing a clean in-memory session store (
sessionStore.ts) and optimized context windows. - Low-Latency Voice UI: Integrating the native Web Speech API seamlessly alongside a live answer confidence heuristic without triggering UI lag or re-render churn.
What we learned
- How to leverage Gemini 2.0 Flash for sub-second structured JSON responses and conversational prompting.
- Crafting custom design systems in Tailwind CSS to give an AI app a distinct, warm identity rather than a generic SaaS template look.
- Clean API routing patterns in Next.js 14 App Router for parsing, streaming session updates, and server-side evaluation.
Built With
- ai/ml
- full
- google-gemini-api
- next.js
- node.js
- pdf-parsing
- react
- recharts
- tailwind-css
- typescript
- web-speech-api


Log in or sign up for Devpost to join the conversation.