๐ JobBoard Platform โ MERN Stack Capstone
A production-ready, full-stack Job Board Platform built with the MERN stack (MongoDB, Express.js, React.js, Node.js). Features JWT authentication, role-based access control, Cloudinary file uploads, real-time status tracking, and a beautiful dark-mode UI.
๐จ๐ผ Employer Dashboard
๐จ๐ป Job Seeker Dashboard
โ
JWT Access + Refresh Tokens
โ
Role-based Authorization (Employer / Job Seeker)
โ
Persistent login with localStorage
โ
Auto token refresh on expiry
โ
Post, edit, delete job listings
โ
Toggle job active/inactive status
โ
View all applicants per job
โ
Update application status (Applied โ Hired)
โ
Dashboard with analytics & charts
โ
Browse, search, filter, and sort jobs
โ
Apply with resume (PDF) + cover letter
โ
Save/unsave jobs
โ
Track application status in real-time
โ
Profile with completion tracker
โ
Dark Mode (system preference + manual toggle)
โ
Loading Skeletons
โ
Toast Notifications
โ
Responsive / Mobile-Friendly
โ
Confirmation Dialogs
โ
Pagination
Layer
Technology
Frontend
React 18, Vite, Tailwind CSS, Axios, React Hook Form, React Hot Toast
Backend
Node.js, Express.js, Mongoose
Database
MongoDB Atlas
Auth
JSON Web Tokens (JWT) + bcryptjs
File Upload
Cloudinary + Multer
Testing
Vitest, React Testing Library
Deployment
Vercel (Client), Render (Server), MongoDB Atlas
job-board-platform/
โโโ client/ # React frontend (Vite)
โ โโโ src/
โ โ โโโ api/ # Axios API functions
โ โ โ โโโ axios.js # Axios instance + interceptors
โ โ โ โโโ auth.js
โ โ โ โโโ jobs.js
โ โ โ โโโ applications.js
โ โ โ โโโ dashboard.js
โ โ โโโ context/ # React Context
โ โ โ โโโ AuthContext.jsx
โ โ โ โโโ ThemeContext.jsx
โ โ โโโ components/ # Reusable UI components
โ โ โ โโโ Navbar.jsx
โ โ โ โโโ Footer.jsx
โ โ โ โโโ JobCard.jsx
โ โ โ โโโ SearchFilters.jsx
โ โ โ โโโ StatsCard.jsx
โ โ โ โโโ StatusBadge.jsx
โ โ โ โโโ Pagination.jsx
โ โ โ โโโ EmptyState.jsx
โ โ โ โโโ ConfirmDialog.jsx
โ โ โ โโโ Spinner.jsx
โ โ โ โโโ ProtectedRoute.jsx
โ โ โ โโโ ErrorBoundary.jsx
โ โ โโโ pages/ # Page components
โ โ โ โโโ Home.jsx
โ โ โ โโโ Login.jsx
โ โ โ โโโ Register.jsx
โ โ โ โโโ Jobs.jsx
โ โ โ โโโ JobDetails.jsx
โ โ โ โโโ CreateJob.jsx
โ โ โ โโโ EditJob.jsx
โ โ โ โโโ Profile.jsx
โ โ โ โโโ MyApplications.jsx
โ โ โ โโโ EmployerDashboard.jsx
โ โ โ โโโ JobSeekerDashboard.jsx
โ โ โ โโโ NotFound.jsx
โ โ โโโ utils/helpers.js # Utility functions
โ โ โโโ tests/ # Test files
โ โ โโโ App.jsx # Router setup
โ โ โโโ main.jsx # Entry point
โ โ โโโ index.css # Global styles
โ โโโ index.html
โ โโโ vite.config.js
โ โโโ tailwind.config.js
โ โโโ package.json
โ
โโโ server/ # Express backend
โ โโโ src/
โ โ โโโ config/
โ โ โ โโโ db.js # MongoDB connection
โ โ โ โโโ cloudinary.js # Cloudinary setup + multer
โ โ โโโ models/
โ โ โ โโโ User.js
โ โ โ โโโ Job.js
โ โ โ โโโ Application.js
โ โ โโโ middleware/
โ โ โ โโโ auth.js # JWT middleware
โ โ โ โโโ errorHandler.js
โ โ โโโ controllers/
โ โ โ โโโ authController.js
โ โ โ โโโ jobController.js
โ โ โ โโโ applicationController.js
โ โ โ โโโ dashboardController.js
โ โ โโโ routes/
โ โ โ โโโ auth.js
โ โ โ โโโ jobs.js
โ โ โ โโโ applications.js
โ โ โ โโโ dashboard.js
โ โ โโโ utils/
โ โ โโโ generateToken.js
โ โ โโโ apiFeatures.js
โ โโโ server.js
โ โโโ package.json
โ
โโโ package.json # Root (concurrently)
โโโ .env.example
โโโ .gitignore
โโโ README.md
๐ Installation & Setup
Node.js 18+
MongoDB Atlas account
Cloudinary account
git clone https://github.com/yourusername/job-board-platform.git
cd job-board-platform
2. Install all dependencies
3. Configure environment variables
Server โ copy and fill in server/.env:
cp server/.env.example server/.env
Client โ copy and fill in client/.env:
cp client/.env.example client/.env
4. Run in development mode
This starts both the server (http://localhost:5000) and client (http://localhost:5173) concurrently.
โ๏ธ Environment Variables
Variable
Description
NODE_ENV
development or production
PORT
Server port (default: 5000)
MONGO_URI
MongoDB Atlas connection string
JWT_SECRET
Secret for access tokens
JWT_REFRESH_SECRET
Secret for refresh tokens
JWT_EXPIRE
Access token expiry (e.g., 1h)
JWT_REFRESH_EXPIRE
Refresh token expiry (e.g., 7d)
CLOUDINARY_CLOUD_NAME
Your Cloudinary cloud name
CLOUDINARY_API_KEY
Cloudinary API key
CLOUDINARY_API_SECRET
Cloudinary API secret
CLIENT_URL
Frontend URL for CORS
Variable
Description
VITE_API_URL
Backend API base URL
Method
Endpoint
Access
Description
POST
/api/auth/register
Public
Register new user
POST
/api/auth/login
Public
Login user
POST
/api/auth/refresh
Public
Refresh access token
GET
/api/auth/profile
Private
Get current user profile
PUT
/api/auth/profile
Private
Update profile + uploads
PUT
/api/auth/change-password
Private
Change password
PUT
/api/auth/saved-jobs/:jobId
Job Seeker
Toggle save job
Method
Endpoint
Access
Description
GET
/api/jobs
Public
List jobs (search/filter/sort/paginate)
GET
/api/jobs/:id
Public
Get single job
POST
/api/jobs
Employer
Create job
PUT
/api/jobs/:id
Employer (owner)
Update job
DELETE
/api/jobs/:id
Employer (owner)
Delete job
GET
/api/jobs/employer/my-jobs
Employer
Get own jobs
PATCH
/api/jobs/:id/toggle
Employer (owner)
Toggle active status
Method
Endpoint
Access
Description
POST
/api/applications
Job Seeker
Apply with resume
GET
/api/applications
Private
Get applications (role-based)
GET
/api/applications/:id
Private
Get single application
PUT
/api/applications/:id
Employer
Update status
DELETE
/api/applications/:id
Job Seeker
Withdraw application
Method
Endpoint
Access
Description
GET
/api/dashboard/employer
Employer
Full employer analytics
GET
/api/dashboard/jobseeker
Job Seeker
Job seeker stats
cd client
npm test # Run tests in watch mode
npm run test:ui # Open Vitest UI
cd client && npm run test:coverage
Push to GitHub
Import project in vercel.com
Set Root Directory: client
Add environment variable: VITE_API_URL=https://your-api.onrender.com/api
Deploy!
Create a new Web Service on render.com
Set Root Directory: server
Build Command: npm install
Start Command: node server.js
Add all environment variables from server/.env
Deploy!
Database โ MongoDB Atlas
Create cluster on mongodb.com/atlas
Whitelist 0.0.0.0/0 for Render access
Copy connection string to MONGO_URI
MIT License ยฉ 2024
Built with โค๏ธ using the MERN Stack