AI-powered candidate skill assessment and training roadmap platform — built for HR teams and Trainers to streamline the hiring-to-training pipeline.
🔗 https://skill-matrix-ai-ercm.vercel.app/
- Overview
- Features
- Tech Stack
- Project Structure
- Getting Started
- Environment Variables
- API Reference
- User Roles & Workflow
- AI Integration
- Contributing
SkillMatrixAI is a full-stack web application that helps organizations evaluate candidates by automatically generating AI-powered skill development roadmaps from uploaded resumes. The platform supports two distinct user roles — HR and Trainer — each with their own dedicated dashboard and workflows.
- HR uploads candidate resumes → AI extracts skills and generates a phased training roadmap
- Trainer reviews, approves/rejects roadmaps, tracks training progress, and marks candidates as complete
- HR can resubmit rejected roadmaps, triggering a fresh AI-powered regeneration
- Upload candidate resumes (PDF or text)
- AI-generated skill roadmaps via Google Gemini 2.5 Flash
- Dashboard with candidate pipeline overview (Total / Approved / Rejected / In Progress)
- View detailed candidate profiles with roadmap and AI insights
- Resubmit rejected candidate roadmaps for AI regeneration
- Dashboard with stats: Total / Pending / In Training / Completed
- Review AI-generated roadmaps → Approve or Reject with feedback
- Track per-candidate progress with interactive task checklists
- Mark individual tasks as complete / incomplete (toggle)
- Download candidate CVs
- Mark candidates as "Training Complete"
- Role-based registration and login (
HR,trainer,manager) - JWT-based authentication with bcrypt password hashing
| Layer | Technology |
|---|---|
| Frontend | React 19, React Router DOM v7, Vite, Tailwind CSS v4 |
| Backend | Node.js, Express.js v5 |
| Database | MongoDB (via Mongoose) |
| AI | Google Gemini 2.5 Flash (@google/genai) |
| Auth | JWT (jsonwebtoken), bcryptjs |
| File Handling | Multer (resume uploads), pdf-parse |
| Validation | Joi |
SkillMatrixAI/
├── backend/
│ ├── config/
│ │ └── db.js # MongoDB connection
│ ├── controllers/
│ │ ├── authController.js # Register & Login
│ │ ├── hrController.js # HR operations (upload, dashboard, resubmit)
│ │ └── trainerController.js # Trainer operations (review, tasks, complete)
│ ├── middleware/
│ │ ├── auth.js
│ │ └── authMiddleware.js # JWT protect & role authorization
│ ├── models/
│ │ ├── Candidate.js # Candidate schema
│ │ ├── Roadmap.js # AI Roadmap schema
│ │ ├── User.js # User schema (HR / Trainer / Manager)
│ │ └── Comment.js # Trainer comments schema
│ ├── routes/
│ │ ├── authRoutes.js # /api/auth
│ │ ├── hrRoutes.js # /api/hr
│ │ └── trainerRoutes.js # /api/trainer
│ ├── services/
│ │ ├── aiService.js # Gemini AI roadmap generation
│ │ └── resumeParser.js # PDF text extraction
│ ├── uploads/ # Uploaded resume files
│ ├── server.js # Express app entry point
│ └── package.json
│
├── frontend/
│ ├── public/
│ ├── src/
│ │ ├── components/
│ │ │ ├── HRLayout.jsx # HR sidebar + outlet layout
│ │ │ ├── TrainerLayout.jsx # Trainer sidebar + outlet layout
│ │ │ ├── Sidebar.jsx
│ │ │ ├── Navbar.jsx
│ │ │ ├── Footer.jsx
│ │ │ └── CustomDropdown.jsx
│ │ ├── pages/
│ │ │ ├── Landing.jsx # Public landing page
│ │ │ ├── Login.jsx
│ │ │ ├── Register.jsx
│ │ │ ├── HRDashboard.jsx # HR status & pipeline view
│ │ │ ├── HRCandidateProfile.jsx # HR candidate detail + resubmit
│ │ │ ├── UploadResumes.jsx # Resume upload page
│ │ │ ├── TrainerDashboard.jsx # Trainer main dashboard
│ │ │ ├── RoadmapReview.jsx # Approve/reject roadmap
│ │ │ ├── Candidates.jsx # All candidates list
│ │ │ ├── CandidateDetail.jsx # In-depth candidate + task tracker
│ │ │ ├── AnalysisResults.jsx # Enterprise analytics view
│ │ │ └── Roadmap.jsx
│ │ ├── App.jsx # Routing configuration
│ │ ├── main.jsx
│ │ └── index.css
│ ├── vite.config.js
│ └── package.json
│
├── .gitignore
└── README.md
- Node.js >= 18
- MongoDB (local or Atlas)
- Google Gemini API Key
# Navigate to backend
cd backend
# Install dependencies
npm install
# Create .env file (see Environment Variables section)
# Then start the server
node server.jsThe backend will run on http://localhost:3000 by default.
# Navigate to frontend
cd frontend
# Install dependencies
npm install
# Create .env file (see Environment Variables section)
# Then start the dev server
npm run devThe frontend will run on http://localhost:5173 by default.
PORT=3000
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
GEMINI_API_KEY=your_google_gemini_api_keyVITE_API_BASE_URL=http://localhost:3000
⚠️ For production, setVITE_API_BASE_URLto your deployed backend URL.
| Method | Endpoint | Description |
|---|---|---|
POST |
/api/auth/register |
Register a new user (HR / Trainer / Manager) |
POST |
/api/auth/login |
Login and receive a JWT token |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/hr/dashboard |
Get HR dashboard stats and recent candidates |
POST |
/api/hr/upload |
Upload a candidate resume (multipart/form-data) |
GET |
/api/hr/candidate/:id |
Get a specific candidate's profile |
POST |
/api/hr/candidate/:id/resubmit |
Resubmit a rejected candidate's roadmap for AI regeneration |
| Method | Endpoint | Description |
|---|---|---|
GET |
/api/trainer/dashboard |
Get trainer dashboard stats and roadmaps |
GET |
/api/trainer/candidates |
Get all candidates list |
GET |
/api/trainer/candidate/:id |
Get detailed candidate profile + comments |
POST |
/api/trainer/roadmap/:id/review |
Approve or reject a roadmap ({ action: "APPROVE" | "REJECT", feedback }) |
POST |
/api/trainer/roadmap/:roadmapId/task/toggle |
Toggle a task's completion ({ phaseIndex, taskIndex }) |
POST |
/api/trainer/candidate/:id/complete |
Mark candidate training as complete |
GET |
/api/trainer/candidate/:id/download-cv |
Download candidate's CV/resume |
HR uploads resume
│
▼
AI (Gemini) analyzes resume
→ Extracts: name, email, role, skills, experience, projects
→ Generates: 3–4 phase training roadmap
│
▼
Roadmap stored in DB (status: PENDING)
│
▼
Trainer reviews roadmap
├── APPROVE → Candidate moves to training
└── REJECT → HR can resubmit for AI regeneration
│
▼
Trainer tracks tasks (toggle complete/incomplete)
│
▼
Trainer marks candidate as COMPLETED
SkillMatrixAI uses Google Gemini 2.5 Flash to:
- Parse resumes — extract structured candidate information (name, email, role, skills, experience, projects)
- Generate roadmaps — create a personalized 3–4 phase learning roadmap based on the candidate's profile
- Resubmit roadmaps — regenerate a new roadmap for rejected candidates using their existing profile data
A built-in demo fallback is provided for when the Gemini API is unavailable (e.g., quota exceeded), ensuring the platform remains functional during demos and hackathons.
Built by Qubit Coderz 🚀
Pull requests are welcome! For major changes, please open an issue first to discuss what you would like to change.
Made with ❤️ by Qubit Coderz