InterviewPrep is an AI-powered mock interview coach built with Next.js, Mantine, and Tailwind CSS. Pair up with a real-time interviewing agent, practice curated technical and behavioral sessions, and receive structured, data-backed feedback so you can level up before your next real interview.
- AI Voice Interviewer – conduct live interview sessions powered by Vapi voice workflows and Google Gemini evaluations.
- Dynamic Interview Library – browse available practice sessions or revisit historical interviews tailored to your stack.
- Structured Feedback Reports – get category scores, strengths, and improvement areas after each session.
- Tech Stack Visuals – auto-detected technology icons for every interview using Devicon CDN fallbacks.
- Secure Auth Flow – Firebase Authentication with session cookies guards all protected routes.
Next.jsApp RouterReact 19with Client/Server ComponentsMantinecomponent primitives via custom stylingTailwind CSS 4+tailwindcss-animateVapivoice-agent SDKGoogle Gemini 2.0 Flashvia@ai-sdk/googleFirebase(Auth + Firestore)Day.js,Zod,React Hook Form
- Node.js 18+
- npm 9+
- Firebase project with Admin credentials
- Vapi account with created workflow & web token
npm installCreate .env.local in the project root:
NEXT_PUBLIC_VAPI_WEB_TOKEN=your_vapi_web_token
NEXT_PUBLIC_VAPI_WORKFLOW_ID=your_vapi_workflow_id
FIREBASE_PROJECT_ID=your_firebase_project_id
FIREBASE_CLIENT_EMAIL=your_firebase_admin_client_email
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"Note: Escape newlines in
FIREBASE_PRIVATE_KEYwith\nor load from a secrets manager.
npm run devVisit http://localhost:3000 to explore the app.
app/
layout.tsx
globals.css
(auth)/
layout.tsx
sign-in/page.tsx
sign-up/page.tsx
(root)/
layout.tsx
page.tsx
interview/
page.tsx
[id]/page.tsx
[id]/feedback/page.tsx
components/
Agent.tsx
AuthForm.tsx
DisplayTechIcons.tsx
InterviewCard.tsx
FormField.tsx
ui/
button.tsx
form.tsx
input.tsx
label.tsx
sonner.tsx
constants/
firebase/
lib/
actions/
utils.ts
vapi.sdk.ts
types/
- Auth pages live under
app/(auth); authenticated sessions redirect back to the dashboard. - Protected routes render through
app/(root)and checkisAuthenticated()on the server. - Successful sign-ins store Firebase session cookies (
setSessionCookie) for gated access.
- User joins an interview (
Agentcomponent) and starts a Vapi voice call. - Transcripts stream back and persist in React state until the call ends.
- On completion, transcripts post to the server action
createFeedback. - Google Gemini evaluates the transcript against
feedbackSchemaand saves to Firestore. - Users review detailed feedback in
app/(root)/interview/[id]/feedback/page.tsx.
npm run dev– start Next.js dev servernpm run build– build for productionnpm run start– run production buildnpm run lint– run ESLint (Next.js config)
Currently no automated tests are configured. Consider integrating Playwright for end-to-end interview flows and Vitest for action-level unit tests.
- Interactive dashboard analytics on interview performance trends.
- Support for custom interview creation with question templates.
- Expanded AI feedback with sample answers and coach tips.
- Exportable feedback reports (PDF/email).
- Fork the repo & create a feature branch
- Ensure lint passes:
npm run lint - Open a pull request describing your changes
This project is licensed under the MIT License.
.png)