A modern full-stack job portal connecting students with companies for career opportunities in the development industry.
- π User Authentication - Secure signup/login with JWT tokens
- πΌ Job Search - Browse and filter available job opportunities
- π Easy Applications - Apply to jobs with cover letters
- π CV Management - Upload and manage resumes
- π€ Profile Management - Create and update professional profiles
- οΏ½ Application Tracking - Monitor application status in real-time
- π Real-time Notifications - Get instant updates via WebSocket
- π’ Company Portal - Dedicated dashboard for recruiters
- πΌ Job Posting - Create and manage job listings
- οΏ½ Dashboard Analytics - Track active jobs, applications, and metrics
- π₯ Candidate Management - View applicant profiles and resumes
- β Application Processing - Shortlist, reject, or hire candidates
- οΏ½ Email Notifications - Automated welcome emails
- π Real-time Updates - Instant notifications for new applications
- π¨ Modern UI - Beautiful, responsive design with Tailwind CSS
- π Dark Mode Support - Eye-friendly interface options
- π± Mobile Responsive - Works seamlessly on all devices
- π Real-time Updates - WebSocket-powered notifications
- π Secure - JWT authentication and bcrypt password hashing
- β‘ Fast - Optimized performance with React 18 and Vite
- React 18 - Modern React with hooks
- Vite - Lightning-fast build tool
- Tailwind CSS - Utility-first CSS framework
- Zustand - Lightweight state management
- React Router v6 - Client-side routing
- Axios - HTTP client with interceptors
- Socket.io-client - Real-time WebSocket communication
- Lucide React - Beautiful icon library
- Node.js & Express - Server framework
- Prisma ORM - Type-safe database client
- PostgreSQL - Relational database
- JWT - Secure authentication tokens
- bcryptjs - Password hashing
- Socket.io - WebSocket server
- Nodemailer - Email sending
- Cookie-parser - Cookie handling
- CORS - Cross-origin resource sharing
- GitHub Actions - CI/CD pipeline
- ESLint - Code linting
- Prettier - Code formatting
- Node.js 18+ installed
- PostgreSQL database (local or hosted)
- Git installed
- Gmail account (for email notifications)
- Clone the repository
git clone https://github.com/YOUR_USERNAME/JobStack.git
cd JobStack- Setup Backend
cd Server
npm install
# Create .env file
cp .env.example .env
# Edit .env with your configuration:
# - DATABASE_URL="postgresql://user:password@localhost:5432/jobstack"
# - JWT_SECRET="your-secret-key"
# - EMAIL_USER="your-email@gmail.com"
# - EMAIL_PASS="your-app-password"
# Run database migrations
npx prisma generate
npx prisma migrate dev
# Start the server
npm run dev- Setup Frontend
cd Client
npm install
# Create .env file (optional)
cp .env.example .env
# Install socket.io-client for real-time notifications
npm install socket.io-client clsx tailwind-merge
# Start the development server
npm run dev- Access the application
- Frontend: http://localhost:5173
- Backend API: http://localhost:3000
- Health Check: http://localhost:3000/health
JobStack/
βββ Client/ # Frontend React application
β βββ src/
β β βββ Api/ # API integration layer
β β β βββ api.js # Axios instance & API endpoints
β β β βββ hooks.js # Custom React hooks
β β β βββ store.js # Zustand state management
β β β βββ socket.js # WebSocket client
β β βββ components/ # Reusable components
β β β βββ dashboard/ # Dashboard components
β β β β βββ DashboardLayout.jsx
β β β β βββ Sidebar.jsx
β β β β βββ Topbar.jsx
β β β βββ grid.jsx # UI components
β β βββ page/ # Page components
β β β βββ Landing.jsx # Landing page
β β β βββ Login.jsx # Login page
β β β βββ Signup.jsx # Registration
β β β βββ StudentDash.jsx # Student dashboard
β β β βββ CompanyDash.jsx # Company dashboard
β β β βββ Jobs.jsx # Job listings
β β β βββ application.jsx # Applications view
β β β βββ Userprofile.jsx # User profile
β β β βββ ...
β β βββ App.jsx # Main app component
β β βββ main.jsx # Entry point
β βββ public/ # Static assets
β βββ .env.example # Environment variables template
β βββ tailwind.config.js # Tailwind configuration
β βββ vite.config.js # Vite configuration
β βββ package.json
β
βββ Server/ # Backend Node.js application
β βββ controllers/ # Route controllers
β β βββ Auth/ # Authentication controllers
β β βββ Company_Dashboard/ # Company-specific controllers
β β β βββ job.controllers.js
β β β βββ application.controllers.js
β β β βββ profile.controllers.js
β β βββ User_Dashboard/ # User-specific controllers
β β β βββ application.controllers.js
β β β βββ profile.controllers.js
β β β βββ cv.controllers.js
β β βββ Jobs/ # Job-related controllers
β βββ routes/ # API routes
β β βββ Auth/ # Authentication routes
β β βββ Dashboard/ # Dashboard routes
β β βββ Jobs/ # Job routes
β β βββ mainRoute.js # Main router
β βββ middlewares/ # Express middlewares
β β βββ auth.Middleware.js # JWT authentication
β β βββ upload.Middleware.js # File upload handling
β βββ prisma/ # Database schema & migrations
β β βββ schema.prisma # Prisma schema
β β βββ migrations/ # Database migrations
β βββ utils/ # Utility functions
β β βββ email.js # Email configuration
β β βββ sendEmail.js # Email sending utility
β β βββ validator.js # Input validation
β βββ db/ # Database configuration
β β βββ config.js # Prisma client
β βββ websocket.js # Socket.io configuration
β βββ server.js # Express server entry point
β βββ .env.example # Environment variables template
β βββ package.json
β
βββ .github/
βββ workflows/ # CI/CD pipelines
βββ ci.yml # GitHub Actions workflow
- User - Student accounts with profile information
- Company - Company accounts with organization details
- Job - Job postings created by companies
- Applications - Job applications from users
- Profile_user - Extended user profile information
- Profile_companies - Extended company profile information
- Document - User uploaded CVs and resumes
- College - College/University information
POST /api/auth/signup/user- User registrationPOST /api/auth/signup/company- Company registrationPOST /api/auth/login/user- User loginPOST /api/auth/login/company- Company login
GET /api/jobs- Get all jobsGET /api/jobs/:id- Get job by ID
GET /api/User_dashboard/profile- Get user profilePOST /api/User_dashboard/profile- Update user profilePOST /api/User_dashboard/cv- Upload CVPOST /api/User_dashboard/apply/:jobId- Apply to jobGET /api/User_dashboard/applications- Get user applications
GET /api/Company_dashboard/overview- Get company overviewPOST /api/Company_dashboard/post_job- Create job postingGET /api/Company_dashboard/jobs- Get company jobsGET /api/Company_dashboard/applications- Get all applicationsPUT /api/Company_dashboard/applications/:id/status- Update application statusGET /api/Company_dashboard/profile- Get company profilePOST /api/Company_dashboard/profile- Update company profile
This project includes automated CI pipeline that:
- β Builds both frontend and backend
- β Runs linting checks
- β Executes tests
- β Verifies deployment readiness
- β Uploads build artifacts
Pipeline runs on every push and pull request to main/master/develop branches.
The application uses Socket.io for real-time notifications:
- Automatic connection on user login
- JWT-based authentication for WebSocket
- Real-time job posting notifications
- Application status updates
- Browser notifications support
// Client automatically connects on login
useNotifications(); // Custom hook handles connection
// Server sends notifications
notifyUser(userId, {
title: "New Job Posted",
message: "Check out the latest opportunities!",
createdAt: new Date(),
});Automated emails are sent for:
- Welcome emails on signup (both students and companies)
- Job application confirmations
- Application status updates
- Password reset (if implemented)
# Frontend tests
cd Client
npm test
# Backend tests
cd Server
npm test# Database
DATABASE_URL="postgresql://user:password@localhost:5432/jobstack"
# JWT
JWT_SECRET="your-super-secret-jwt-key"
# Server
PORT=3000
NODE_ENV=development
# Email (Gmail)
EMAIL_USER="your-email@gmail.com"
EMAIL_PASS="your-app-password" # Use App Password, not regular password
# Frontend URL (for CORS)
FRONTEND_URL="http://localhost:5173"# API URL
VITE_API_URL="http://localhost:3000/api"
# WebSocket URL
VITE_SOCKET_URL="http://localhost:3000"- Build the project:
npm run build - Deploy the
distfolder - Set environment variables in your hosting platform
- Set up PostgreSQL database
- Configure environment variables
- Run migrations:
npx prisma migrate deploy - Deploy the server
- JWT-based authentication
- Bcrypt password hashing (10 rounds)
- Role-based access control (RBAC)
- Protected routes with middleware
- CORS configuration
- Cookie-based session management
- Input validation and sanitization
- Student Dashboard: Track applications, manage profile, upload CV
- Company Dashboard: Post jobs, view applications, hire candidates
- Analytics: Real-time metrics and statistics
- Responsive Design: Mobile-friendly interface
- Easy Apply: One-click application with cover letter
- Status Tracking: PENDING β SHORTLISTED β HIRED/REJECTED
- Resume Viewing: Companies can view candidate resumes
- Bulk Actions: Mark all as read, clear notifications
- Create Jobs: Post new opportunities
- Edit Jobs: Update job details
- Delete Jobs: Remove listings
- Job Filters: Search and filter by criteria
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- None at the moment. Please report issues on GitHub.
This project is licensed under the MIT License - see the LICENSE file for details.
- Krishna Gehlot - @krishnagehlot
- Built with β€οΈ using React and Node.js
- UI inspired by modern job portals like LinkedIn and Indeed
- Icons by Lucide Icons
- Animations and UI components inspired by Aceternity UI
For support, email krishnagehlot@example.com or open an issue on GitHub.
- Add advanced search filters
- Implement chat system between companies and candidates
- Add video interview scheduling
- Resume parsing with AI
- Job recommendations based on user profile
- Mobile app (React Native)
- Advanced analytics dashboard
- Multi-language support
Made with π by Krishna Gehlot