An AI-powered mock interview practice platform that helps you prepare for technical and HR interviews with real-time video recording and smart performance analysis.
- Overview
- Features
- Tech Stack
- Getting Started
- Usage
- Project Structure
- App Flow
- API & Integrations
- Roadmap
- Contributing
- License
Interview Buddy is a full-stack web application designed to help job seekers practice and improve their interview skills. Users can choose between Technical or HR/Behavioral interview modes, answer AI-generated questions on camera, and receive a detailed performance analysis report covering speech delivery, content quality, and body language.
The platform records video responses directly in the browser using the native MediaRecorder API β no third-party recording service needed. Post-interview, a smart analysis dashboard breaks down your performance across multiple dimensions with actionable improvement suggestions.
-
Dual Interview Modes
- Technical Interview (~15 min, 5 questions): system design, problem solving, code quality, development practices
- General HR Interview (~12 min, 5 questions): behavioral, teamwork, self-assessment, career goals
-
Camera & Microphone Setup
- Live preview with permission-gating before the session starts
- Camera and microphone toggle controls during the interview
-
Live Interview Session
- One question displayed at a time with category label
- Per-question countdown timer (90β180 seconds)
- Progress indicator (Question X of 5)
- Start / Pause / Resume video recording per question
- Early exit with "End Interview" button
-
Smart Analysis Dashboard
- Overall score with grade (AβF scale)
- Category breakdown: Speech & Delivery, Content Quality, Body Language
- 4-tab detailed view: Overview, Speech, Content, Body Language
- Question-by-question score breakdown
- Strengths and Areas to Improve lists
- Sub-metric progress bars (speaking pace, filler words, clarity, eye contact, posture, etc.)
-
Modern UI/UX
- Responsive design with Tailwind CSS
- Dark/light mode support via
next-themes - Full shadcn/ui component library (Radix UI primitives)
- Smooth animations with
tailwindcss-animate
| Layer | Technology | Version |
|---|---|---|
| Frontend Framework | React | 18.3 |
| Language | TypeScript | 5.8 |
| Build Tool | Vite + SWC | 5.4 |
| Routing | React Router DOM | 6.30 |
| Server State | TanStack React Query | 5.83 |
| UI Components | shadcn/ui (Radix UI) | latest |
| Styling | Tailwind CSS | 3.4 |
| Icons | Lucide React | 0.462 |
| Forms | React Hook Form + Zod | 7.x / 3.x |
| Charts | Recharts | 2.15 |
| Backend / DB | Supabase (PostgreSQL + Auth) | 2.95 |
| Notifications | Sonner | 1.7 |
| Theme | next-themes | 0.3 |
| Video Capture | Browser MediaRecorder API | - |
| Testing | Vitest + Testing Library | 3.x |
| Platform | Lovable Cloud | - |
- Node.js β₯ 18.x
- npm or bun
- A Supabase project (free tier works)
- A modern browser with camera/microphone access (Chrome, Firefox, Edge)
# Clone the repository
git clone https://github.com/<your-username>/interview-buddy.git
cd interview-buddy
# Install dependencies
npm install
# or
bun install
# Start the development server
npm run dev
# or
bun devThe app will be available at http://localhost:8080.
Create a .env file in the project root:
VITE_SUPABASE_URL=https://<your-project-id>.supabase.co
VITE_SUPABASE_ANON_KEY=<your-anon-key>You can find these values in your Supabase project dashboard under Settings β API.
- Open the app at
http://localhost:8080 - Click "Start Interview" on the landing page
- Choose interview type (Technical or General HR) on the Setup page
- Grant camera and microphone permissions β a live preview confirms your setup
- Click "Start Interview" to begin the session
- Answer each question on camera β use the record button to capture your response
- Navigate through questions with Next/Finish controls
- Review your results on the analysis dashboard
interview-buddy/
βββ public/ # Static assets (favicon, robots.txt)
βββ src/
β βββ components/
β β βββ landing/ # Landing page sections (Hero, HowItWorks)
β β βββ ui/ # shadcn/ui component library (48 components)
β β βββ NavLink.tsx # Navigation link component
β βββ hooks/
β β βββ use-mobile.tsx # Responsive breakpoint hook
β β βββ use-toast.ts # Toast notification hook
β βββ integrations/
β β βββ supabase/
β β βββ client.ts # Supabase client initialization
β β βββ types.ts # Auto-generated DB types
β βββ lib/
β β βββ interview-data.ts # Question bank, interview configs, types
β β βββ utils.ts # Tailwind cn() utility
β βββ pages/
β β βββ Index.tsx # Landing page
β β βββ Setup.tsx # Interview type selection + camera check
β β βββ Interview.tsx # Live interview session with recording
β β βββ Results.tsx # Post-interview analysis dashboard
β β βββ NotFound.tsx # 404 page
β βββ test/ # Vitest test setup
β βββ App.tsx # Root component + router configuration
β βββ main.tsx # React DOM entry point
β βββ index.css # Global styles + CSS design tokens
βββ supabase/
β βββ config.toml # Supabase local dev config
βββ index.html # HTML entry point
βββ package.json
βββ tailwind.config.ts
βββ tsconfig.json
βββ vite.config.ts
βββ vitest.config.ts
Landing Page (/)
β
βΌ
Setup Page (/setup)
β’ Choose interview type: Technical | General HR
β’ Grant camera + microphone permissions
β’ Live camera preview
β
βΌ
Interview Session (/interview)
β’ Questions displayed one at a time
β’ Per-question countdown timer
β’ MediaRecorder captures video/audio as WebM
β’ Navigate through 5 questions
β
βΌ
Results Dashboard (/results)
β’ Overall score + grade
β’ Speech / Content / Body Language breakdown
β’ Question-by-question analysis
β’ Strengths + improvement areas
- Client:
src/integrations/supabase/client.ts - Initialized with
VITE_SUPABASE_URLandVITE_SUPABASE_ANON_KEY - Planned features: user authentication, interview history persistence
- Used in
src/pages/Interview.tsx - Records
video/webm; codecs=vp9format - Stores
RecordedResponseblobs in memory, passed to Results via router state
- AI voice for reading interview questions aloud
- Not yet implemented
- Landing page with feature overview
- Interview type selection + camera/mic setup
- Live interview session with per-question video recording
- Post-interview analysis dashboard (mock data)
- Real AI analysis of recorded responses
- ElevenLabs voice integration for question narration
- User authentication with Supabase Auth
- Interview history and progress tracking
- Shareable results reports
- Custom question sets / upload your own questions
- Mobile-responsive recording experience
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch:
git checkout -b feature/your-feature-name - Commit your changes:
git commit -m 'feat: add your feature' - Push to the branch:
git push origin feature/your-feature-name - Open a Pull Request
Please ensure your code passes linting (npm run lint) and tests (npm test) before submitting.
This project is licensed under the MIT License. See the LICENSE file for details.
Built with β€οΈ using React, Vite, and Supabase