A full-stack web application that uses AI to automatically screen resumes, match candidates to jobs, and rank applicants based on their fit.
- Browse active job postings
- Submit resume (PDF) with application
- Automatic AI resume analysis
- Instant application confirmation
- Secure authentication system
- Create and manage job postings
- View AI-ranked applications by match score
- Detailed candidate analysis with:
- Match score (0-100%)
- AI-generated feedback
- Skill matching analysis
- Skill gap identification
- Update application statuses
- Frontend: React + Vite
- Backend: Python + FastAPI
- Database: MongoDB
- AI: OpenRouter API (Free tier)
- Styling: Tailwind CSS
- Python 3.8+
- Node.js 16+
- MongoDB (local or cloud)
- OpenRouter API key (free at https://openrouter.ai)
cd backend# Windows
python -m venv venv
venv\Scripts\activate
# Mac/Linux
python3 -m venv venv
source venv/bin/activatepip install -r requirements.txtCreate a .env file in the backend directory:
# MongoDB Configuration
MONGODB_URL=mongodb://localhost:27017
DATABASE_NAME=ai_resume_screening
# OpenRouter API (Get free key from https://openrouter.ai)
OPENROUTER_API_KEY=your_api_key_here
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
# JWT Secret (Change this!)
JWT_SECRET_KEY=your_super_secret_key_here_change_this
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=1440
# CORS
FRONTEND_URL=http://localhost:5173
# Server
BACKEND_PORT=8000# If using local MongoDB
mongod
# Or use MongoDB Atlas (cloud) and update MONGODB_URL in .envcd app
python main.py
# Or use uvicorn directly
uvicorn app.main:app --reload --port 8000Backend will run at: http://localhost:8000 API Docs at: http://localhost:8000/docs
cd frontendnpm installnpm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -pnpm run devFrontend will run at: http://localhost:5173
- Visit https://openrouter.ai
- Sign up for a free account
- Go to Keys section
- Create a new API key
- Copy and paste it into your
.envfile
Free tier includes:
- Meta-Llama-3.2-3B-Instruct (used in this project)
- No credit card required
- Generous free tier limits
-
Browse Jobs
- Open http://localhost:5173
- View all active job postings
- Click on any job to view details
-
Apply for a Job
- Click "Apply Now" on any job
- Fill in your name and email
- Upload your resume (PDF only, max 5MB)
- Submit application
- AI will automatically analyze your resume!
-
Register/Login
- Click "Recruiter Login" button
- Create an account or sign in
- You'll be redirected to the dashboard
-
Create a Job
- Click "Create New Job" button
- Fill in job details
- Add required skills
- Submit to make it live
-
Review Applications
- Click on any job in your dashboard
- View AI-ranked applications (highest match first)
- Click on an application to see:
- AI match score
- Detailed feedback
- Matching skills
- Skill gaps
- Update application status
-
Candidate Submits Resume
- PDF is uploaded
- Text is extracted using PyPDF2
-
AI Processing
- Skills are extracted from resume
- Semantic similarity calculated (TF-IDF)
- Skill matching performed
- Match score computed (60% semantic + 40% skills)
-
AI Feedback Generation
- OpenRouter API analyzes fit
- Generates personalized feedback
- Identifies strengths and gaps
-
Recruiter Dashboard
- Applications automatically ranked
- Highest scoring candidates appear first
- Real-time updates as new applications arrive
ai-resume-screening/
β
βββ backend/
β βββ app/
β β βββ models/ # Data models
β β βββ routes/ # API endpoints
β β βββ services/ # Business logic
β β βββ config.py # Configuration
β β βββ database.py # MongoDB connection
β β βββ main.py # FastAPI app
β βββ requirements.txt
β βββ .env
β
βββ frontend/
β βββ src/
β β βββ components/
β β β βββ candidate/ # Candidate UI
β β β βββ recruiter/ # Recruiter UI
β β βββ services/ # API calls
β β βββ App.jsx # Main component
β β βββ main.jsx # Entry point
β βββ package.json
β βββ vite.config.js
β
βββ README.md
- Start both servers
- Browse jobs at http://localhost:5173
- Upload a sample resume PDF
- Check application confirmation
- Register as recruiter
- Create a test job with skills like "Python, React, MongoDB"
- Apply as candidate with matching resume
- Check recruiter dashboard for ranked applications
- View detailed AI analysis
# Check if MongoDB is running
mongosh
# If not, start it
mongod# Backend
# Change BACKEND_PORT in .env
# Frontend
# Change port in vite.config.js- Verify your OpenRouter API key is correct
- Check you have free tier credits remaining
- Ensure OPENROUTER_API_KEY is set in .env
- Ensure PDF is valid and under 5MB
- Check PyPDF2 is installed correctly
- Verify file permissions
- Semantic Similarity (60%): Compares overall resume content to job description
- Skill Matching (40%): Matches specific required skills
- Final Score: Weighted average of both metrics
- Extracts text from PDF
- Identifies 100+ technical skills
- Extracts email and phone (optional use)
- Real-time ranking updates
- Automatic sorting by match score
- No manual intervention required
GET /api/jobs/- Get all active jobsGET /api/jobs/{job_id}- Get job detailsPOST /api/applications/- Submit application
POST /api/recruiters/register- RegisterPOST /api/recruiters/login- LoginGET /api/recruiters/me- Get profilePOST /api/jobs/- Create jobGET /api/jobs/my-jobs- Get recruiter's jobsGET /api/applications/job/{job_id}- Get ranked applications
- JWT tokens expire after 24 hours
- Passwords are hashed with bcrypt
- CORS properly configured
- Input validation on all endpoints
- Email notifications
- Interview scheduling
- Advanced analytics dashboard
- Resume download functionality
- Batch application processing
- Video interview integration
This project is open source and available for educational purposes.
Feel free to fork, improve, and create pull requests!
For issues or questions, please create an issue in the repository.
Built with β€οΈ using React, FastAPI, MongoDB, and OpenRouter AI