A MERN stack job portal connecting job seekers with employers through job browsing, applications, and postings.
JobHunt is a comprehensive job portal platform that streamlines the hiring process. It serves as a bridge between talented job seekers and companies looking to hire. The platform enables:
- Job Seekers to discover opportunities, build profiles, and manage job applications
- Companies to post job openings, track applicants, and manage the hiring workflow
- Admins to oversee platform operations and manage all stakeholders
Built with modern web technologies, JobHunt provides a seamless user experience with real-time updates, file uploads for resumes and company logos, and a responsive design that works across all devices.
- Features
- Tech Stack
- Project Structure
- Backend Setup
- Frontend Setup
- Running the Application
- API Endpoints
- User Types
- Contributing
- Author
- User Authentication: Secure sign up and login with JWT authentication
- Profile Management: Update user profile with profile picture, bio, and resume
- Job Browsing: Browse and filter jobs by category, location, and experience level
- Job Search: Search for jobs using keywords
- Job Applications: Apply for jobs and track application status
- Application History: View all applied jobs and their current status
- Company Registration: Create and manage company accounts
- Job Posting: Post new job openings with detailed descriptions
- Application Management: View and manage all job applications
- Applicant Tracking: Track applicants and update application status
- Company Management: Manage all companies on the platform
- Job Oversight: Monitor job postings and applications
- Node.js - JavaScript runtime
- Express.js - Web framework
- MongoDB - NoSQL database
- Mongoose - MongoDB object modeling
- JWT - JSON Web Tokens for authentication
- Bcryptjs - Password hashing
- Cloudinary - Image hosting and management
- Multer - File upload middleware
- CORS - Cross-origin resource sharing
- Nodemon - Development server auto-reload
- React 19 - UI library
- Vite - Build tool and development server
- Redux Toolkit - State management
- React Router - Client-side routing
- Tailwind CSS - Utility-first CSS framework
- Shadcn/UI - Component library
- Axios - HTTP client
- React Icons - Icon library
- Sonner - Toast notifications
JobHunt---JobPortal/
βββ backend/
β βββ config/
β β βββ cloudinary.js # Cloudinary configuration
β β βββ dataUri.js # Data URI utility for image handling
β β βββ db.js # MongoDB connection
β βββ controllers/
β β βββ authController.js # Authentication logic
β β βββ userControllers.js # User operations
β β βββ companyController.js # Company operations
β β βββ jobControllers.js # Job operations
β β βββ applicationControllers.js # Application handling
β βββ middlewares/
β β βββ isAuth.middleware.js # JWT verification
β β βββ multer.js # File upload setup
β βββ models/
β β βββ userModels.js # User schema
β β βββ companyModels.js # Company schema
β β βββ jobModels.js # Job schema
β β βββ applicationModels.js # Application schema
β βββ routes/
β β βββ authRoutes.js # Auth endpoints
β β βββ companyRoutes.js # Company endpoints
β β βββ jobRoutes.js # Job endpoints
β β βββ applicationRoutes.js # Application endpoints
β βββ index.js # Server entry point
β βββ package.json # Backend dependencies
β
βββ frontend/
β βββ public/ # Static assets
β βββ src/
β β βββ components/
β β β βββ Admin/ # Admin components
β β β βββ auth/ # Authentication components
β β β βββ shared/ # Shared components (Navbar, etc.)
β β β βββ ui/ # UI components (buttons, dialogs, etc.)
β β β βββ hooks/ # Custom React hooks
β β β βββ Home.jsx # Home page
β β β βββ Browse.jsx # Job browsing page
β β β βββ Jobs.jsx # Jobs listing
β β β βββ JobDetails.jsx # Job details page
β β β βββ AppliedJobs.jsx # User's applied jobs
β β β βββ Profile.jsx # User profile
β β β βββ Footer.jsx # Footer component
β β βββ redux/
β β β βββ authSlice.js # Auth state management
β β β βββ companySlice.js # Company state management
β β β βββ jobSlice.js # Job state management
β β β βββ store.js # Redux store configuration
β β βββ lib/
β β β βββ utils.js # Utility functions
β β βββ utilis/
β β β βββ constants.js # Application constants
β β βββ App.jsx # Main App component
β β βββ main.jsx # React entry point
β β βββ index.css # Global styles
β β βββ App.css # App styles
β βββ vite.config.js # Vite configuration
β βββ eslint.config.js # ESLint configuration
β βββ components.json # Shadcn component configuration
β βββ package.json # Frontend dependencies
β βββ index.html # HTML template
β
βββ README.md (this file)
- Node.js (v14 or higher)
- MongoDB Atlas account or local MongoDB
- Cloudinary account (for image uploads)
- Navigate to the backend directory:
cd backend- Install dependencies:
npm install- Create a
.envfile in the backend directory:
MONGO_URI=your_mongodb_connection_string
JWT_SECRET=your_jwt_secret_key
CLOUDINARY_NAME=your_cloudinary_name
CLOUDINARY_API_KEY=your_cloudinary_api_key
CLOUDINARY_API_SECRET=your_cloudinary_api_secret
PORT=8000- Start the backend development server:
npm run devThe backend server will run on http://localhost:8000
- Node.js (v14 or higher)
- npm or yarn
- Navigate to the frontend directory:
cd frontend- Install dependencies:
npm install-
The frontend is configured to connect to
http://localhost:8000for API calls. -
Start the frontend development server:
npm run devThe frontend will run on http://localhost:5173
npm run buildThis creates an optimized production build in the dist folder.
You'll need two terminal windows:
Terminal 1 - Backend:
cd backend
npm run devTerminal 2 - Frontend:
cd frontend
npm run devThen open your browser and navigate to http://localhost:5173
POST /register- Register a new userPOST /login- User loginGET /logout- User logoutGET /profile- Get user profile (requires authentication)PUT /profile/update- Update user profile (requires authentication)
GET /- Get all jobsGET /:id- Get job by IDPOST /create- Create a new job (requires authentication)PUT /:id- Update a job (requires authentication)DELETE /:id- Delete a job (requires authentication)
POST /register- Register a new companyGET /- Get all companiesGET /:id- Get company by ID (requires authentication)PUT /:id- Update company (requires authentication)
POST /apply- Apply for a job (requires authentication)GET /- Get all applications (requires authentication)GET /:id- Get application by ID (requires authentication)PUT /:id/status- Update application status (requires authentication)
- Can browse and search for jobs
- Can apply for jobs
- Can manage their profile
- Can view application history
- Can post job openings
- Can manage job postings
- Can view and manage applications
- Can update company profile
- Can manage all companies
- Can oversee all job postings
- Can manage users and applications
Contributions are welcome! Please feel free to submit a Pull Request.
Aditya Tripathi
Happy Job Hunting! π