An enterprise-grade, secure, full-stack Applicant Tracking System (ATS) and Candidate Portal built with Spring Boot 3.x and React 18. The application implements robust Role-Based Access Control (RBAC) secured via JSON Web Tokens (JWT) and Spring Security, persisting candidate and authentication data in a PostgreSQL database.
- Secure Authentication: Sign up and Login flow powered by JWT.
- Spring Security integration: Robust stateless session management with JWT filters.
- Role-Based Access Control (RBAC): Distinct permissions for Candidates (
ROLE_USER) and Recruiters/Administrators (ROLE_ADMIN).
- Job Application Wizard: Dynamic creation of Candidate profiles including:
- Education History: Multiple school, degree, and GPA records.
- Work Experience: Multiple company, position, and duration entries.
- Training & Certifications: Course details, institutions, and year of completion.
- My Applications: Interactive board to view, update, or delete submitted applications.
- Profile Page: Live view of authenticated user details.
- Advanced Search Engine: Search applicants by Name, Position Applied, or Education Level in real-time.
- Comprehensive Profiles: View complete resumes of applicants (including work experience, education, and certificates).
- Centralized Management: Full administrative read access to all registered candidate data.
- Core Framework: Spring Boot 3.1.0 (Java 17)
- Security: Spring Security & JJWT (JSON Web Token)
- Database: PostgreSQL (JDBC, JPA/Hibernate)
- ORM & Persistence: Spring Data JPA
- Validation: Jakarta Bean Validation
- Library: React 18.2.0 (Functional Components & Hooks)
- Routing: React Router DOM v6
- Styling: Bootstrap 4.6.2 & FontAwesome 6.6.0
- HTTP Client: Axios (configured with interceptors/auth-headers)
- Validation: React Validation & Validator
springboot-react-jwt/
├── backend/ # Spring Boot REST API
│ ├── src/ # Java backend source code
│ ├── pom.xml # Maven project configuration
│ └── mvnw # Maven Wrapper
└── frontend/ # React Single Page Application (SPA)
├── src/ # React components, services, and routing
└── package.json # npm scripts and packages
- Java JDK 17 or higher
- Node.js (v16+) and npm or Yarn
- PostgreSQL database service
Create a PostgreSQL database named postgres (or as configured in your local application.properties):
CREATE DATABASE postgres;- Navigate to the backend directory:
cd backend - Open
src/main/resources/application.propertiesand verify your PostgreSQL credentials:spring.datasource.url=jdbc:postgresql://localhost:5432/postgres spring.datasource.username=postgres spring.datasource.password=your_db_password
- Run the Spring Boot application using Maven:
./mvnw spring-boot:run
- On startup, Hibernate will automatically create the required database tables.
- Initialize the default user roles by running the following SQL commands (which are also defined in
backend/src/main/resources/insert.sql):INSERT INTO roles(name) VALUES('ROLE_USER'); INSERT INTO roles(name) VALUES('ROLE_MODERATOR'); INSERT INTO roles(name) VALUES('ROLE_ADMIN');
- Navigate to the frontend directory:
cd ../frontend - Install dependencies:
npm install
- Start the development server (configured to run on port
8081):npm start
- Open your browser and navigate to
http://localhost:8081.
| Method | Endpoint | Description | Access |
|---|---|---|---|
POST |
/api/auth/signup |
Register a new user | Public |
POST |
/api/auth/signin |
Login & receive JWT Token | Public |
| Method | Endpoint | Description | Access |
|---|---|---|---|
GET |
/api/candidates |
Fetch candidates (All for Admin, User's own for Candidate) | Candidate, Admin |
GET |
/api/candidates/{id} |
Get candidate details by ID | Candidate (own), Admin |
POST |
/api/candidates |
Create new candidate application profile | Candidate |
PUT |
/api/candidates |
Update candidate application profile | Candidate |
GET |
/api/candidates/search |
Search candidates by name, position, or education | Admin |
POST |
/api/candidates/{id}/education |
Add education to candidate profile | Candidate |
POST |
/api/candidates/{id}/workExperience |
Add work experience to candidate profile | Candidate |
POST |
/api/candidates/{id}/training |
Add training to candidate profile | Candidate |
Contributions, issues, and feature requests are welcome! Feel free to check the issues page.
This project is licensed under the MIT License.