ReferHub is a FullStack Candidate Referral Management System inspired by platforms like Worko. It allows authenticated users to refer candidates, upload resumes, track candidate status, and manage candidate data through a clean dashboard interface.
-
Frontend (Vercel): π ReferHub App
-
Backend (Render): π ReferHub-Backend
β οΈ Note: The backend is deployed on Render, which may take a few seconds to wake up on the first request (cold start). A global loading screen is implemented in the frontend to handle this smoothly.
- React (Vite)
- Tailwind CSS
- React Router DOM
- Axios
- JWT Authentication
- Node.js
- Express.js
- MongoDB (Mongoose)
- JWT (Authentication & Authorization)
- Multer (file handling)
- Cloudinary (resume storage)
- Frontend: Vercel
- Backend: Render
- Database: MongoDB Atlas
- File Storage: Cloudinary
- User registration & login
- JWT-based authentication
- Protected routes
- Persistent login using localStorage
-
View all referred candidates
-
Search candidates by name or job title
-
Filter candidates by status
-
Inline status update:
- Pending β Reviewed β Hired
- Modal-based referral form
- Upload resume (PDF only)
- User-friendly resume upload UI
- Resume stored securely on Cloudinary
-
Click on a candidate card to:
- View full candidate details
- Edit candidate information
- Delete candidate
- Open resume PDF in browser
- Global loading screen (handles backend cold start)
- Clean layout with Navbar & Footer
- Modal-based workflows
- Proper error & loading states
ReferHub/
β
βββ backend/
β βββ src/
β β βββ config/
β β β βββ db.js
β β β βββ cloudinary.js
β β βββ controllers/
β β βββ routes/
β β βββ middleware/
β β βββ utils/
β β βββ server.js
β βββ README.md
β
βββ frontend/
β βββ src/
β β βββ api/
β β βββ components/
β β βββ context/
β β βββ layouts/
β β βββ pages/
β β βββ routes/
β β βββ styles/
β βββ README.md
β
βββ README.md
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/register |
Register a new user |
| POST | /api/auth/login |
Login user |
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/candidates |
Refer a new candidate |
| GET | /api/candidates |
Get all candidates |
| PUT | /api/candidates/:id |
Update candidate details |
| PUT | /api/candidates/:id/status |
Update candidate status |
| DELETE | /api/candidates/:id |
Delete candidate |
All candidate APIs are protected using JWT middleware.
PORT=3000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_jwt_secret
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secretVITE_BACKEND_URL=http://localhost:3000cd backend
npm install
npm run devBackend runs on:
http://localhost:3000
cd frontend
npm install
npm run devFrontend runs on:
http://localhost:5173
- Modal-based candidate management instead of route-based pages for faster UX
- Client-side filtering & search for responsiveness
- Separate status update endpoint for clean API design
- Cloudinary for resumes to avoid filesystem issues on deployment
- Central Axios instance with JWT interceptor
- Global loading screen to handle Render cold starts gracefully
- Backend APIs tested using Postman
- Authentication flow manually tested via browser & Network tab
- Frontend state and API integration tested end-to-end
β All required features implemented
β Bonus features included (JWT, Cloudinary, deployment)
β Clean UI & UX
β Production-ready architecture