An intelligent interview platform that automates the technical interview process using AI-powered question generation and answer evaluation. The application provides two distinct interfaces: one for candidates to take interviews and another for interviewers to review candidate performance.
- Resume Upload & Parsing: Automatic extraction of contact information from PDF/DOCX resumes
- AI-Generated Questions: Role-specific interview questions with varying difficulty levels
- Timed Responses: Each question has appropriate time limits based on difficulty
- Real-time Feedback: Instant evaluation and scoring for each answer
- Progress Tracking: Interview state persists across browser refreshes
- Comprehensive Results: Final score with detailed performance summary
- Candidate Dashboard: View all interviewed candidates in one place
- Detailed Analytics: Review individual answers with scores and AI feedback
- Performance Metrics: Weighted scoring system based on question difficulty
- Interview Summaries: AI-generated professional summaries for each candidate
- Export Capabilities: Download candidate data and interview results
- Smart Question Generation: Creates role-specific questions using LLM
- Answer Evaluation: AI-powered scoring with constructive feedback
- Professional Summaries: Automated comprehensive interview assessments
- Difficulty Balancing: 2 easy, 2 medium, 2 hard questions per interview
- Framework: React 18 with TypeScript
- Build Tool: Vite with SWC for fast compilation
- UI Components: Shadcn/UI (built on Radix UI primitives)
- Styling: Tailwind CSS with custom design system
- State Management: Redux Toolkit with Redux Persist
- Routing: React Router DOM v6
- HTTP Client: Axios with singleton API service
- Data Fetching: TanStack Query (React Query)
- Form Handling: React Hook Form with Zod validation
- Animations: Framer Motion
- Framework: FastAPI (Python 3.13)
- Document Processing:
- pdfplumber for PDF parsing
- python-docx for DOCX files
- AI Integration: OpenRouter API for LLM capabilities
- Model: OpenAI GPT-OSS-20B (free tier)
- CORS: Configured for local development
- Node.js: v18 or higher
- Python: 3.11 or higher
- npm or bun: Package manager
- OpenRouter API Key: For AI features (free tier available)
git clone https://github.com/AnsariUsaid/ai-interview-application.git
cd ai-interview-application# Navigate to backend directory
cd backend
# Create virtual environment
python -m venv myvenv
# Activate virtual environment
# On macOS/Linux:
source myvenv/bin/activate
# On Windows:
myvenv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Create .env file
echo "API_KEY=your_openrouter_api_key_here" > .envGet your API Key:
- Visit OpenRouter.ai
- Sign up for a free account
- Generate an API key
- Add it to your
.envfile
# Navigate to frontend directory
cd ../frontend
# Install dependencies
npm install
# or
bun install
# Start development server
npm run dev
# or
bun devcd backend
source myvenv/bin/activate # On macOS/Linux
python main.pyBackend runs on: http://localhost:8000
cd frontend
npm run dev
# or
bun devFrontend runs on: http://localhost:8080
Open your browser and navigate to: http://localhost:8080
-
Upload Resume
- Click "Start Interview" on the home page
- Upload your resume (PDF or DOCX format)
- System automatically extracts your contact information
-
Begin Interview
- Review extracted information
- Click "Start Interview" to begin
- Questions are presented one at a time
-
Answer Questions
- Each question has a specific time limit
- Type your answer in the provided text area
- Click "Submit Answer" to proceed
-
View Results
- Receive immediate feedback on each answer
- See your score and AI-generated feedback
- Review final summary at the end
-
Access Interviewer Dashboard
- Click "Interviewer" from the main menu
- View list of all candidates who completed interviews
-
Review Individual Candidates
- Click on any candidate card
- View detailed answers with scores
- Read AI-generated feedback for each response
- Check overall performance metrics
-
Export Data (if needed)
- Use browser's print function for reports
- Copy candidate information for records
swipe-project/
βββ backend/
β βββ main.py # FastAPI application with all endpoints
β βββ requirements.txt # Python dependencies
β βββ myvenv/ # Virtual environment (not in git)
β βββ .env # Environment variables (not in git)
β
βββ frontend/
β βββ src/
β β βββ components/ # React components
β β β βββ pages/ # Main page components
β β β βββ interview/ # Interview-specific components
β β β βββ modals/ # Modal dialogs
β β β βββ ui/ # Shadcn UI components
β β βββ store/ # Redux store and slices
β β βββ services/ # API service layer
β β βββ hooks/ # Custom React hooks
β β βββ lib/ # Utility functions
β βββ public/ # Static assets
β βββ package.json # Node dependencies
β βββ vite.config.ts # Vite configuration
β
βββ WARP.md # Development guidelines
βββ README.md # This file
npm run dev # Start development server (port 8080)
npm run build # Build for production
npm run build:dev # Build with development mode
npm run lint # Run ESLint
npm run preview # Preview production buildpython main.py # Start FastAPI server (port 8000)| Endpoint | Method | Description |
|---|---|---|
/health/ |
GET | Health check |
/parse-resume/ |
POST | Upload and parse resume |
/generate-questions |
POST | Generate interview questions |
/evaluate-answer |
POST | Evaluate candidate answer |
/final-summary |
POST | Generate interview summary |
API_KEY=your_openrouter_api_key
No environment variables required for basic setup. Uses http://localhost:8000 as default backend URL.
- Supports PDF and DOCX formats
- Extracts name, email, and phone number
- Uses regex patterns for contact information
- Provides raw text snippet for verification
- Role-specific question creation
- Difficulty levels: Easy (20s), Medium (60s), Hard (120s)
- Fallback to static question bank if AI unavailable
- Automatic retry mechanism for reliability
- 0-10 scoring scale
- Difficulty-weighted scoring system
- Constructive feedback for each answer
- Heuristic fallback when AI is unavailable
- Interview progress saved in browser
- Resume if browser is closed accidentally
- Welcome back modal for incomplete interviews
- Complete candidate data retention
Backend CORS is configured for localhost development:
allow_origins=["http://localhost:8080"]For production, update this in backend/main.py to include your production domain.
- Frontend: Port 8080 (configured in
vite.config.ts) - Backend: Port 8000 (default FastAPI port)
To change ports, update:
- Frontend:
vite.config.tsβserver.port - Backend:
main.pyβuvicorn.run()parameters
Current model: openai/gpt-oss-20b:free
To use a different model, update MODEL variable in backend/main.py:
MODEL = "your-preferred-model"See OpenRouter Models for available options.
Problem: ModuleNotFoundError when starting backend
# Solution: Ensure virtual environment is activated and dependencies installed
source myvenv/bin/activate
pip install -r requirements.txtProblem: AI features not working
# Solution: Check your API key in .env file
# Ensure API_KEY is set correctly
# Verify you have credits on OpenRouterProblem: CORS errors
# Solution: Ensure frontend is running on port 8080
# Or update CORS settings in backend/main.pyProblem: Cannot find module errors
# Solution: Reinstall dependencies
rm -rf node_modules package-lock.json
npm installProblem: Port already in use
# Solution: Kill process on port 8080 or change port
# macOS/Linux:
lsof -ti:8080 | xargs kill -9
# Or change port in vite.config.tsProblem: Build fails
# Solution: Clear cache and rebuild
npm run build -- --force-
Prepare for production:
- Update CORS origins in
main.py - Set production environment variables
- Use production-grade WSGI server (Gunicorn/Uvicorn)
- Update CORS origins in
-
Deploy options:
- Render.com
- Railway.app
- AWS Lambda
- Google Cloud Run
- Build production bundle:
npm run build-
Deploy options:
- Vercel (recommended for Vite projects)
- Netlify
- GitHub Pages
- AWS S3 + CloudFront
-
Update API URL:
- Create environment variable for production backend URL
- Update API service configuration
- Question Generation: ~2-3 seconds (with AI)
- Answer Evaluation: ~1-2 seconds per answer
- Resume Parsing: <1 second
- Frontend Build: ~5-10 seconds
- Bundle Size: ~500KB (gzipped)
- API keys stored in environment variables (not committed to git)
- CORS configured for specific origins
- File upload limited to PDF/DOCX only
- Input validation using Pydantic models
- No persistent data storage (stateless application)
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
This project is open source and available for educational purposes.
Ansari Usaid Anzer
- GitHub: @AnsariUsaid
- Repository: ai-interview-application
- Shadcn/UI for beautiful React components
- OpenRouter for AI model access
- FastAPI for excellent Python backend framework
- Vite for blazing fast development experience
- Radix UI for accessible component primitives
For issues, questions, or suggestions:
- Open an issue on GitHub
- Check existing issues for solutions
- Add authentication system
- Implement database for persistent storage
- Add video interview capability
- Support multiple languages
- Add interview scheduling
- Implement email notifications
- Add analytics dashboard
- Support custom question banks
Made with β€οΈ for better technical interviews