Jobternify is a MERN stack app for posting jobs/internships, applying with resumes, and managing applications with role-based access (user/admin). Frontend runs on Vite/React with Tailwind, backend on Express/MongoDB with JWT auth.
- Frontend: React (Vite), React Router, Axios, Tailwind CSS
- Backend: Node.js, Express.js, MongoDB (Mongoose), JWT, Cloudinary for resume uploads
- Deployment: Frontend on Vercel, Backend on Render
- JWT authentication with role-based routes (admin/user)
- Job listings, details, and applications with status workflow
- Separate dashboards for users and admins
- Resume upload to Cloudinary (PDF/DOC/DOCX, 5MB limit)
- Admin analytics: totals, status distribution, applications per job
- Node.js 18+
- MongoDB URI
- Cloudinary account (for resume uploads)
Create a .env in server/:
PORT=5000
MONGO_URI=your_mongo_uri
JWT_SECRET=change-me
CLIENT_ORIGIN=http://localhost:5173
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
For frontend, create /.env (root):
VITE_API_BASE_URL=http://localhost:5000/api
# backend
cd server
npm install
npm run dev
# frontend (new shell)
cd ..
npm install
npm run devFrontend runs at http://localhost:5173, backend at http://localhost:5000.
- Auth:
POST /api/auth/signup,POST /api/auth/login - Jobs:
GET /api/jobs,POST /api/jobs(admin),PUT /api/jobs/:id(admin),DELETE /api/jobs/:id(admin) - Applications:
POST /api/applications,GET /api/applications/me,GET /api/applications(admin),PUT /api/applications/:id/status(admin),POST /api/applications/upload(auth),GET /api/applications/analytics(admin)
- Path:
server/ - Build Command:
cd server && npm install - Start Command:
cd server && npm start - Env Vars:
PORT=10000,MONGO_URI,JWT_SECRET,CLIENT_ORIGIN(Vercel URL),CLOUDINARY_* - Optional: use
render.yamlinserver/for blueprint deploy.
- Framework: Vite
- Build Command:
npm run build - Output Dir:
dist - Env Vars:
VITE_API_BASE_URL=https://<your-render-app>.onrender.com/api - Set
NODE_VERSION=18if needed.
- Axios uses
VITE_API_BASE_URL; defaults to/apifor same-origin setups. - Resume uploads are limited to 5MB and PDF/DOC/DOCX. Update
server/src/middleware/upload.jsto change limits. - Ensure admin role is assigned in the database for admin access.
- Basic manual verification: signup/login, create job (admin), apply (user), view dashboards, update statuses, check analytics.
MIT