A comprehensive AI-powered interview platform with resume parsing, real-time scoring, and cross-tab synchronization
Live Demo β’ Documentation β’ API Reference
- β¨ Features
- π οΈ Tech Stack
- π Quick Start
- π Documentation
- ποΈ Architecture
- π§ Configuration
- π± Usage
- π€ AI-Powered Interviews: Groq API integration with Llama 3.1 8B model for intelligent question generation and scoring
- π Resume Parsing: Automatic extraction of name, email, phone, and technical skills from PDF/DOCX files
- β±οΈ Timed Interview System: 6 questions with progressive difficulty (Easy: 20s, Medium: 60s, Hard: 120s)
- π Real-time Cross-Tab Sync: BroadcastChannel API for live updates between multiple browser tabs
- πΎ Data Persistence: IndexedDB storage for candidates, chat history, and interview sessions
- π Session Recovery: Automatic recovery for interrupted interviews
- π€ Resume Upload: Drag-and-drop interface with validation and parsing
- π Missing Field Collection: Smart prompts for incomplete information
- β° Real-time Timer: Visual countdown with auto-submit functionality
- π¬ Interactive Chat: Question-by-question progression with immediate feedback
- π Detailed Results: Comprehensive scoring with strengths and improvement areas
- π Session Continuity: Resume interrupted interviews seamlessly
- π₯ Candidate Management: Search, sort, and filter candidate database
- π Performance Analytics: Real-time statistics and performance metrics
- π¬ Chat History: Complete interview conversation logs
- π€ AI Insights: Automated summaries and candidate analysis
- π Live Updates: Real-time synchronization across multiple tabs
- π Detailed Reports: Question-by-question breakdown with scores
- π± Responsive Design: Optimized for desktop, tablet, and mobile devices
- π¨ Modern UI: Clean, professional interface with TailwindCSS
- βΏ Accessibility: ARIA labels, keyboard navigation, and screen reader support
- π Dark Mode: Optional dark theme support
- β‘ Performance: Optimized loading with skeleton components and lazy loading
- React 18 - Modern React with hooks and concurrent features
- Vite - Fast build tool and development server
- TailwindCSS - Utility-first CSS framework
- React Router DOM - Client-side routing
- Groq API - AI-powered question generation and scoring
- IndexedDB - Client-side database with idb wrapper
- BroadcastChannel API - Cross-tab communication
- pdfjs-dist - PDF parsing and text extraction
- mammoth - DOCX file processing
- ESLint - Code linting and formatting
- PostCSS - CSS processing
- Autoprefixer - CSS vendor prefixing
- Node.js 16.0 or higher
- npm 7.0 or higher
- Groq API Key (optional, fallback questions available)
-
Clone the repository
git clone https://github.com/yourusername/QuickInterview.git cd QuickInterview
-
Install dependencies
npm install
-
Set up environment variables
cp .env.example .env
Edit
.env
and add your Groq API key:VITE_GROQ_API_KEY=your_groq_api_key_here
-
Start development server
npm run dev
-
Open your browser Navigate to
http://localhost:5173
npm run build
npm run preview
src/
βββ components/ # Reusable UI components
β βββ Button.jsx # Customizable button component
β βββ Input.jsx # Form input with validation
β βββ Modal.jsx # Modal dialog component
β βββ ErrorBoundary.jsx # Error handling component
β βββ Skeleton.jsx # Loading skeleton components
β βββ WelcomeBackModal.jsx # Session recovery modal
βββ features/
β βββ interview/ # Interviewee functionality
β β βββ IntervieweePage.jsx # Main interview page
β β βββ ResumeUpload.jsx # Resume upload component
β β βββ InterviewChat.jsx # Chat interface
β β βββ ChatMessage.jsx # Individual message component
β β βββ TimerDisplay.jsx # Timer visualization
β β βββ ProgressBar.jsx # Progress indicator
β β βββ InterviewSummary.jsx # Results summary
β βββ dashboard/ # Interviewer functionality
β βββ InterviewerPage.jsx # Main dashboard page
β βββ CandidateList.jsx # Candidate table
β βββ CandidateDetails.jsx # Individual candidate view
βββ services/ # External services and APIs
β βββ database.js # IndexedDB operations
β βββ broadcastChannel.js # Cross-tab communication
β βββ aiService.js # AI integration and scoring
βββ utils/ # Utility functions
β βββ resumeParser.js # Resume parsing logic
β βββ timer.js # Timer utilities
β βββ helpers.js # General helper functions
βββ App.jsx # Main application component
βββ main.jsx # Application entry point
// Generate interview questions
const questions = await aiService.generateInterviewQuestions(resumeText);
// Score an answer
const score = await aiService.scoreAnswer(question, answer);
// Generate final summary
const summary = aiService.generateFinalSummary({ candidate, questions, scores });
// Candidate operations
await database.addCandidate(candidateData);
const candidate = await database.getCandidate(id);
const allCandidates = await database.getAllCandidates();
// Chat message operations
await database.addChatMessage(messageData);
const messages = await database.getChatMessages(candidateId);
// Session operations
await database.addInterviewSession(sessionData);
const session = await database.getInterviewSession(candidateId);
// Parse resume file
const info = await resumeParser.parseResume(file);
// Get missing fields
const missing = resumeParser.getMissingFields(parsedInfo);
// Validate field
const isValid = resumeParser.validateField('email', 'user@example.com');
graph TD
A[User Uploads Resume] --> B[Resume Parser Extracts Info]
B --> C[AI Generates Questions]
C --> D[Interview Starts]
D --> E[User Answers Questions]
E --> F[AI Scores Each Answer]
F --> G[Real-time Feedback]
G --> H{More Questions?}
H -->|Yes| E
H -->|No| I[Generate Final Summary]
I --> J[Save to Database]
J --> K[Display Results]
graph LR
A[Frontend Components] --> B[Services Layer]
B --> C[AI Service]
B --> D[Database Service]
B --> E[BroadcastChannel Service]
C --> F[Groq API]
D --> G[IndexedDB]
E --> H[Cross-tab Sync]
App
βββ ErrorBoundary
βββ Header (Navigation)
βββ Routes
β βββ IntervieweePage
β β βββ ResumeUpload
β β βββ InterviewChat
β β βββ InterviewSummary
β βββ InterviewerPage
β βββ CandidateList
β βββ CandidateDetails
βββ WelcomeBackModal
Create a .env
file in the root directory:
# Required: Groq API Configuration
VITE_GROQ_API_KEY=your_groq_api_key_here
- Modify
tailwind.config.js
for custom colors and themes - Update
src/index.css
for global styles - Customize component styles in individual files
- Adjust question counts and time limits in
aiService.js
- Modify difficulty distribution in question generation
- Customize scoring criteria in fallback scoring
- Update
src/services/database.js
for schema changes - Add new indexes for performance optimization
- Modify data validation rules
-
Start Interview
- Navigate to the Interviewee tab
- Upload your resume (PDF or DOCX)
- Complete any missing information if prompted
-
Answer Questions
- Read each question carefully
- Type your answer in the text area
- Submit before time expires (auto-submit available)
- Review AI feedback after each question
-
View Results
- Review your overall score and rating
- Read detailed feedback and suggestions
- Download or print your results
-
Access Dashboard
- Navigate to the Interviewer Dashboard tab
- View real-time candidate statistics
-
Manage Candidates
- Search candidates by name, email, or phone
- Sort by score, name, or date
- Click on candidates to view detailed profiles
-
Review Interviews
- View complete chat history
- Analyze AI-generated insights
- Export candidate data for further analysis