A modern, full-stack job board application built with Spring Boot (backend) and React + TypeScript (frontend), featuring comprehensive job management, user authentication, company profiles, and resume handling.
- JWT-based authentication with access and refresh tokens
- Role-based access control (Admin, HR, User)
- Permission management system
- Secure password handling
- Create, update, and delete job postings
- Advanced job search and filtering
- Job categories and skill requirements
- Application tracking and management
- Company profiles with logo upload
- Company job listings
- Company details and information
- Resume upload and management
- Job application tracking
- Application status updates
- CV/Resume file handling
- User registration and profile management
- Admin dashboard for user management
- User activity tracking
- Comprehensive admin panel
- Statistics and analytics
- System management tools
- Data visualization
- Framework: Spring Boot 3.5.4
- Language: Java 21
- Database: MySQL 5.7
- Security: Spring Security + JWT
- Documentation: OpenAPI/Swagger
- Build Tool: Maven
- Template Engine: Thymeleaf
- Framework: React 18.2.0
- Language: TypeScript
- UI Library: Ant Design (antd) 5.13.1
- State Management: Redux Toolkit
- Build Tool: Vite
- HTTP Client: Axios
- Styling: SCSS Modules
- Containerization: Docker & Docker Compose
- Web Server: Nginx
- Database: MySQL
- File Storage: Local file system
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β β β β
β React SPA ββββββ Nginx βββββΊβ Spring Boot β
β (Frontend) β β (Reverse Proxy)β β (Backend) β
β β β β β β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β
β
βββββββββββββββββββ
β β
β MySQL DB β
β β
βββββββββββββββββββ
- Java 21 or higher
- Node.js 18 or higher
- Maven 3.6+
- Docker and Docker Compose
- MySQL 5.7+ (for local development)
-
Clone the repository
git clone https://github.com/nvminh162/jobhunter-app.git cd jobhunter-app -
Setup MySQL Database
# Create database mysql -u root -p CREATE DATABASE nvminh162_jobhunter;
-
Configure Backend
cd jobhunter-backend # Update application.properties with your database credentials cp src/main/resources/application.properties.example src/main/resources/application.properties
-
Run Backend
# Using Maven ./mvnw spring-boot:run # Or using IDE # Import project and run JobhunterBackendApplication.java
Backend will be available at:
http://localhost:8080
-
Install Dependencies
cd jobhunter-frontend npm install -
Configure Environment
# Copy environment file cp .env.development.example .env.development -
Run Frontend
npm run dev
Frontend will be available at:
http://localhost:5173
-
Build and Deploy
# Build frontend assets cd jobhunter-frontend npm install npm run build # Deploy with Docker Compose cd ../build-docker docker-compose up -d
-
Access Application
- Frontend:
http://localhost(Port 80) - Backend API:
http://localhost:8080 - Database:
localhost:3307
- Frontend:
| Service | Port | Description |
|---|---|---|
| nginx | 80, 443 | Web server serving React app |
| backend-spring | 8080 | Spring Boot REST API |
| db-mysql | 3307 | MySQL database |
../jobhunter-frontend/distβ/usr/share/nginx/html./nginx/default.confβ/etc/nginx/conf.d/default.conf../jobhunter-storageβ Application file storage
POST /api/v1/auth/login # User login
POST /api/v1/auth/register # User registration
POST /api/v1/auth/refresh # Refresh access token
POST /api/v1/auth/logout # User logout
GET /api/v1/jobs # Get all jobs
POST /api/v1/jobs # Create new job
GET /api/v1/jobs/{id} # Get job by ID
PUT /api/v1/jobs/{id} # Update job
DELETE /api/v1/jobs/{id} # Delete job
GET /api/v1/companies # Get all companies
POST /api/v1/companies # Create company
GET /api/v1/companies/{id} # Get company details
PUT /api/v1/companies/{id} # Update company
DELETE /api/v1/companies/{id} # Delete company
GET /api/v1/resumes # Get user resumes
POST /api/v1/resumes # Submit job application
GET /api/v1/resumes/{id} # Get resume details
PUT /api/v1/resumes/{id} # Update application status
DELETE /api/v1/resumes/{id} # Delete resume
GET /api/v1/users # Get all users (Admin)
POST /api/v1/users # Create user (Admin)
PUT /api/v1/users/{id} # Update user (Admin)
DELETE /api/v1/users/{id} # Delete user (Admin)
Swagger Documentation: http://localhost:8080/swagger-ui.html
application.properties
# Database Configuration
spring.datasource.url=jdbc:mysql://localhost:3306/nvminh162_jobhunter
spring.datasource.username=root
spring.datasource.password=root
# JWT Configuration
nvminh162.jwt.base64-secret=your-secret-key
nvminh162.jwt.access-token-validity-in-seconds=8640000
nvminh162.jwt.refresh-token-validity-in-seconds=8640000
# File Upload Configuration
spring.servlet.multipart.max-file-size=10MB
spring.servlet.multipart.max-request-size=10MB.env.development
VITE_BACKEND_URL=http://localhost:8080
VITE_API_VERSION=v1
VITE_APP_TITLE=JobHunter.env.production
VITE_BACKEND_URL=https://your-production-api.com
VITE_API_VERSION=v1
VITE_APP_TITLE=JobHunter- User: User accounts with roles and permissions
- Company: Company profiles and information
- Job: Job postings with requirements and details
- Resume: User resumes and job applications
- Skill: Skills and technologies
- Role: User roles and permissions
- Permission: Granular access control
Initial data is provided in:
jobhunter-backend/data/dumpdata.sql- Sample datajobhunter-backend/data/drop.sql- Database cleanup
jobhunter-app/
βββ jobhunter-backend/ # Spring Boot Backend
β βββ src/main/java/com/nvminh162/jobhunter/
β β βββ config/ # Security, CORS, JWT config
β β βββ controller/ # REST API controllers
β β βββ domain/ # JPA entities
β β βββ dto/ # Data Transfer Objects
β β βββ repository/ # Data access layer
β β βββ service/ # Business logic
β β βββ util/ # Utility classes
β βββ src/main/resources/
β β βββ application.properties
β β βββ templates/ # Email templates
β βββ postman/ # API collection
βββ jobhunter-frontend/ # React Frontend
β βββ src/
β β βββ components/ # Reusable components
β β βββ pages/ # Page components
β β βββ redux/ # State management
β β βββ config/ # API configuration
β β βββ types/ # TypeScript types
β β βββ styles/ # SCSS stylesheets
β βββ public/ # Static assets
βββ jobhunter-storage/ # File uploads
βββ build-docker/ # Docker deployment
β βββ docker-compose.yml
β βββ nginx/
βββ upload-docker/ # Docker uploads
- Start Backend:
cd jobhunter-backend && ./mvnw spring-boot:run - Start Frontend:
cd jobhunter-frontend && npm run dev - Access Application:
http://localhost:5173 - API Testing: Use Postman collection in
jobhunter-backend/postman/
cd jobhunter-backend
./mvnw testcd jobhunter-frontend
npm run testcd jobhunter-frontend
npm run buildcd jobhunter-backend
./mvnw clean package -DskipTests- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
nvminh162
- GitHub: @nvminh162
- Facebook: @nvminh162
- Spring Boot community
- React community
- Ant Design team
- All contributors and supporters
Happy Job Hunting! π―