Skip to content

Hariabc/QuickInterview

Repository files navigation

πŸš€ QuickInterview.ai

QuickInterview.ai Logo

A comprehensive AI-powered interview platform with resume parsing, real-time scoring, and cross-tab synchronization

React Vite TailwindCSS

Live Demo β€’ Documentation β€’ API Reference


πŸ“‹ Table of Contents


✨ Features

🎯 Core Functionality

  • πŸ€– 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

πŸ‘€ Interviewee Experience

  • πŸ“€ 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

πŸ“Š Interviewer Dashboard

  • πŸ‘₯ 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

🎨 User Interface

  • πŸ“± 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

πŸ› οΈ Tech Stack

Frontend

  • 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

Backend Services

  • Groq API - AI-powered question generation and scoring
  • IndexedDB - Client-side database with idb wrapper
  • BroadcastChannel API - Cross-tab communication

File Processing

  • pdfjs-dist - PDF parsing and text extraction
  • mammoth - DOCX file processing

Development Tools

  • ESLint - Code linting and formatting
  • PostCSS - CSS processing
  • Autoprefixer - CSS vendor prefixing

πŸš€ Quick Start

Prerequisites

  • Node.js 16.0 or higher
  • npm 7.0 or higher
  • Groq API Key (optional, fallback questions available)

Installation

  1. Clone the repository

    git clone https://github.com/yourusername/QuickInterview.git
    cd QuickInterview
  2. Install dependencies

    npm install
  3. 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
  4. Start development server

    npm run dev
  5. Open your browser Navigate to http://localhost:5173

Production Build

npm run build
npm run preview

πŸ“– Documentation

Project Structure

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

API Reference

AI Service (aiService.js)

// 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 });

Database Service (database.js)

// 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);

Resume Parser (resumeParser.js)

// 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');

πŸ—οΈ Architecture

Application Flow

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]
Loading

Data Flow

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]
Loading

Component Hierarchy

App
β”œβ”€β”€ ErrorBoundary
β”œβ”€β”€ Header (Navigation)
β”œβ”€β”€ Routes
β”‚   β”œβ”€β”€ IntervieweePage
β”‚   β”‚   β”œβ”€β”€ ResumeUpload
β”‚   β”‚   β”œβ”€β”€ InterviewChat
β”‚   β”‚   └── InterviewSummary
β”‚   └── InterviewerPage
β”‚       β”œβ”€β”€ CandidateList
β”‚       └── CandidateDetails
└── WelcomeBackModal

πŸ”§ Configuration

Environment Variables

Create a .env file in the root directory:

# Required: Groq API Configuration
VITE_GROQ_API_KEY=your_groq_api_key_here

Customization

Styling

  • Modify tailwind.config.js for custom colors and themes
  • Update src/index.css for global styles
  • Customize component styles in individual files

Interview Settings

  • Adjust question counts and time limits in aiService.js
  • Modify difficulty distribution in question generation
  • Customize scoring criteria in fallback scoring

Database Schema

  • Update src/services/database.js for schema changes
  • Add new indexes for performance optimization
  • Modify data validation rules

πŸ“± Usage

For Interviewees

  1. Start Interview

    • Navigate to the Interviewee tab
    • Upload your resume (PDF or DOCX)
    • Complete any missing information if prompted
  2. 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
  3. View Results

    • Review your overall score and rating
    • Read detailed feedback and suggestions
    • Download or print your results

For Interviewers

  1. Access Dashboard

    • Navigate to the Interviewer Dashboard tab
    • View real-time candidate statistics
  2. Manage Candidates

    • Search candidates by name, email, or phone
    • Sort by score, name, or date
    • Click on candidates to view detailed profiles
  3. Review Interviews

    • View complete chat history
    • Analyze AI-generated insights
    • Export candidate data for further analysis

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages