A full-stack web application that connects students with companies for internships using a transparent, rule-based matching system. Built with Node.js, Express, MongoDB, and vanilla JavaScript.
- Overview
- Key Features
- Architecture
- Technology Stack
- Database Schema
- Matching Algorithm
- Getting Started
- Testing
- Project Structure
- Design System
- Contributing
InternMatch is a centralized platform that helps students discover internships by matching their skills against company requirements using a transparent, deterministic algorithm — no AI/ML involved. The platform supports three distinct user roles: Students, Companies, and Admins, each with a tailored dashboard and workflow.
- Create and maintain a profile with a structured skill set
- View internships ranked by match percentage
- Apply to internships in a single click
- Track application status in real time
- Set location and internship-type preferences
- Post and manage internship opportunities
- View a ranked list of matched candidates per posting
- Accept or reject applications
- Track all active and past postings
- View platform-wide statistics and analytics
- Manage all registered users
- Moderate internship postings
- Access a centralized admin dashboard
┌─────────────┐
│ Frontend │ HTML, CSS, JavaScript
│ (Vanilla) │
└──────┬──────┘
│
┌──────▼──────┐
│ Express │ REST API, JWT Auth
│ Backend │ MVC Pattern
└──────┬──────┘
│
┌──────▼──────┐
│ MongoDB │ 5 Collections
│ (Database) │ Indexed for Performance
└─────────────┘
| Layer | Technology |
|---|---|
| Backend | Node.js, Express.js |
| Database | MongoDB with Mongoose |
| Authentication | JWT with bcrypt |
| Frontend | HTML5, CSS3, JavaScript (ES6+) |
| Architecture | MVC Pattern |
| Collection | Purpose |
|---|---|
users |
Authentication data (email, password, role) |
students |
Student profiles and skill sets |
companies |
Company information |
internships |
Job postings with required skills |
applications |
Application tracking |
The matching engine compares student skills against internship requirements and applies eligibility checks and preference bonuses to compute a final match score.
Process:
- Compare student skills with the internship's required skills
- Calculate a base match score:
(matched_skills / required_skills) × 100 - Apply eligibility filters:
- Minimum CGPA
- Degree requirement
- Year of study
- Apply preference bonuses:
- Location match: +5%
- Internship type match: +5%
- Display the internship if the match score is ≥ 40%
- Flag as a Strong Match if the score is ≥ 70%
Example
| Field | Student | Internship |
|---|---|---|
| Skills | javascript, react, html, css |
Required: javascript, react, html |
| CGPA | 8.5 | Minimum: 7.5 |
- Matched skills: 3 of 3 required → base match =
(3/3) × 100= 100% - CGPA check: eligible (8.5 ≥ 7.5)
- Final match: 100% (Strong Match)
- Node.js v18 or higher
- MongoDB v5 or higher (local installation recommended)
- npm or yarn
-
Clone the repository and navigate into the project
cd "Smart Internship Checker"
-
Install backend dependencies
cd backend npm install -
Configure environment variables
cp .env.example .env
The default
.envis preconfigured for a local MongoDB instance:MONGODB_URI=mongodb://localhost:27017/internship-matching JWT_SECRET=your_secret_key_here PORT=5000 -
Start MongoDB
# Windows — MongoDB typically runs as a service; if not: net start MongoDB # macOS brew services start mongodb-community # Linux sudo systemctl start mongod
-
Start the server
npm start
-
Access the application
http://localhost:5000
Manual end-to-end testing steps:
- Register as a Student — go to
/register.html, select "Student," fill in details, and log in. - Complete the student profile — add skills (e.g.,
javascript, react, node.js) and set preferences. - Register as a Company — log out, register with the "Company" role, and complete the company profile.
- Post an internship — define required skills that overlap with the test student's skills, and set eligibility criteria.
- Verify matching — log in as the student, open "Matched Internships," confirm the match percentage, and apply.
- Review applications — log in as the company, open "Applications," and accept or reject candidates.
smart-internship-checker/
├── backend/
│ ├── config/
│ │ ├── db.js # MongoDB connection
│ │ └── config.js # Environment config
│ ├── controllers/
│ │ ├── authController.js # Authentication logic
│ │ ├── studentController.js # Student operations
│ │ ├── companyController.js # Company operations
│ │ ├── internshipController.js
│ │ ├── matchingController.js # Matching algorithm
│ │ ├── applicationController.js
│ │ └── adminController.js
│ ├── middleware/
│ │ ├── auth.js # JWT verification
│ │ └── roleAuth.js # Role-based access control
│ ├── models/
│ │ ├── User.js
│ │ ├── Student.js
│ │ ├── Company.js
│ │ ├── Internship.js
│ │ └── Application.js
│ ├── routes/
│ │ ├── auth.js
│ │ ├── student.js
│ │ ├── company.js
│ │ ├── internship.js
│ │ ├── matching.js
│ │ ├── application.js
│ │ └── admin.js
│ ├── .env.example
│ ├── .env
│ ├── package.json
│ └── server.js # Main entry point
├── public/
│ ├── css/
│ │ ├── main.css # Core design system
│ │ └── dashboard.css # Dashboard styles
│ ├── js/
│ │ ├── api.js # API utilities
│ │ ├── auth.js # Auth management
│ │ ├── utils.js # Helper functions
│ │ ├── student.js # Student dashboard logic
│ │ ├── company.js # Company dashboard logic
│ │ └── admin.js # Admin dashboard logic
│ ├── index.html # Landing page
│ ├── login.html
│ ├── register.html
│ ├── student-dashboard.html
│ ├── company-dashboard.html
│ └── admin-dashboard.html
├── test-data/
│ └── sample-data.json # Sample/test data
└── README.md
- Dark theme with glassmorphism effects
- Gradient buttons with hover animations
- Responsive grid layout
- Custom CSS variables for design consistency
- Mobile-first approach
Contributions are welcome. If you find this project useful, consider starring the repository.