ProHire is a full-stack job portal that connects students with recruiters through a modern hiring workflow. Candidates can explore openings, search and filter jobs, apply to roles, and manage their profile. Recruiters can register companies, publish job posts, review applicants, and update application statuses from a protected admin area.
The project includes:
- JWT-based authentication with role-aware access for
studentandrecruiter - recruiter company management with Cloudinary-powered logo uploads
- job posting and browsing with keyword search, filters, and pagination
- candidate profile management with resume upload and skill tracking
- application tracking with duplicate-application prevention
- recruiter applicant review with status updates for
pending,accepted, andrejected
- Role-Based Auth: Users can sign up and log in as either students or recruiters.
- Job Discovery: Browse recent job openings from the homepage and dedicated browse page.
- Search and Filters: Search jobs by keyword and filter by location, category, and experience level.
- Job Details Page: View complete job information, company details, posting date, salary, and applicant count.
- Apply to Jobs: Students can apply to jobs directly from the job detail page.
- Duplicate Apply Protection: The backend prevents the same user from applying to the same job twice.
- Profile Dashboard: Students can update bio, skills, profile photo, and resume, then review applied jobs.
- Recruiter Company Management: Recruiters can create companies and update company details and logos.
- Admin Job Posting: Recruiters can publish jobs tied to one of their registered companies.
- Applicant Review: Recruiters can view applicants per job and update application status.
- Responsive UI: The frontend includes responsive layouts for browsing, filters, forms, and tables.
- React.js: Frontend UI rendering
- Vite: Frontend development server and build tool
- Tailwind CSS: Utility-first styling
- Redux Toolkit: Global state management and persisted auth state
- React Router: Client-side routing
- Radix UI: UI primitives, toasts, and icons
- Axios: API communication
- Node.js: Server runtime
- Express.js: REST API and middleware handling
- MongoDB: Database and schema modeling
- JWT: Authentication and protected route handling
- Multer: Multipart file upload handling
- Cloudinary: Company logo, resume, and profile image uploads
- Users: Registration, login, logout, profile updates, resume uploads, and role handling
- Companies: Recruiter-owned company creation, editing, and logo management
- Jobs: Job posting, job listing retrieval, single-job view, and recruiter-specific job listings
- Applications: Apply flow, applied-job history, applicant listing, and status updates
- Middleware: JWT cookie authentication and upload middleware
- Client State: Separate Redux slices for auth, jobs, companies, and applications
To run this project locally, set up both the backend and frontend.
- Node.js 18 or higher
- npm
- A MongoDB connection string
- A Cloudinary account
-
Clone the repository
git clone https://github.com/udayxgoel/ProHire.git cd ProHire -
Install backend dependencies
cd server npm install -
Set up backend environment variables
Create a
.envfile insideserver/and add:PORT=4000 MONGODB_URL=your_mongodb_connection_string JWT_SECRET_KEY=your_jwt_secret CLOUDINARY_NAME=your_cloudinary_cloud_name CLOUDINARY_API_KEY=your_cloudinary_api_key CLOUDINARY_API_SECRET=your_cloudinary_api_secret
-
Install frontend dependencies
cd ../client npm install -
Configure the frontend API base URLs
The current frontend uses hardcoded deployed API URLs in client/src/utils/api.js. For local development, change them to:
export const USER_API_END_POINT = "http://localhost:4000/api/v1/user"; export const JOB_API_END_POINT = "http://localhost:4000/api/v1/job"; export const APPLICATION_API_END_POINT = "http://localhost:4000/api/v1/application"; export const COMPANY_API_END_POINT = "http://localhost:4000/api/v1/company";
-
Start the backend
cd ../server npm start -
Start the frontend
In a new terminal:
cd client npm run dev -
Open the app
Visit http://localhost:5173
- Backend server:
cd server && npm start - Frontend dev server:
cd client && npm run dev - Frontend production build:
cd client && npm run build
/- home page with hero search and recent jobs/login- login page/signup- registration page/jobs- jobs listing page/browse- browse/search page/description/:id- single job details page/profile- student profile and applied jobs/admin/companies- recruiter companies dashboard/admin/companies/create- create a company/admin/companies/:id- update company details/admin/jobs- recruiter job management/admin/jobs/create- create a new job/admin/jobs/:id/applicants- view applicants for a job
POST /api/v1/user/register- register a user with optional profile image uploadPOST /api/v1/user/login- log in and receive auth cookieGET /api/v1/user/logout- clear auth cookiePOST /api/v1/user/profile/update- update profile, skills, and resumePOST /api/v1/company/register- create a recruiter-owned companyGET /api/v1/company/get- get recruiter companiesGET /api/v1/company/get/:id- get company details by idPUT /api/v1/company/update/:id- update company details and logoPOST /api/v1/job/post- create a new jobGET /api/v1/job/get- fetch jobs, with optional keyword searchGET /api/v1/job/get/:id- fetch a single jobGET /api/v1/job/getadminjobs- fetch jobs created by the logged-in recruiterGET /api/v1/application/apply/:id- apply to a jobGET /api/v1/application/get- fetch jobs applied by the logged-in studentGET /api/v1/application/:id/applicants- fetch applicants for a recruiter jobPOST /api/v1/application/status/:id/update- update an application status
When a student uses the app, they can:
- create an account as
student - search and filter open jobs
- open a job detail page and apply
- update profile details, skills, and resume
- review applied jobs from the profile page
When a recruiter uses the app, they can:
- create an account as
recruiter - register a company
- update company details and upload a logo
- post jobs linked to that company
- review applicants and update their status
ProHire/
client/ # React + Vite frontend
server/ # Express + MongoDB backend
Contributions are welcome.
- Fork the repository
- Create a branch:
git checkout -b feature/your-feature-name - Make your changes
- Commit:
git commit -m "Add your feature" - Push:
git push origin feature/your-feature-name - Open a pull request
If you find a bug or setup issue, please open an issue with:
- a clear title
- a short description of the problem
- steps to reproduce
- screenshots or logs if relevant
- your environment details
This project is currently licensed under ISC, as defined in package.json
