A web platform that helps students discover suitable placement opportunities based on their academic performance (CGPA), department, and skills. The system compares student profiles with company and job role requirements, computes a match score using database queries, and recommends job roles accordingly.
- Student profiles: CGPA, department, and skills stored in the database
- Job roles: Company and role requirements (min CGPA, preferred departments, required skills)
- Match score: Calculated from CGPA eligibility, department fit, and skill overlap (weighted)
- Recommendations: Job roles ranked by match score for each student
- Database design: ER-based schema with primary keys, relationships, specialization (IS-A), composite and multivalued attributes, and derived attributes (recommendation scores)
- Frontend: React 18, Vite, React Router
- Backend: Node.js, Express
- Database: SQLite (better-sqlite3)
├── backend/ # API and database
│ ├── db/ # Schema and DB connection
│ ├── services/ # Match score logic
│ ├── scripts/ # initDb seed script
│ └── server.js
├── frontend/ # React app
│ ├── src/
│ │ ├── components/
│ │ ├── pages/
│ │ └── App.jsx
│ └── index.html
└── README.md
cd backend
npm install
npm run init-db # Seed sample students, companies, jobs (run once)
npm run dev # Start API at http://localhost:3001cd frontend
npm install
npm run dev # Start app at http://localhost:5173- Open http://localhost:5173
- Students: Click Create account to register (email, password, name, roll number, department, CGPA, skills), or Sign in if you already have an account.
- Demo student logins (after
npm run init-db):- alice@college.edu / alice123
- bob@college.edu / bob123
- carol@college.edu / carol123
- Admin: Click Admin (or go to
/admin/login). Default admin:- Email:
admin@placement.edu - Password:
admin123If login fails, run in backend folder:npm run reset-admin, then try again.
- Email:
- In the Admin dashboard you can: view Overview (counts, recent students), Add company, Add skill, Add job requirement (company, title, min CGPA, preferred departments, skills), and view Students list.
To make the site publicly accessible over HTTPS (anyone on the internet):
- Build frontend:
cd frontend && npm run build - Start backend:
cd backend && node server.js(serves API + frontend from one port) - Run a tunnel:
cloudflared tunnel --url http://localhost:3001
You get a public HTTPS URL (e.g.https://xxxx.trycloudflare.com). See DEPLOY.md for details and other options (local HTTPS, deploy to a host).
- departments – Department names
- specializations – IS-A specialization of departments
- skills – Skill master list
- students – Roll number, name, email, CGPA, department (composite key with roll_number + department_id)
- student_skills – Multivalued: skills per student
- companies – Company details
- job_roles – Title, min_cgpa, preferred_department_ids, etc.
- job_skills – Multivalued: required skills per job
- recommendation_scores – Derived: stored match score per student–job pair
The score is computed in backend/services/matchScore.js:
- CGPA (35%): How much the student’s CGPA is above the job’s minimum
- Department (25%): Whether the student’s department is in the job’s preferred list
- Skills (40%): Overlap of required job skills with student skills, plus a small bonus for extra skills
Scores are stored in recommendation_scores and used to rank recommendations.
MIT