UniMatch is a comprehensive platform connecting students, universities, and companies for career opportunities including internships, research positions, and graduate jobs.
This is a full-stack MERN application:
- Frontend: React 19.2.0 with React Router
- Backend: Node.js + Express
- Database: MongoDB
- API: RESTful with JWT authentication
- Browse internships, research roles, and graduate jobs
- Create and manage profiles
- Apply for opportunities
- Track application status
- Post research opportunities
- Manage student applications
- Review applicant profiles
- Post internship and job opportunities
- Review student applications
- Connect with talent
- React 19.2.0
- React Router 7.9.4
- Axios 1.12.2
- Bootstrap 5.3.3
- Framer Motion 12.23.24
- Lucide React (icons)
- Node.js + Express 4.18.2
- MongoDB + Mongoose 7.5.0
- JWT Authentication 9.0.2
- bcryptjs 2.4.3
- CORS enabled
cs324-project/
βββ frontend/ # React app
β βββ src/
β β βββ App.jsx
β β βββ pages/ # Page components
β β βββ components/ # Reusable components
β β βββ services/ # API calls (Axios)
β βββ public/
β βββ package.json
βββ backend/ # Node.js/Express server
β βββ server.js
β βββ config/ # Database config
β βββ models/ # Mongoose schemas
β βββ controllers/ # Business logic
β βββ routes/ # API endpoints
β βββ middleware/ # Auth, errors
β βββ .env # Configuration
β βββ package.json
βββ IMPLEMENTATION_SUMMARY.md # What's been built
βββ BACKEND_SETUP.md # Backend setup guide
βββ QUICK_START.md # Quick reference
βββ README.md # This file
- Node.js (v14+)
- npm or yarn
- MongoDB Atlas account (free at mongodb.com)
cd /path/to/cs324-project
npm install
npm startFrontend runs on http://localhost:3000
cd backend
npm installConfigure .env:
MONGODB_URI=mongodb+srv://username:password@cluster...
PORT=5001
JWT_SECRET=your_secret_key
FRONTEND_URL=http://localhost:3000Start backend:
npm startBackend runs on http://localhost:5001
IMPLEMENTATION_SUMMARY.md- Complete overview of what's been builtBACKEND_SETUP.md- Detailed backend setup and configurationQUICK_START.md- Quick reference guidebackend/API_DOCUMENTATION.md- Complete API reference
POST /api/auth/register- Register userPOST /api/auth/login- Login userGET /api/auth/me- Get current user
GET /api/users/:id- Get user profilePATCH /api/users/profile/update- Update profile
GET /api/opportunities- Get all opportunitiesPOST /api/opportunities- Create opportunityGET /api/opportunities/:id- Get opportunity detailsPATCH /api/opportunities/:id- Update opportunityDELETE /api/opportunities/:id- Delete opportunity
POST /api/applications- Submit applicationGET /api/applications/student/applications- Get my applicationsPATCH /api/applications/:id/status- Update application statusPATCH /api/applications/:id/withdraw- Withdraw application
See backend/API_DOCUMENTATION.md for complete endpoint details.
- JWT-based authentication
- Password hashing with bcryptjs
- Token-based authorization
- Role-based access control (student, university, company, admin)
- Email, password, first/last name
- Role (student, university, company, admin)
- Profile info (bio, location, skills, etc.)
- Role-specific data
- Title, description, type (internship, research, etc.)
- Location, salary, duration
- Requirements, qualifications, skills
- Application tracking
- Student, opportunity reference
- Status (pending, reviewed, accepted, rejected, withdrawn)
- Cover letter, feedback
Use Postman to test endpoints:
- Import endpoints from
API_DOCUMENTATION.md - Set base URL:
http://localhost:5001/api - Register and login to get JWT token
- Use token in Authorization header for protected routes
Example cURL:
# Register
curl -X POST http://localhost:5001/api/auth/register \
-H "Content-Type: application/json" \
-d '{"firstName":"John","lastName":"Doe","email":"john@test.com","password":"pass123","role":"student"}'
# Login
curl -X POST http://localhost:5001/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"john@test.com","password":"pass123"}'- Home page with role selection
- Login page
- Signup page
- Student portal (browse opportunities, apply)
- University portal (post opportunities, view applications)
- Company portal (post opportunities, view applications)
- User profile page
- Application tracking page
- Database models
- Authentication system
- CRUD operations
- Error handling
- CORS configuration
- Email notifications
- Search/filter optimization
- Rate limiting
Use Axios to connect to backend:
import axios from 'axios';
const api = axios.create({ baseURL: 'http://localhost:5001/api' });
api.interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) config.headers.Authorization = `Bearer ${token}`;
return config;
});REACT_APP_API_URL=http://localhost:5001/apiMONGODB_URI=mongodb+srv://...
PORT=5001
JWT_SECRET=your_secret_key
FRONTEND_URL=http://localhost:3000
NODE_ENV=development
JWT_EXPIRE=7d- Check MongoDB URI is correct
- Ensure port 5001 is available
- Check
.envfile exists and is configured
- Ensure backend is running on port 5001
- Check CORS is enabled
- Verify API URLs in frontend
- Verify connection string in
.env - Check IP whitelist in MongoDB Atlas
- Ensure username/password are correct
- β Setup MongoDB Atlas
- β
Configure backend
.env - β Test backend API with Postman
- Build frontend pages
- Integrate frontend with backend APIs
- Add email notifications
- Deploy to production
- Student: Can view and apply for opportunities
- University: Can post opportunities and manage applications
- Company: Can post opportunities and manage applications
- Admin: Full system access
For issues or questions, refer to:
BACKEND_SETUP.md- Backend setup helpAPI_DOCUMENTATION.md- API detailsQUICK_START.md- Quick reference
ISC
Status: Backend complete, ready for frontend integration Last Updated: November 27, 2025 Version: 1.0.0