A full-stack web application that helps learners identify which skills to learn next based on their existing knowledge and target career role.
Built using Node.js, Express.js, EJS, and MySQL, this project follows a modular MVC architecture and implements secure authentication, role-based access control, and a custom recommendation engine.
- Register and login securely
- Create and update profile
- Select known skills
- Set a target role
- Get personalized skill recommendations
- Browse skill details
- Manage skill catalogue (CRUD operations)
- Manage categories
- Access all learner features
Skills are ranked based on:
- Category Match – similarity with existing skills
- Target Role Relevance – keyword-based matching
- Difficulty Level – ensures progressive learning
| Layer | Technology |
|---|---|
| Backend | Node.js, Express.js |
| Frontend | EJS (Server-side rendering) |
| Database | MySQL |
| Authentication | Express Sessions + bcrypt |
| Architecture | MVC Pattern |
SkillMatch/
|-- app.js
|-- backend/
| |-- config/
| |-- controllers/
| |-- middleware/
| |-- models/
| |-- routes/
| `-- utils/
|-- frontend/
| |-- views/
| `-- public/
|-- database/
|-- tests/
|-- package.json
`-- README.md
Browser → Routes → Controllers → Models → MySQL
Browser ← Views / JSON ← Controllers ← Models
Tables: users, skills, categories, user_skills (junction table)
users 1---* user_skills *---1 skills *---1 categories
- ✅ Password hashing using
bcrypt - ✅ Session-based authentication
- ✅ Role-based access control
- ✅ Parameterized SQL queries
- ✅ Server-side validation
- ✅ Centralized error handling
helmetfor secure HTTP headerscompressionfor faster responsesexpress-rate-limitfor API protectionexpress-mysql-sessionfor persistent sessions- Health check endpoint at
/api/health - Static asset caching
| Method | Endpoint | Access |
|---|---|---|
| GET | /api/health |
Public |
| GET | /api/categories |
Public |
| GET | /api/skills |
Public |
| GET | /api/skills/:id |
Public |
| POST | /api/skills |
Admin only |
| PUT | /api/skills/:id |
Admin only |
| DELETE | /api/skills/:id |
Admin only |
| GET | /api/recommendations |
Authenticated |
1. Install dependencies
npm install2. Setup MySQL database
mysql -u root -p < database/mysql.sql3. Create .env file
PORT=3000
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=your_username
DB_PASSWORD=your_password
DB_NAME=skills_db
SESSION_SECRET=your_secret_key4. Run the application
npm startVisit: http://localhost:3000
npm run check
npm test- ✅ Clean and scalable MVC architecture
- ✅ Secure authentication system
- ✅ Personalized recommendation logic
- ✅ Full CRUD operations with role-based access
- ✅ Production-ready backend practices
- Machine learning-based recommendations
- Skill roadmap visualization
- Integration with job platforms
- User progress tracking
Harsh Pandey · github.com/harshpandeyz