An AI-powered serverless application that automatically extracts information from resumes and matches candidates with relevant job opportunities using AWS services.
RPM.mov
This system automates the resume screening process by:
- Extracting text from PDF resumes using AWS Textract (99% accuracy)
- Parsing skills, experience, and contact information
- Matching candidates with jobs based on skill overlap
- Providing a user-friendly dashboard for recruiters
Processing Time: 8-10 seconds end-to-end | Cost: ~$0.01 per resume
- 📄 Automated Text Extraction - AWS Textract extracts text with 99% confidence
- 🧠 Intelligent Skill Parsing - Identifies skills, experience, and contact info
- 🎯 Smart Job Matching - Calculates match scores with skill gap analysis
- 📊 Recruiter Dashboard - Clean UI for viewing candidates and matches
- ⚡ Real-time Processing - Event-driven architecture with auto-triggers
- 🔄 Fully Automated - No manual intervention required
- 📈 Scalable - Serverless architecture handles unlimited concurrent uploads
User Upload (PDF)
↓
API Gateway (/upload)
↓
Upload Handler Lambda → S3 (resumes/raw/)
↓ [S3 Event Trigger]
Textract Processor Lambda → S3 (resumes/processed/)
↓ [S3 Event Trigger]
Skill Matcher Lambda → DynamoDB (CandidateProfiles)
↓ [DynamoDB Stream Trigger]
Job Matcher Lambda → DynamoDB (Matches)
↓
Dashboard (API Gateway /candidates & /matches)
Frontend:
- HTML5, CSS3, JavaScript (Vanilla)
- Responsive design
Backend:
- AWS Lambda (Python 3.9)
- AWS API Gateway (REST API)
- AWS S3 (Object Storage)
- AWS DynamoDB (NoSQL Database)
- AWS Textract (AI Text Extraction)
DevOps:
- AWS IAM (Access Management)
- AWS CloudWatch (Logging & Monitoring)
- Git/GitHub (Version Control)
- AWS Account with appropriate permissions
- AWS CLI configured
- Python 3.9+
- Git
git clone https://github.com/Anshuman-git-code/Resume-Parser-Skill-Matcher.git
cd Resume-Parser-Skill-MatcherCreate S3 Bucket:
bash scripts/setup-s3.shDeploy Lambda Functions:
bash scripts/deploy-lambdas.shSetup API Gateway:
bash scripts/setup-api-gateway.shopen frontend/dashboard/index.htmlOr start a local server:
cd frontend/dashboard
python3 -m http.server 8000
# Open http://localhost:8000- Open the dashboard
- Click "Choose File" and select a PDF resume
- Wait 8-10 seconds for processing
- View extracted text in the popup modal
- Click the "Candidates" tab
- Browse all processed candidates
- Search by name or skills
- Click "View Matches" for any candidate
- Click the "Matches" tab
- Select a candidate from the dropdown
- See ranked job matches with scores
- Review matched and missing skills
Resume-Parser-Skill-Matcher/
├── backend/
│ ├── lambda-functions/
│ │ ├── upload-handler/ # Handles resume uploads
│ │ ├── textract-processor/ # Extracts text from PDFs
│ │ ├── skill-parser/ # Parses skills and experience
│ │ ├── job-matcher/ # Matches candidates with jobs
│ │ ├── get-candidates/ # API to fetch candidates
│ │ └── get-matches/ # API to fetch job matches
│ ├── tests/ # Test files
│ └── utils/ # Utility functions
├── frontend/
│ ├── dashboard/
│ │ ├── index.html # Main dashboard
│ │ ├── app.js # Business logic
│ │ ├── styles.css # Styling
│ │ └── check-status.html # Status checker
│ └── assets/ # Static assets
├── scripts/
│ ├── setup-s3.sh # S3 bucket setup
│ ├── deploy-lambdas.sh # Lambda deployment
│ ├── setup-api-gateway.sh # API Gateway setup
│ ├── trigger-job-matching.sh # Manual match trigger
│ ├── validate-setup.sh # Validate AWS setup
│ ├── test-upload.py # Test upload script
│ └── create-dateutil-layer.sh # Create Lambda layer
├── docs/
│ └── handoff-notes/ # Documentation
├── PROJECT_REPORT.md # Comprehensive project report
├── requirements.txt # Python dependencies
└── README.md # This file
Base URL: https://n8ujlpobn6.execute-api.ap-south-1.amazonaws.com/prod
POST /upload- Upload resumeGET /candidates- Fetch all candidatesGET /matches?candidate_id=xxx- Fetch job matches
Update these in frontend/dashboard/app.js:
const API_ENDPOINT = 'YOUR_API_GATEWAY_URL/prod/upload';
const CANDIDATES_API = 'YOUR_API_GATEWAY_URL/prod/candidates';
const MATCHES_API = 'YOUR_API_GATEWAY_URL/prod/matches';| Metric | Value |
|---|---|
| Text Extraction Time | 3-4 seconds |
| Skill Parsing Time | 1-2 seconds |
| Job Matching Time | 1-2 seconds |
| Total Processing Time | 8-10 seconds |
| Extraction Accuracy | 99% |
| Cost per Resume | ~$0.01 |
| Concurrent Uploads | Unlimited |
bash scripts/validate-setup.shpython3 scripts/test-upload.py path/to/resume.pdf- Upload a test resume through the dashboard
- Check S3 bucket for uploaded files
- Verify DynamoDB tables have data
- Check CloudWatch logs for any errors
The system comes with sample data:
- 9 candidates processed
- 10+ jobs in database
- 100+ matches generated
Sample candidate:
{
"resume_id": "818cee79-8493-4f9a-ae57-b9af695e82b2",
"name": "TANNU NAGAR",
"email": "[email protected]",
"skills": ["docker", "kubernetes", "python", "aws"],
"total_experience_years": 5.2
}- Only supports PDF files (no Word documents)
- Basic pattern matching for skill extraction
- Simple skill overlap matching algorithm
- No user authentication
- No duplicate resume detection
- Limited to predefined skill list
See PROJECT_REPORT.md for detailed limitations.
- AWS Comprehend integration for better NLP
- Support for Word documents and images
- User authentication with AWS Cognito
- Enhanced matching algorithm
- Recruiter dashboard with advanced features
- Candidate portal
- Email/SMS notifications
- Analytics and reporting
- Machine learning models
- Multi-language support
- Mobile application
- ATS integrations
See PROJECT_REPORT.md for complete roadmap.
- Time per resume: 5-10 minutes
- Cost per resume: $2.50-8.33
- Processing time: 10 seconds
- Cost per resume: ~$0.01
Savings: 99% cost reduction | $30,000-100,000 annually for 1000 resumes/month
- Anshuman Mohapatra - Team Lead, Backend Pipeline & APIs
- Shivam - Skill Parsing & Data Extraction
- Siddhant - Job Matching Algorithm
- Pavan - Frontend Dashboard UI
Mentor: Kabir
- PROJECT_REPORT.md - Comprehensive project documentation
- docs/handoff-notes/ - Technical handoff documentation
# Hard refresh browser
Cmd+Shift+R (Mac) or Ctrl+Shift+R (Windows)- Check internet connection
- Verify AWS credentials
- Check CloudWatch logs
- Ensure S3 bucket exists
- Refresh the page
- Check DynamoDB tables
- Verify API Gateway endpoints
- Check browser console for errors
This project is part of an academic assignment.
- AWS for providing cloud infrastructure
- AWS Textract for AI-powered text extraction
- Our mentor Kabir for guidance and support
For questions or support, please contact the team members through GitHub.
If you found this project helpful, please give it a ⭐️!
Built with ❤️ using AWS Serverless Architecture