An intelligent voice-AI powered interview platform that transforms the hiring process through real-time voice interactions. Experience human-like conversations powered by advanced speech recognition, natural language processing, and adaptive AI that evaluates candidates with professional-grade insights and detailed performance analytics.
🌐 Live Demo: https://real-ai-mock-intervieww.vercel.app/
- Vapi Integration: Utilizes Vapi's Deepgram (Nova-2) transcription and PlayHT voice synthesis for natural conversations.
- Timed Interview Sessions: Built-in countdown timer with automatic session management and graceful termination.
- Adaptive Question Selection: Dynamically curates personalized interview questions from an AI-generated pool based on job requirements or resume analysis.
- Microphone Permission Handling: Automatic prompt for microphone access with graceful error handling.
- Two Input Methods:
- Upload a PDF resume (ImageKit integration) for resume-based question generation.
- Provide job title and description for role-specific interview questions.
- n8n Workflow Automation: Backend workflows handle question generation and response evaluation via n8n webhooks.
- OpenAI GPT-4o Model: Powers the AI interviewer with context-aware follow-ups, hints, and adaptive questioning.
- 20-Point Scoring System: Evaluates candidates on tone, clarity, confidence, technical accuracy, and content quality.
- Detailed Results Dashboard:
- Final score with percentage breakdown
- Strengths and weaknesses analysis
- Reason for deductions
- Question-wise justification
- Overall performance conclusion
- PDF Report Export: Download professional interview reports with @react-pdf/renderer.
- Clerk Auth: Secure sign-in/sign-up with email verification and user profile management.
- Arcjet Token Bucket: Rate limiting with 3 free interview credits per 24 hours (refill rate: 2 credits/day).
- Protected Routes: Middleware-enforced authentication for dashboard and interview pages.
- Interview History: Grid view of all past interviews with scores, strengths, and weaknesses.
- One-Click Results: Navigate directly to detailed result pages from dashboard cards.
- Empty State Onboarding: Friendly UI prompts for first-time users to create their first interview.
- shadcn/ui Components: Pre-built, accessible UI components (dialogs, tabs, buttons, file uploads).
- Tailwind CSS: Utility-first styling with dark mode gradient cards and smooth animations.
- CSR + SSR Hybrid: Next.js App Router for optimized page loads and dynamic client interactions.
| Category | Tools & Frameworks |
|---|---|
| Frontend | Next.js 15 (App Router, CSR + SSR), React 19, shadcn/ui, Tailwind CSS 4 |
| Backend | Convex (realtime database), n8n (workflow automation), Node.js |
| AI & Voice | Vapi (Deepgram Nova-2, PlayHT), OpenAI GPT-4o |
| Auth & Security | Clerk (authentication), Arcjet (rate limiting, token bucket) |
| File Storage | ImageKit (resume upload & CDN) |
| PDF Generation | @react-pdf/renderer |
| Deployment | Vercel |
.
├── app/
│ ├── (auth)/ # auth pages (sign-in, sign-up)
│ ├── (routes)/dashboard/ # app routes for dashboard & subcomponents
│ ├── interview/ # interview pages (start, result, layout)
│ ├── ConvexClientProvider.tsx
│ ├── globals.css
│ └── layout.tsx, page.tsx, Provider.tsx
├── api/ # Next.js API route handlers (serverless)
│ ├── generate-ai-questions/
│ └── ... # arcjet, sendmail endpoints
├── components/ # shared components (demos, UI primitives)
│ └── ui/ # small UI components (button, input, dialog...)
├── convex/ # Convex functions and schema
│ ├── schema.ts
│ ├── users.ts
│ ├── interview.ts
│ └── _generated/ # generated Convex client/server types
├── context/ # React contexts
├── lib/ # utility helpers
├── public/ # static assets
├── utils/ # route helpers (server runtime)
├── .env.local # local environment variables (not committed)
├── next.config.ts
├── tsconfig.json
├── package.json
├── postcss.config.mjs
├── README.md
└── components.json / middleware.ts / N8N_WEBHOOK_GUIDE.md
app/: Next.js App Router pages and layouts. Main UI and routing.app/(auth)/sign-in&sign-up: authentication entry points.app/(routes)/dashboard/: dashboard pages & components.app/interview/[interviewId]/start/page.tsx: interview start flow.app/interview/[interviewId]/result/: results and PDF generation.
api/: server-only route handlers for AI question generation, mailing, etc.convex/: Convex database schema and server functions.convex/_generated/: generated Convex client and server code (keep if required by deployment).
components/ui/: reusable UI components (buttons, dialogs, inputs).context/UserDetailContext.tsx: stores user details across the app.lib/utils.ts: helper utilities used across server/client.utils/route.ts: custom server-side route helpers.
Add these to .env.local (or your host's environment) as appropriate.
- NEXT_PUBLIC_VAPI_PUBLIC_KEY=
- CONVEX_DEPLOY_KEY=
- NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=
- CLERK_SECRET_KEY=
- NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
- NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=/dashboard
- NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=//dashboard
- NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
- CONVEX_DEPLOYMENT=
- NEXT_PUBLIC_CONVEX_URL=
- IMAGEKIT_URL_ENDPOINT=
- IMAGEKIT_URL_PUBLIC_KEY=
- IMAGEKIT_URL_PRIVATE_KEY=
- ARCJET_KEY=
dev— start Next.js dev server (npm run dev)build— build Next.js app (npm run build)start— start production server (npm start)convex:dev— start Convex local dev (npm run convex:dev)
- Install dependencies
# using npm
npm install
# or pnpm
pnpm install-
Create
.env.localand add the environment variables listed above. -
(Optional) Start Convex locally if you run it locally
npm run convex:dev
# or: convex dev- Start Next.js dev server
npm run dev- Ensure Convex is configured for production or use a managed Convex instance; set production CONVEX keys in your host platform.
- Provide Clerk environment variables to the hosting platform (Vercel, etc.).
- Confirm any generated Convex files (
convex/_generated) are present if required by your deployment.
This repository doesn't include a test runner in package.json. Consider adding a lightweight test setup (Vitest / Jest) for components and server functions.
- After changing Convex schema/functions, regenerate client types (see Convex docs).
- Keep
.env.localout of version control. - Use
next build+next startfor production runs, or deploy to Vercel for automatic builds.
- Open issues or PRs.
- Follow the code style used in the repo (TypeScript, Next.js App Router).
- For major changes, open a draft PR and request review.