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