This is a personal Fullstack Job Portal project built individually using Spring Boot (Java 21), React (Vite), and MySQL. It includes secure authentication with JWT, role-based access control, job posting & applications, resume uploads, real-time messaging, and an Admin Dashboard. Designed and developed from scratch to demonstrate fullstack engineering skills with Spring Boot & React.
- Project Overview
- Why This Project?
- My Role as Developer
- Architecture
- Screenshots
- Key Features
- Challenges Solved
- What I Learned
- Non-Functional Requirements
- Tech Stack
- Setup Instructions
- Continuous Integration & Code Quality
- Roadmap
- Author
- License
This fullstack Job Portal allows seamless interaction between Employers and Job Seekers. Key features include:
π§βπΌ Employers can post, update, and delete job listings, and manage applications.
π¨βπ Job Seekers can browse, search, filter, and apply to jobs with uploaded resumes.
π Secure login, registration, and password management using Spring Security
Passwords are hashed with BCryptPasswordEncoder
JWT-based authentication for stateless sessions
Role-based access control enforced via @PreAuthorize annotations
π¬ Messaging system enabling Employers and Job Seekers to communicate securely based on application status.
π Upload and view resumes, profile pictures, and company logos securely.
- This project is ideal for developers who want to learn how to build a fullstack job portal application using Spring Boot, React, and MySQL.
- It covers authentication with JWT, secure file uploads, real-time messaging, and role-based access, making it a great reference for portfolio projects and enterprise-style applications.
- Designed and implemented RESTful APIs using Spring Boot
- Built a responsive frontend UI using React + Vite + Tailwind CSS
- Configured JWT-based authentication and role-based access using Spring Security
- Designed database schema and relationships in MySQL
- Integrated secure resume and profile image upload features
- Managed CORS, error handling, and environment configurations
Layer | Stack |
---|---|
Frontend | React, Vite, Tailwind CSS, React Icons, React Router, React Toastify, ESLint |
Backend | Java 21, Spring Boot, Spring Data JPA, Spring Security, PMD |
Database | MySQL (local development), MariaDB via SkySQL (CI) |
Tools | Git, GitHub,Maven, Postman, JUnit |
- Login / Register / Forgot Password via email service
- JWT Token based secure authentication
- Role-based access control for Employers, Job Seekers, and Admins
- Logout functionality for all roles
- Employers can message job seekers only after a job application exists
- Admins can message anyone
- Self-messaging and same-role messaging is prohibited
- Read receipts are enabled (users can see if their message was viewed)
- Messages cannot be deleted to ensure platform integrity
- Browse and search all job posts
- Apply to jobs with attached resume
- View and update profile
- Upload resume to profile and during job applications
- View submitted applications
- Post, edit, delete only their own jobs
- View received job applications
- Approve, reject, or delete job applications
- View and update profile
- See all jobs on the portal
- View all jobs, applications, employers, and seekers
- Activate or Deactivate User Accounts
- Delete inappropriate jobs
- Monitor platform activities
- Upload and view resumes (PDF)
- Upload and view profile pictures and company logos
- Integrated JWT and Spring Security securely for role-based access
- Solved CORS issues between frontend and backend during development
- Designed clean RESTful APIs with proper separation of concerns
- Normalized schema for user-job-application relationships
- Maintained secure upload storage for resumes and images
- Implemented Continuous Integration (CI) using GitHub Actions to automate backend builds, tests, and frontend linting
- Building and securing fullstack applications end-to-end
- React state management with Hooks and API integration
- Designing scalable and normalized relational databases
- Implementing security best practices with Spring Security & JWT
- Handling uploads and file storage across the stack
- Structuring clean code and maintaining modularity in large projects
- APIs respond within <200ms for common operations (job search, profile retrieval)
- Supports 2000+ concurrent users with minimal latency.
Load Testing Results (Proof):
- Concurrent Users Tested: 2000
- Total Requests: 2000
- Average Response Time: 18 ms
- Max Response Time: 154 ms
- Std. Dev.: 4.24
- Error %: 0%
- Throughput: 10 requests/sec
- Passwords hashed with BCryptPasswordEncoder
- JWT-based authentication for stateless sessions
- Role-based access enforced via Spring Security
- Secure file uploads (resumes, profile images, company logos)
- Responsive design across desktop, tablet, and mobile
- Accessibility improvements (labels, ARIA roles, contrast)
- REST APIs structured for horizontal scaling
- Indexed queries in MySQL for efficient job searching
- Error handling with descriptive fallback messages
- Auto-recovery on backend restart
- Layered architecture (controllers, services, repositories)
- Static code analysis with PMD & SpotBugs
- Consistent coding conventions and modular structure
- Backend deployable on AWS EC2 or any cloud VM
- Frontend can run on Vercel / Netlify with minimal configuration
- Java 21
- Node.js & npm
- MySQL Server
- Maven
CREATE DATABASE job_portal;
Edit application.properties
:
spring.datasource.url=jdbc:mysql://localhost:3306/job_portal
spring.datasource.username=root
spring.datasource.password=your_password
spring.jpa.hibernate.ddl-auto=update
Run Backend:
./mvnw spring-boot:run
cd frontend
npm install
npm run dev
Configured GitHub Actions to automatically run workflows on every push and pull request.
- Builds the Spring Boot project with Maven
- Runs JUnit tests for backend services
- Connects to SkySQL (MariaDB) for integration tests
- Runs ESLint for linting and formatting checks
- Detects unused variables, accessibility issues, and potential React bugs
- Prevents merging code with style or quality violations
(Run manually in IntelliJ IDEA β not enforced in CI)
- π PMD β Detects code smells, complexity issues, and unused imports
- π SpotBugs β Finds potential runtime bugs, null-pointer risks, and concurrency problems
- π Catch bugs and regressions before deployment
- π¨ Maintain consistent code style across frontend & backend
- β‘ Faster feedback loops with automated tests
- π‘οΈ Higher reliability and maintainability of the codebase
- β Login, Register, Forgot/Reset Password
- β Job Posting and Application Flows
- β MySQL Integration
- β Resume Upload & File Storage
- β Role-Based Messaging System
- β Admin View and Control Features
- β Notifications for Account activations and deactivations by Admin
- β Stats/Analytics
- β UI/UX Polish
- β Frontend deployed on Netlify
- π Backend deployment (Render / Railway / AWS EC2)
Sandun Munasinghe π§ e20259@eng.pdn.ac.lk π§ msandunlakshan2001@gmail.com π GitHub Profile
This project is licensed under the MIT License. See the LICENSE file for details.