A full-stack AI platform that automates resume screening for HR teams and provides personalized career guidance for candidates โ powered by NLP, BERT embeddings, TF-IDF analysis, and intelligent scoring algorithms.
Features โข Architecture โข Quick Start โข API Reference โข Contributing
- Features
- System Architecture
- Project Structure
- Quick Start / Local Setup
- Usage Guide
- Module Descriptions
- Scoring Algorithm
- API Reference
- Resume Parsing Pipeline
- Skill Extraction Engine
- Roadmap Image Integration
- Data Files Reference
- Frontend Pages & Components
- Environment Variables
- Troubleshooting
- Contributing
- Contributors
- Future Enhancements
- License
- Acknowledgments
| Feature | Description |
|---|---|
| Batch Resume Upload | Upload & analyze up to 200 resumes simultaneously (PDF/DOCX) |
| Intelligent Scoring | 5-category scoring: Skill Match, Experience, Projects, Keywords, Education |
| Advanced Filtering | Filter by skills, location, college, experience, match percentage + 15+ filter types |
| Candidate Ranking | Auto-ranked candidates with sortable table view |
| Job Management | Create/manage job listings with required skills |
| JWT Authentication | Secure HR login/signup with JWT tokens |
| Expandable Skills | View all extracted skills per candidate in the dashboard table |
| Quick Presets | One-click filter presets for common screening scenarios |
| Feature | Description |
|---|---|
| Resume Score Evaluation | Get a realistic ATS-style score with detailed breakdown |
| 5-Category Breakdown | Skill Match, Experience, Projects, Keywords, Education โ each scored individually |
| Circular Score Displays | SVG-animated score rings with color-coded results |
| Bonus Factor Detection | Projects, achievements, publications, leadership, internships, portfolio |
| Skill Gap Analysis | Priority-ranked missing skills: Critical, Important, Nice-to-Have |
| Area Strength Analysis | Visual category bars showing weak vs strong areas |
| Learning Roadmap | Personalized 4-phase roadmap: Foundation โ Core โ Practice โ Job-Ready |
| Visual Career Roadmaps | 80+ downloadable roadmap images for different career paths |
| Custom Job Description | Paste any JD โ auto-detects 50+ skill keywords |
| Extracted Profile | Shows parsed name, email, phone, experience, college, degree, location |
| Feature | Description |
|---|---|
| spaCy NER | Named entity recognition for person names and organizations |
| BERT Embeddings | Sentence-transformers (all-MiniLM-L6-v2) for semantic resume-job similarity |
| TF-IDF Matching | Keyword relevance scoring using scikit-learn TF-IDF vectorizer |
| Smart Skill Extraction | 180+ skills from knowledge base + 80+ canonical variation mappings |
| Section-Aware Parsing | Experience extraction respects resume section boundaries |
| College Detection | Two-pass extraction: prefers B.Tech/M.Tech institutions, skips 10th/12th schools |
| Indian Phone Support | Regex patterns for Indian (+91), US (+1), and generic phone formats |
| Portfolio Detection | Auto-detects GitHub, LinkedIn, and personal website links |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ USER BROWSER โ
โ โ
โ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โ
โ โ Landing โ โ Candidate โ โ HR Dashboardโ โ Auth Pages โ โ
โ โ Page โ โ Portal โ โ + Filters โ โ Login/Signupโ โ
โ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโ โโโโโโโโฌโโโโโโโโ โโโโโโโโฌโโโโโโโโ โ
โ โ โ โ โ โ
โโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโ
โ โ โ โ
โผ โผ โผ โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ REACT FRONTEND (Vite, Port 5173) โ
โ โ
โ โโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โ
โ โ App.jsx โ โ api.js โ โ Pages/ โ โComponents/โ โ Data/ โ โ
โ โ Router โ โ GET/POST โ โ 8 pages โ โ 6 shared โ โ job_roles โ โ
โ โโโโโโโโโโโโ โโโโโโโฌโโโโโโ โโโโโโโโโโโโ โโโโโโโโโโโโโ โโโโโโโโโโโโโ โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP (fetch)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ NODE.JS BACKEND (Express, Port 5000) โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ
โ โ HR Auth โ โ HR Resume โ โ HR Dashboard โ โ Candidate โ โ
โ โ Controller โ โ Controller โ โ Controller โ โ Controller โ โ
โ โ JWT signup/ โ โ multer upload โ โ mock data gen โ โ single โ โ
โ โ login โ โ up to 200 โ โ filtering โ โ analysis โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโฌโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโฌโโโโโโ โ
โ โ โ โ
โ โโโโโโโโโดโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ mlService.js โ โ mockMlService.js โ โ
โ โ FormData proxy โ โ Synthetic data โ โ
โ โโโโโโโโโโฌโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโ โ
โ โ โ
โโโโโโโโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HTTP (axios + FormData)
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ PYTHON ML SERVICE (FastAPI, Port 8000) โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ
โ โ routes.py โ โ resume_ โ โ skill_ โ โ scorer.py โ โ
โ โ /analyze- โ โ parser.py โ โ extractor.py โ โ BERT + โ โ
โ โ resumes โ โ PDF/DOCX โ โ 180+ skills โ โ TF-IDF โ โ
โ โ endpoint โ โ extraction โ โ extraction โ โ scoring โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ schemas.py โ โ main.py โ โ data/ โ โ
โ โ Pydantic โ โ FastAPI app โ โ skills.json โ โ
โ โ models โ โ entry point โ โ 180+ skills โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ
โ NLP Models: spaCy (en_core_web_sm) + sentence-transformers โ
โ (all-MiniLM-L6-v2) + scikit-learn TF-IDF โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ CANDIDATE FLOW โ
โ โ
โ Upload Resume (PDF/DOCX) โ
โ โ โ
โ โผ โ
โ Select Job Role / Paste JD โ
โ โ โ
โ โผ โ
โ POST /candidate/analyze โ
โ โ โ
โ โผ โ
โ Backend โ ML Service โ
โ โ โ
โ โผ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ 1. Parse PDF/DOCX โ โ
โ โ 2. Extract text โ โ
โ โ 3. Extract: name, email โ โ
โ โ phone, experience, โ โ
โ โ college, skills โ โ
โ โ 4. Match skills vs JD โ โ
โ โ 5. BERT similarity โ โ
โ โ 6. TF-IDF keywords โ โ
โ โ 7. Quality bonus check โ โ
โ โ 8. Compute final score โ โ
โ โโโโโโโโโโโโโโฌโโโโโโโโโโโโโ โ
โ โ โ
โ โผ โ
โ Return: score, matchedSkills, โ
โ missingSkills, categoryScores, โ
โ bonusFactors, extracted profile โ
โ โ โ
โ โผ โ
โ Navigate to Score / SkillGap / โ
โ Roadmap pages โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ HR FLOW โ
โ โ
โ Login (JWT) โ Select/Create Job โ
โ โ โ
โ โผ โ
โ Upload up to 200 Resumes โ
โ โ โ
โ โผ โ
โ POST /hr/resumes โ
โ โ โ
โ โผ โ
โ Same ML pipeline for each resume โ
โ โ โ
โ โผ โ
โ Apply filters (skill, location, โ
โ college, experience, match%) โ
โ โ โ
โ โผ โ
โ Return ranked candidate list โ
โ with scores and details โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Technology | Version | Purpose |
|---|---|---|
| React | 18.2 | UI component library |
| React Router DOM | 6.14 | Client-side routing |
| Vite | 5.x | Build tool & dev server |
| Tailwind CSS | 3.4 | Utility-first CSS framework |
| PostCSS | 8.x | CSS processing |
| Autoprefixer | 10.x | Cross-browser CSS prefixes |
| Technology | Version | Purpose |
|---|---|---|
| Node.js | 16+ | Server runtime |
| Express | 4.18 | HTTP framework |
| Multer | 1.x | File upload middleware |
| Axios | 1.x | HTTP client for ML service |
| JSON Web Token | 9.x | Authentication |
| CORS | 2.x | Cross-origin resource sharing |
| Form-Data | 4.x | Multipart form data builder |
| Technology | Version | Purpose |
|---|---|---|
| Python | 3.10+ | Language runtime |
| FastAPI | 0.95+ | Web framework |
| Uvicorn | 0.22+ | ASGI server |
| spaCy | 3.5+ | NLP โ NER, tokenization |
| sentence-transformers | 2.2+ | BERT embeddings (all-MiniLM-L6-v2) |
| scikit-learn | 1.2+ | TF-IDF vectorizer, cosine similarity |
| pdfplumber | 0.7+ | PDF text extraction (layout-aware) |
| python-docx | 0.8+ | DOCX text extraction |
| PyPDF2 | 3.0+ | Fallback PDF reader |
| python-multipart | 0.0+ | Multipart file upload support |
| NumPy | 1.x | Numerical operations |
| PyTorch | 1.12+ | Deep learning backend for BERT |
resume-screening-project/
โ
โโโ ๐ README.md โ You are here
โโโ ๐ package.json โ Frontend dependencies & scripts
โโโ ๐ vite.config.js โ Vite configuration
โโโ ๐ tailwind.config.cjs โ Tailwind CSS configuration
โโโ ๐ postcss.config.cjs โ PostCSS configuration
โโโ ๐ index.html โ HTML entry point
โ
โโโ ๐ src/ โ REACT FRONTEND SOURCE
โ โโโ ๐ main.jsx โ App entry (React 18 createRoot)
โ โโโ ๐ App.jsx โ Router + layout + navigation
โ โโโ ๐ api.js โ API helper (GET/POST to localhost:5000)
โ โโโ ๐ index.css โ Global styles (Tailwind layers)
โ โ
โ โโโ ๐ pages/
โ โ โโโ ๐ landing.jsx โ Landing page (hero + role selection)
โ โ โ
โ โ โโโ ๐ auth/
โ โ โ โโโ ๐ Login.jsx โ HR login form
โ โ โ โโโ ๐ Signup.jsx โ HR signup form
โ โ โ โโโ ๐ RoleSelect.jsx โ Role selection page
โ โ โ
โ โ โโโ ๐ candidate/
โ โ โ โโโ ๐ Dashboard.jsx โ Job selection + resume upload (314 lines)
โ โ โ โโโ ๐ ResumeScore.jsx โ Score report + category breakdown (272 lines)
โ โ โ โโโ ๐ SkillGap.jsx โ Gap analysis + priority ranking (237 lines)
โ โ โ โโโ ๐ Roadmap.jsx โ Learning plan + roadmap images (342 lines)
โ โ โ
โ โ โโโ ๐ hr/
โ โ โโโ ๐ Dashboard.jsx โ HR dashboard + filters + table (732 lines)
โ โ
โ โโโ ๐ components/
โ โ โโโ ๐ CandidateCard.jsx โ Candidate summary card (HR view)
โ โ โโโ ๐ FilterPanel.jsx โ 15+ filter options for HR
โ โ โโโ ๐ ProgressBar.jsx โ Animated progress bar
โ โ โโโ ๐ ResumeUpload.jsx โ Drag & drop file uploader
โ โ โโโ ๐ RoadmapTimeline.jsx โ Vertical timeline component
โ โ โโโ ๐ ScoreBadge.jsx โ Gradient score badge
โ โ โโโ ๐ SkillBadge.jsx โ Skill chip component
โ โ
โ โโโ ๐ data/
โ โโโ ๐ job_roles.json โ Job roles + required skills + roadmap steps (731 lines)
โ
โโโ ๐ public/
โ โโโ ๐ roadmaps/ โ 80+ career roadmap PNG images
โ โโโ ๐ท backend.png
โ โโโ ๐ท frontend.png
โ โโโ ๐ท full-stack.png
โ โโโ ๐ท react.png
โ โโโ ๐ท python.png
โ โโโ ๐ท machine-learning.png
โ โโโ ๐ท devops.png
โ โโโ ๐ท ... (80+ more)
โ
โโโ ๐ backend/ โ NODE.JS BACKEND
โ โโโ ๐ package.json โ Backend dependencies
โ โโโ ๐ server.js โ HTTP server (port 5000)
โ โโโ ๐ app.js โ Express app + route mounting
โ โ
โ โโโ ๐ controllers/
โ โ โโโ ๐ hrAuthController.js โ Signup/login with JWT
โ โ โโโ ๐ hrJobController.js โ Job CRUD + auto-generate up to 50
โ โ โโโ ๐ hrResumeController.js โ Batch resume upload + ML analysis
โ โ โโโ ๐ hrDashboardController.js โ Mock dashboard data + filtering
โ โ โโโ ๐ hrDebugController.js โ ML service health check
โ โ โโโ ๐ candidateController.js โ Single resume analysis for candidates
โ โ
โ โโโ ๐ routes/
โ โ โโโ ๐ hrAuthRoutes.js โ POST /signup, /login
โ โ โโโ ๐ hrJobRoutes.js โ POST /, GET /, GET /:id
โ โ โโโ ๐ hrResumeRoutes.js โ POST / (multer, 200 files max)
โ โ โโโ ๐ hrDashboardRoutes.js โ GET /:jobId
โ โ โโโ ๐ hrDebugRoutes.js โ GET /check-ml
โ โ โโโ ๐ candidateRoutes.js โ POST /analyze (multer, 1 file)
โ โ
โ โโโ ๐ services/
โ โ โโโ ๐ mlService.js โ ML service HTTP client (FormData proxy)
โ โ โโโ ๐ mockMlService.js โ Synthetic candidate data generator
โ โ
โ โโโ ๐ data/
โ โ โโโ ๐ hr_users.json โ Stored HR accounts
โ โ โโโ ๐ jobs.json โ Created job listings
โ โ โโโ ๐ dummyColleges.json โ College names for mock data
โ โ โโโ ๐ dummyLocations.json โ Location names for mock data
โ โ
โ โโโ ๐ uploads/ โ Uploaded resume files (gitignored)
โ
โโโ ๐ ml-service/ โ PYTHON ML SERVICE
โ โโโ ๐ requirements.txt โ Python dependencies
โ โ
โ โโโ ๐ app/
โ โ โโโ ๐ main.py โ FastAPI app entry point
โ โ โโโ ๐ routes.py โ Main endpoint + all extraction logic (1304 lines)
โ โ โโโ ๐ schemas.py โ Pydantic response models
โ โ โโโ ๐ scorer.py โ BERT + TF-IDF scoring engine
โ โ โโโ ๐ skill_extractor.py โ Skill extraction with 80+ variations
โ โ โโโ ๐ resume_parser.py โ PDF/DOCX text extraction
โ โ
โ โโโ ๐ data/
โ โโโ ๐ skills.json โ 180+ skill knowledge base
โ
โโโ ๐ docs/ โ DOCUMENTATION
โโโ ๐ README.md โ Academic project documentation (432 lines)
โโโ ๐ system_architecture.html โ System architecture document
โโโ ๐ system_architecture_ppt.html โ Architecture presentation
โโโ ๐ data_flow_diagrams.html โ Data flow diagrams
Make sure you have the following installed on your system:
| Tool | Version | Check Command | Download |
|---|---|---|---|
| Node.js | 16+ | node --version |
nodejs.org |
| npm | 8+ | npm --version |
Comes with Node.js |
| Python | 3.10+ | python --version |
python.org |
| pip | 22+ | pip --version |
Comes with Python |
| Git | 2.x | git --version |
git-scm.com |
# Clone the project
git clone https://github.com/your-username/resume-screening-project.git
# Navigate to the project directory
cd resume-screening-projectThe ML service is the AI brain of the platform. Set it up first since other services depend on it.
# Navigate to ML service directory
cd ml-service
# Create a Python virtual environment
python -m venv .venv
# Activate the virtual environment
# On Windows (PowerShell):
.\.venv\Scripts\Activate.ps1
# On Windows (CMD):
.\.venv\Scripts\activate.bat
# On macOS/Linux:
source .venv/bin/activate
# Install Python dependencies
pip install -r requirements.txt
# Download the spaCy English model
python -m spacy download en_core_web_sm
# Start the ML service
python -m uvicorn app.main:app --host 0.0.0.0 --port 8000
# You should see:
# INFO: Uvicorn running on http://0.0.0.0:8000
# INFO: Started reloader processโฑ๏ธ First-time startup note: The first run will download the
all-MiniLM-L6-v2sentence-transformer model (~80 MB). This only happens once and may take 1-2 minutes depending on your internet speed.
๐ก Verify: Open
http://localhost:8000/docsto see the FastAPI Swagger UI.
Open a new terminal (keep ML service running):
# Navigate to backend directory
cd backend
# Install Node.js dependencies
npm install
# Start the backend server
node server.js
# You should see:
# Server running on port 5000๐ก Verify: Open
http://localhost:5000โ you should see{"message":"Resume Screening Backend (HR)"}
Open another new terminal (keep both ML service and backend running):
# Navigate to project root (not backend!)
cd resume-screening-project
# Install frontend dependencies
npm install
# Start the Vite dev server
npm run dev
# You should see:
# VITE v5.x ready in XXX ms
# โ Local: http://localhost:5173/๐ก Open: Navigate to
http://localhost:5173in your browser.
You need 3 terminals running simultaneously:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ
โ Terminal 1 (ML Service): โ
โ cd ml-service โ
โ .\.venv\Scripts\Activate.ps1 โ
โ python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 โ
โ โ
Port 8000 โ
โ โ
โ Terminal 2 (Backend): โ
โ cd backend โ
โ node server.js โ
โ โ
Port 5000 โ
โ โ
โ Terminal 3 (Frontend): โ
โ npm run dev โ
โ โ
Port 5173 โ
โ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
-
http://localhost:8000/docsโ FastAPI Swagger docs load -
http://localhost:5000โ Backend responds with JSON -
http://localhost:5000/hr/debug/check-mlโ ML connectivity check passes -
http://localhost:5173โ React app loads with landing page
- Open the app โ Click "Login as Candidate" on the landing page
- Select a target job role from the dropdown (e.g., "Frontend Developer") or click "Paste Job Description" to paste a custom JD
- Upload your resume (PDF or DOCX, max 10 MB)
- Click "Analyze Resume" โ wait for the AI analysis
You'll be navigated to the Resume Score page:
| Page | What You See |
|---|---|
| Resume Score | Overall score (0-100), job match %, 5-category breakdown bars, bonus factors, matched/missing skills, extracted profile |
| Skill Gap | Coverage %, priority-ranked missing skills (Critical/Important/Nice-to-Have), weak areas with inline progress bars |
| Roadmap | Personalized 4-phase learning plan (Foundation โ Core โ Practice โ Job-Ready) + full career roadmap image |
- Sign up โ Create an HR account with company name, email, password
- Login โ Authenticate with JWT
- Create a job or select an existing role
- Upload resumes (batch upload up to 200 files)
- View ranked candidates โ Sort, filter, and compare
- Use filters โ Filter by skills, location, experience, match percentage, and more
The ML service is the core intelligence layer responsible for all resume analysis.
The largest file in the project. Contains:
| Function / Section | Lines | Purpose |
|---|---|---|
| Regex Patterns | 1-50 | Compiled patterns for email, phone (IN/US/generic), URLs |
extract_name_from_text() |
~60-120 | spaCy NER โ PERSON entities, title-case heuristics, fallback extraction |
extract_email() |
~120-140 | Regex extraction of email addresses |
extract_phone() |
~140-175 | Multi-format phone extraction (Indian +91, US +1, generic) |
extract_portfolio_links() |
~175-220 | GitHub, LinkedIn, personal website detection |
count_internships() |
~220-260 | Keyword counting for intern/internship mentions |
extract_experience_years() |
~260-380 | Section-aware extraction: "X years of experience", date ranges, year counting |
extract_location() |
~380-440 | Strict whitelist matching against Indian cities/states |
extract_branch() |
~440-480 | Branch/specialization from degree (CSE, ECE, IT, etc.) |
extract_degree() |
~480-535 | Degree detection (B.Tech, M.Tech, BCA, MCA, BE, ME, etc.) |
extract_college_smart() |
~536-670 | Two-pass college extraction โ skips 10th/12th schools, prefers university-level B.Tech/M.Tech institutions |
| Quality signal detection | ~670-800 | Projects, achievements, publications, leadership, technical depth, top institutes, portfolio |
| Scoring logic | ~800-990 | Match percentage, overall score, category scores, labels |
POST /analyze-resumes |
~998-1304 | Main endpoint: file handling, orchestration, response building |
# Lazy-loaded sentence-transformer model
model = SentenceTransformer('all-MiniLM-L6-v2')
# BERT semantic similarity between resume text and job description
semantic_similarity(resume_text, job_description) โ float [0, 1]
# TF-IDF keyword overlap
keyword_similarity(resume_text, job_description) โ float [0, 1]
# Combined score
compute_score(resume_text, job_description, skill_scores) โ float [0, 1]
# Weights: Skills 45%, BERT 40%, TF-IDF 15%# 80+ canonical variation mappings
SKILL_VARIATIONS = {
"JavaScript": ["javascript", "js", "es6", "es2015", "ecmascript"],
"TypeScript": ["typescript", "ts"],
"React": ["react", "reactjs", "react.js"],
"Node.js": ["node.js", "nodejs", "node"],
# ... 80+ more entries
}
# Extract skills from text
extract_skills(text) โ List[str]
# 1. Check canonical variations (word boundary regex)
# 2. Check skills.json database (word boundary regex)
# 3. Map to canonical display names
# 4. Deduplicate# Supported formats
extract_text_from_bytes(file_bytes, filename) โ str
# PDF: pdfplumber (layout-aware with table extraction)
# DOCX: python-docx (headers + paragraphs + tables)
# DOC: UTF-8 decode fallback for .doc filesclass AnalyzeResponse(BaseModel):
candidateId: str
name: str
email: str
phone: str
skills: List[str] = []
matchedSkills: List[str] = []
missingSkills: List[str] = []
experience: int = 0
internships: int = 0
college: str = ""
branch: str = ""
degree: str = ""
location: str = ""
portfolioLinks: List[str] = []
matchPercentage: int = 0
score: int = 0
resumeStrength: str = "Weak"
jobFitLevel: str = "Low Fit"
categoryScores: Optional[Dict[str, int]] = None
bonusFactors: Optional[Dict[str, Any]] = Noneapp.use('/hr/auth', hrAuthRoutes) โ JWT signup/login
app.use('/hr/jobs', hrJobRoutes) โ Job CRUD
app.use('/hr/resumes', hrResumeRoutes) โ Batch resume analysis
app.use('/hr/dashboard', hrDashboardRoutes) โ Mock dashboard data
app.use('/candidate', candidateRoutes) โ Single resume analysis
app.use('/hr/debug', hrDebugRoutes) โ ML health check
// Sends resumes to Python ML service
const ML_URL = process.env.ML_SERVICE_URL || 'http://localhost:8000';
async function analyze(files, jobData) {
// 1. Build FormData with job_title, job_description, required_skills
// 2. Append resume file streams
// 3. POST to ML_URL/analyze-resumes
// 4. Fallback: retry as JSON if multipart fails (422)
// 5. Return array of candidate results
}// POST /candidate/analyze
// Accepts: single resume file + job info
// Returns: { success, candidate, summary, jobTitle, requiredSkills }
// Summary generation:
// - "Matched X of Y required skills: ..."
// - "Missing skills: ..."
// - Experience assessment
// - Actionable feedback// POST /hr/resumes
// Accepts: up to 200 resume files (multer)
// Resolves job from: jobId in jobs.json OR form fields (jobTitle, requiredSkills)
// Calls: mlService.analyze(files, jobData)
// Applies: skill, location, college, experience, match% filters
// Returns: filtered & ranked candidate list| Route | Component | Description |
|---|---|---|
/ |
Landing |
Landing page with role selection |
/candidate |
CandidateDashboard |
Job selection + resume upload |
/candidate/score |
ResumeScore |
Score report with breakdowns |
/candidate/skill-gap |
SkillGap |
Skill gap analysis |
/candidate/roadmap |
Roadmap |
Learning roadmap + career images |
/hr |
HRDashboard |
HR portal with filters & table |
/auth/login |
Login |
HR login form |
/auth/signup |
Signup |
HR signup form |
/auth/role |
RoleSelect |
Role selection |
| Component | File | Purpose |
|---|---|---|
CandidateCard |
CandidateCard.jsx |
Individual candidate card view |
FilterPanel |
FilterPanel.jsx |
15+ filter types with presets |
ProgressBar |
ProgressBar.jsx |
Animated bar with color transitions |
ResumeUpload |
ResumeUpload.jsx |
Drag & drop file uploader |
RoadmapTimeline |
RoadmapTimeline.jsx |
Vertical timeline display |
ScoreBadge |
ScoreBadge.jsx |
Gradient score badge |
SkillBadge |
SkillBadge.jsx |
Skill chip / tag |
Navigation-based state passing via React Router's useNavigate and useLocation:
// Dashboard โ ResumeScore
nav('/candidate/score', {
state: {
job, // Selected job role object
candidateSkills, // All extracted skills
matchedSkills, // Skills matching job requirements
missingSkills, // Required skills not found
matchPercent, // Job match percentage
score, // Overall resume score
candidateData, // Full candidate data object
categoryScores, // { skillMatch, experience, projects, keywords, education }
bonusFactors, // { projects, achievements, publications, ... }
summary, // AI-generated summary text
resumeStrength, // "Strong" | "Average" | "Weak"
jobFitLevel // "Excellent Fit" | "Good Fit" | "Partial Fit" | "Low Fit"
}
})matchPercentage =
(skillRatio ร 50) โ % of required skills found in resume
+ (experienceScore ร 20) โ years / 5, capped at 1.0
+ (projectsScore ร 15) โ project keywords detected (0 or 1)
+ (tfidfSimilarity ร 15) โ TF-IDF cosine similarity
+ (bertSimilarity ร 5) โ BERT semantic similarity bonus
baseScore =
(skillRatio ร 25) โ skill match ratio
+ (skillBreadth ร 20) โ total skills found / expected count
+ (experienceFactor ร 15) โ years / 5, capped at 1.0
+ (bertSimilarity ร 15) โ BERT semantic score
+ (tfidfSimilarity ร 5) โ TF-IDF keyword score
qualityBonus (up to +20):
+ projects โ +4
+ achievements โ +3
+ publications โ +3
+ leadership โ +2
+ technicalDepth โ +3
+ topEducation โ +3
+ portfolio โ +2
finalScore = min(baseScore + qualityBonus, 100)
Each category is scored 0-100 independently:
| Category | How It's Scored |
|---|---|
| Skill Match | (matchedSkills / requiredSkills) ร 100 |
| Experience | min(years / 5, 1.0) ร 100 |
| Projects | Project/portfolio keywords detected โ 0 or 80-100 |
| Keywords | tfidfSimilarity ร 100 |
| Education | Degree relevance + institution quality |
| Factor | Detection Method | Bonus Points |
|---|---|---|
| Projects | Keywords: "project", "built", "developed", "created" | +4 |
| Achievements | Keywords: "award", "achievement", "certification", "winner" | +3 |
| Publications | Keywords: "published", "paper", "journal", "conference" | +3 |
| Leadership | Keywords: "lead", "managed", "team leader", "coordinator" | +2 |
| Technical Depth | Long skill list (>10 skills) + project mentions | +3 |
| Top Education | IIT, NIT, IIIT, BITS, top-tier institutions | +3 |
| Internships | Count of "intern"/"internship" mentions | variable |
| Portfolio | GitHub, LinkedIn, personal website links detected | +2 |
| Score Range | Resume Strength | Job Fit Level |
|---|---|---|
| 70-100 | Strong | Excellent Fit |
| 45-69 | Average | Good Fit (50+) / Partial Fit (45-49) |
| 0-44 | Weak | Low Fit |
Analyze one or more resumes against a job description.
Content-Type: multipart/form-data
| Field | Type | Required | Description |
|---|---|---|---|
resumes |
File(s) | Yes | PDF or DOCX resume files |
job_title |
string | No | Target job title |
job_description |
string | No | Full job description text |
required_skills |
JSON string | No | Array of required skill names |
name_method |
string | No | "filename" or "text" โ how to extract candidate name |
Response: List[AnalyzeResponse]
[
{
"candidateId": "cand_001",
"name": "John Doe",
"email": "john@example.com",
"phone": "+91-9876543210",
"skills": ["Python", "React", "Node.js", "Docker"],
"matchedSkills": ["Python", "React"],
"missingSkills": ["AWS", "Kubernetes"],
"experience": 3,
"internships": 1,
"college": "IIT Delhi",
"branch": "CSE",
"degree": "B.Tech",
"location": "Hyderabad",
"portfolioLinks": ["https://github.com/johndoe"],
"matchPercentage": 72,
"score": 68,
"resumeStrength": "Average",
"jobFitLevel": "Good Fit",
"categoryScores": {
"skillMatch": 75,
"experience": 60,
"projects": 80,
"keywords": 55,
"education": 90
},
"bonusFactors": {
"projects": true,
"achievements": false,
"publications": false,
"leadership": true,
"technicalDepth": true,
"topEducation": true,
"internships": 1,
"portfolio": true
}
}
]FastAPI auto-generated Swagger UI for interactive API testing.
| Method | Endpoint | Body | Response |
|---|---|---|---|
POST |
/hr/auth/signup |
{ companyName, email, password } |
{ token } |
POST |
/hr/auth/login |
{ email, password } |
{ token } |
| Method | Endpoint | Body / Params | Response |
|---|---|---|---|
POST |
/hr/jobs |
{ name, requiredSkills[], experienceRange, location } |
Created job |
GET |
/hr/jobs |
โ | Array of jobs (auto-fills to 50) |
GET |
/hr/jobs/:id |
โ | Single job object |
| Method | Endpoint | Body | Response |
|---|---|---|---|
POST |
/hr/resumes |
FormData: resumes[] (up to 200), jobId, jobTitle, requiredSkills, jobDescription, jobLocation, filters |
{ candidates[] } |
POST |
/candidate/analyze |
FormData: resumes (1 file), jobId, jobTitle, requiredSkills, nameMethod, jobDescription |
{ success, candidate, summary, jobTitle, requiredSkills } |
| Method | Endpoint | Response |
|---|---|---|
GET |
/hr/dashboard/:jobId |
Mock candidates for job with filters |
GET |
/hr/debug/check-ml |
{ status, mlServiceUrl } |
Input: PDF/DOCX file bytes
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. FORMAT DETECTION โ
โ .pdf โ pdfplumber โ
โ .docx โ python-docx โ
โ .doc โ UTF-8 fallback โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 2. TEXT EXTRACTION โ
โ PDF: layout-aware with โ
โ table extraction โ
โ DOCX: headers + โ
โ paragraphs + โ
โ tables โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 3. TEXT CLEANING โ
โ - Normalize line endings โ
โ - Preserve column gaps โ
โ - Collapse excess padding โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 4. ENTITY EXTRACTION โ
โ - Name (spaCy NER) โ
โ - Email (regex) โ
โ - Phone (regex: IN/US) โ
โ - Portfolio links (regex) โ
โ - Experience (section- โ
โ aware parsing) โ
โ - College (two-pass) โ
โ - Degree (pattern match) โ
โ - Branch (abbreviation) โ
โ - Location (whitelist) โ
โ - Internships (count) โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 5. SKILL EXTRACTION โ
โ - Canonical variations โ
โ - skills.json database โ
โ - Word boundary matching โ
โ - Deduplication โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 6. SCORING โ
โ - Skill match ratio โ
โ - BERT similarity โ
โ - TF-IDF similarity โ
โ - Quality bonus โ
โ - Category scores โ
โ - Labels & ratings โ
โโโโโโโโโโโโฌโโโโโโโโโโโโโโโโโโโ
โ
โผ
Output: AnalyzeResponse JSON
The skill extraction pipeline uses a 3-step approach:
80+ skill families with variation aliases:
JavaScript โ js, es6, es2015, ecmascript
TypeScript โ ts
React โ reactjs, react.js
Node.js โ nodejs, node
Python โ py, python3
MongoDB โ mongo
PostgreSQL โ postgres, pg
Kubernetes โ k8s
Amazon Web Services โ aws
Google Cloud Platform โ gcp
Machine Learning โ ml
Deep Learning โ dl
Natural Language Processing โ nlp
Continuous Integration โ ci/cd, cicd
... 80+ more families
180+ skills from ml-service/data/skills.json:
[
"Python", "Java", "C++", "C#", "Go", "Rust", "JavaScript",
"TypeScript", "React", "Angular", "Vue.js", "Node.js",
"Express", "Django", "Flask", "FastAPI", "Spring Boot",
"Docker", "Kubernetes", "AWS", "Azure", "GCP",
"TensorFlow", "PyTorch", "scikit-learn", "Pandas",
"MongoDB", "PostgreSQL", "Redis", "GraphQL",
"Git", "Linux", "Terraform", "Ansible",
"... 180+ total"
]Extracted skills are mapped to their canonical display names and deduplicated:
Input text: "... reactjs, React.js, REACT ..."
Output: ["React"] (single canonical entry)
The Roadmap page includes 80+ career roadmap images from public/roadmaps/.
- Mapping:
ROADMAP_MAPmaps 65+ job title variations to image slugs - Resolution:
resolveRoadmapSlug()uses 3-tier matching:- Direct lookup (exact match)
- Partial/substring match
- Slugified fallback
- Validation:
RoadmapImagecomponent pre-validates images withnew Image()โ only renders if the file exists - Display: Full-width image with rounded corners, shadow, and fade-in animation
| Category | Available Roadmaps |
|---|---|
| Languages | Python, JavaScript, TypeScript, Java, C++, Go, Rust, Kotlin, Swift, PHP, Ruby |
| Frontend | React, Angular, Vue, Next.js, Flutter, React Native, CSS, HTML |
| Backend | Node.js, Express, Django, Flask, Spring Boot, Laravel, ASP.NET Core |
| Data / AI | Data Analyst, Data Engineer, Data Scientist, Machine Learning, MLOps, Prompt Engineering, AI Engineer |
| DevOps / Cloud | DevOps, Docker, Kubernetes, AWS, Terraform, Linux |
| Databases | MongoDB, PostgreSQL, Redis, SQL |
| Other | System Design, Software Architect, Cyber Security, Blockchain, Game Developer, QA, UX Design, Product Manager, Technical Writer |
- Add your PNG image to
public/roadmaps/(e.g.,your-role.png) - Add a mapping entry in
Roadmap.jsx:
// In ROADMAP_MAP object:
'your role name': 'your-role', // matches your-role.pngContains all predefined job roles with skills and roadmap steps:
{
"id": "role_001",
"name": "Frontend Developer",
"requiredSkills": [
"HTML", "CSS", "JavaScript", "React",
"TypeScript", "Git", "Responsive Design"
],
"roadmapSteps": [
"Learn HTML5 fundamentals",
"Master CSS3 and Flexbox/Grid",
"JavaScript ES6+ deep dive",
"Learn React.js framework",
"Build portfolio projects",
"Practice coding interviews",
"Apply for frontend roles"
]
}Flat array of 180+ recognized skill names used by the skill extractor.
Stores HR-created job listings (runtime-generated).
Stores registered HR user accounts (email, hashed password, company name).
Used by mockMlService.js to generate realistic synthetic candidate data for the HR dashboard demo.
- Gradient hero section with geometric circles
- "AI-Powered Platform" status badge
- 3 feature cards: Smart Analysis, Skill Gap, Learning Roadmap
- CTA buttons: Candidate login, HR login
- Signup link
- Two-tab layout: "Resume Score" / "Skill Gap & Roadmap"
- Radio toggle: "Select Job Role" / "Paste Job Description"
- Dropdown with all roles from
job_roles.json - Custom JD auto-detects 50+ skill keywords
- File upload area (PDF/DOCX)
- Analyze button with loading spinner
- SVG circle score rings (animated) for score and match %
- 4 metric cards: Score, Match%, Strength, Fit
- AI-generated summary
- 5 category breakdown bars (colored backgrounds)
- Bonus factor badges (star icons)
- Matched skills (green) / Missing skills (red) side by side
- All extracted skills with check marks
- Extracted profile cards (experience, college, degree, location)
- Navigation to Skill Gap / Roadmap
- Ring chart for coverage percentage
- 4 metric cards: Gap%, Matched, Missing, Required
- Coverage progress bar
- Category strength/weakness analysis with inline bars
- Priority-ranked missing skills with badges (Critical/Important/Nice-to-Have)
- Matched skills / Extra skills sections
- Gradient header with progress stats
- Progress bar (completed/total steps)
- Phase cards with colored headers, SVG icons, vertical timeline
- Phase items with done/pending dots and badges
- Full career roadmap image section (80+ images)
- Navigation actions
- Job role selector
- Batch resume upload (up to 200 files)
- Advanced filter panel (15+ filter types, quick presets)
- Candidate table with expandable skills cells
- Sort by score, match%, name
- Score badges with color gradients
All services work with defaults. Customize with environment variables:
| Variable | Default | Description |
|---|---|---|
PORT |
5000 |
Backend server port |
ML_SERVICE_URL |
http://localhost:8000 |
Python ML service URL |
JWT_SECRET |
demo-secret |
JWT signing secret |
| Variable | Default | Description |
|---|---|---|
PORT |
8000 |
ML service port |
| Variable | Default | Description |
|---|---|---|
VITE_API_URL |
http://localhost:5000 |
Backend API URL (in api.js) |
| Issue | Cause | Solution |
|---|---|---|
| ECONNREFUSED on port 8000 | ML service not running | Start ML service: python -m uvicorn app.main:app --port 8000 |
| ECONNREFUSED on port 5000 | Backend not running | Start backend: cd backend && node server.js |
| Port already in use | Previous process still running | Kill it: npx kill-port 5000 or npx kill-port 8000 |
python-multipart error |
Missing Python dependency | pip install python-multipart |
| spaCy model not found | Model not downloaded | python -m spacy download en_core_web_sm |
| matchedSkills always 0 | Pydantic schema missing fields | Ensure schemas.py has matchedSkills, categoryScores, bonusFactors |
| Job role IDs don't match | Frontend uses role_001, backend uses job_1001 |
Backend reads jobTitle + requiredSkills from form fields as fallback |
| First ML request is slow | Model loading on first call | Normal โ all-MiniLM-L6-v2 loads ~3-5 sec on first request |
| CORS errors | Backend CORS not configured | Backend already uses cors() middleware โ check if backend is running |
| Resume upload fails | File too large or wrong format | Check: PDF/DOCX only, < 10 MB per file |
# Kill process on specific port (Windows PowerShell)
$proc = Get-NetTCPConnection -LocalPort 5000 -ErrorAction SilentlyContinue |
Select-Object -First 1
if ($proc) { Stop-Process -Id $proc.OwningProcess -Force }
# Activate Python venv (PowerShell)
.\.venv\Scripts\Activate.ps1
# If PowerShell execution policy blocks venv activation:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser# Kill process on specific port
lsof -ti:5000 | xargs kill -9
lsof -ti:8000 | xargs kill -9
# Activate Python venv
source .venv/bin/activateWe welcome contributions! Whether it's bug fixes, new features, documentation improvements, or roadmap images โ all contributions are valued.
- Fork the repository
- Create a feature branch from
main - Make your changes
- Test your changes locally (all 3 services)
- Commit with clear, descriptive messages
- Push to your fork
- Open a Pull Request
# 1. Fork and clone
git clone https://github.com/YOUR-USERNAME/resume-screening-project.git
cd resume-screening-project
# 2. Create a feature branch
git checkout -b feature/your-feature-name
# 3. Set up all 3 services (see Quick Start above)
# 4. Make your changes
# 5. Test locally
# - Upload a resume and verify scoring works
# - Check skill extraction accuracy
# - Test HR batch upload
# - Verify filters work correctly
# 6. Commit and push
git add .
git commit -m "feat: your feature description"
git push origin feature/your-feature-name
# 7. Open a PR on GitHub| Language | Style Guide |
|---|---|
| JavaScript/JSX | ES6+, functional components, React Hooks |
| Python | PEP 8, type hints recommended |
| CSS | Tailwind CSS utility classes, avoid custom CSS where possible |
| Commits | Conventional Commits preferred |
| Area | Examples |
|---|---|
| New Roadmap Images | Add .png images to public/roadmaps/ + mapping in Roadmap.jsx |
| More Job Roles | Add entries to src/data/job_roles.json with skills + roadmap steps |
| More Skills | Add skills to ml-service/data/skills.json + variations in skill_extractor.py |
| Better Extraction | Improve name/college/experience parsing in routes.py |
| UI Improvements | Enhance any page component styling |
| Tests | Add unit/integration tests (currently none) |
| Documentation | Improve README, add CONTRIBUTING.md, add JSDoc/docstrings |
| Docker | Add Dockerfile / docker-compose for easy deployment |
| Database | Replace JSON file storage with MongoDB/PostgreSQL |
| Auth | Add candidate authentication, OAuth providers |
| Deployment | Add Vercel/Railway/Render deployment configs |
When opening a PR, please include:
## What does this PR do?
Brief description of changes.
## Type of change
- [ ] Bug fix
- [ ] New feature
- [ ] Documentation update
- [ ] Refactoring
- [ ] New roadmap image(s)
- [ ] New job role(s)
- [ ] Other
## Checklist
- [ ] I've tested my changes locally
- [ ] All 3 services start without errors
- [ ] Resume upload and scoring still works
- [ ] No existing functionality is broken
- [ ] I've updated the README if needed
## Screenshots (if UI changes)
Before: ...
After: ...
M.Abhiram ๐ป Project Lead & Full-Stack Development |
After your PR is merged, add yourself to the table above following this format:
<td align="center">
<a href="https://github.com/YOUR-GITHUB-USERNAME">
<img src="https://github.com/YOUR-GITHUB-USERNAME.png" width="80px;" alt="Your Name"/>
<br /><sub><b>Your Name</b></sub>
</a>
<br />
<sub>EMOJI Your Contribution Type</sub>
</td>Contribution Type Emojis:
| Emoji | Type |
|---|---|
| ๐ป | Code |
| ๐ | Documentation |
| ๐จ | Design / UI |
| ๐ | Bug Fix |
| ๐ง | DevOps / Infra |
| ๐ค | ML / AI |
| ๐บ๏ธ | Roadmap Images |
| โ | Testing |
| Priority | Enhancement | Description |
|---|---|---|
| ๐ด High | Database Integration | Replace JSON files with MongoDB or PostgreSQL for production use |
| ๐ด High | Candidate Authentication | Add login/signup for candidates with profile persistence |
| ๐ด High | Docker Compose | One-command deployment with docker-compose up |
| ๐ก Medium | Resume Storage | Cloud storage (S3/GCS) for uploaded resumes |
| ๐ก Medium | Job Description Parser | Auto-extract required skills from any pasted JD using NLP |
| ๐ก Medium | Email Notifications | Send score reports to candidates via email |
| ๐ก Medium | Export Reports | Download score reports as PDF |
| ๐ก Medium | Batch Processing UI | Progress bar for HR batch uploads showing per-resume status |
| ๐ข Low | Dark Mode | System-preference dark mode with Tailwind dark: classes |
| ๐ข Low | Internationalization | Multi-language support (Hindi, Telugu, etc.) |
| ๐ข Low | Resume Templates | Downloadable ATS-friendly resume templates |
| ๐ข Low | Interview Prep | AI-generated interview questions based on skill gaps |
| ๐ข Low | Analytics Dashboard | HR analytics: hiring funnel, skill trends, source tracking |
| ๐ข Low | Mobile App | React Native mobile app for candidates |
| ๐ข Low | Video Resume | Support video resume uploads with audio transcription |
| ๐ข Low | ATS Integration | API integration with popular ATS systems (Lever, Greenhouse) |
| # | Method | Endpoint | Service | Description |
|---|---|---|---|---|
| 1 | POST |
/analyze-resumes |
ML (8000) | Analyze resumes with full NLP pipeline |
| 2 | GET |
/docs |
ML (8000) | Swagger interactive API docs |
| 3 | GET |
/ |
Backend (5000) | Health check |
| 4 | POST |
/hr/auth/signup |
Backend (5000) | HR registration |
| 5 | POST |
/hr/auth/login |
Backend (5000) | HR authentication |
| 6 | POST |
/hr/jobs |
Backend (5000) | Create job listing |
| 7 | GET |
/hr/jobs |
Backend (5000) | List all jobs |
| 8 | GET |
/hr/jobs/:id |
Backend (5000) | Get specific job |
| 9 | POST |
/hr/resumes |
Backend (5000) | Batch resume analysis (up to 200) |
| 10 | GET |
/hr/dashboard/:jobId |
Backend (5000) | Mock dashboard data |
| 11 | POST |
/candidate/analyze |
Backend (5000) | Single resume analysis |
| 12 | GET |
/hr/debug/check-ml |
Backend (5000) | ML service connectivity check |
This project is licensed under the MIT License โ see the LICENSE file for details.
MIT License
Copyright (c) 2025 Resume Screening & Career Guidance System
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
| Resource | Usage |
|---|---|
| spaCy | NLP library for named entity recognition |
| sentence-transformers | BERT embeddings for semantic similarity |
| scikit-learn | TF-IDF vectorizer and cosine similarity |
| FastAPI | High-performance Python web framework |
| React | Frontend UI library |
| Tailwind CSS | Utility-first CSS framework |
| Vite | Frontend build tool |
| pdfplumber | PDF text extraction |
| roadmap.sh | Career roadmap images and inspiration |
Built with โค๏ธ for smarter hiring and career growth
โญ Star this repository if you found it useful!
Report Bug โข Request Feature โข Contribute