Skip to content

udayxgoel/ProHire

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ProHire

ProHire Preview

Overview

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 student and recruiter
  • 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, and rejected

Features

  • 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.

Tech Stack

  • 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

Core Modules

  • 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

Getting Started

To run this project locally, set up both the backend and frontend.

Prerequisites

  • Node.js 18 or higher
  • npm
  • A MongoDB connection string
  • A Cloudinary account

Installation

  1. Clone the repository

    git clone https://github.com/udayxgoel/ProHire.git
    cd ProHire
  2. Install backend dependencies

    cd server
    npm install
  3. Set up backend environment variables

    Create a .env file inside server/ 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
  4. Install frontend dependencies

    cd ../client
    npm install
  5. 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";
  6. Start the backend

    cd ../server
    npm start
  7. Start the frontend

    In a new terminal:

    cd client
    npm run dev
  8. Open the app

    Visit http://localhost:5173

Usage

Running the App

  • Backend server: cd server && npm start
  • Frontend dev server: cd client && npm run dev
  • Frontend production build: cd client && npm run build

Main Frontend Routes

  • / - 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

Main Backend Routes

  • POST /api/v1/user/register - register a user with optional profile image upload
  • POST /api/v1/user/login - log in and receive auth cookie
  • GET /api/v1/user/logout - clear auth cookie
  • POST /api/v1/user/profile/update - update profile, skills, and resume
  • POST /api/v1/company/register - create a recruiter-owned company
  • GET /api/v1/company/get - get recruiter companies
  • GET /api/v1/company/get/:id - get company details by id
  • PUT /api/v1/company/update/:id - update company details and logo
  • POST /api/v1/job/post - create a new job
  • GET /api/v1/job/get - fetch jobs, with optional keyword search
  • GET /api/v1/job/get/:id - fetch a single job
  • GET /api/v1/job/getadminjobs - fetch jobs created by the logged-in recruiter
  • GET /api/v1/application/apply/:id - apply to a job
  • GET /api/v1/application/get - fetch jobs applied by the logged-in student
  • GET /api/v1/application/:id/applicants - fetch applicants for a recruiter job
  • POST /api/v1/application/status/:id/update - update an application status

Candidate Flow

When a student uses the app, they can:

  1. create an account as student
  2. search and filter open jobs
  3. open a job detail page and apply
  4. update profile details, skills, and resume
  5. review applied jobs from the profile page

Recruiter Flow

When a recruiter uses the app, they can:

  1. create an account as recruiter
  2. register a company
  3. update company details and upload a logo
  4. post jobs linked to that company
  5. review applicants and update their status

Project Structure

ProHire/
  client/   # React + Vite frontend
  server/   # Express + MongoDB backend

Contributing

Contributions are welcome.

  1. Fork the repository
  2. Create a branch: git checkout -b feature/your-feature-name
  3. Make your changes
  4. Commit: git commit -m "Add your feature"
  5. Push: git push origin feature/your-feature-name
  6. Open a pull request

Issues

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

License

This project is currently licensed under ISC, as defined in package.json

About

ProHire is a full-stack job portal web application where job seekers can search and apply for jobs, and recruiters can post and manage job listings.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors