Enterprise-Grade Full-Stack Application
A production-ready full-stack application demonstrating the seamless integration of cutting-edge frontend technologies with robust backend architecture, comprehensive DevOps practices, and enterprise-grade deployment strategies.
Demonstrate the seamless integration of modern React frontend with robust Spring Boot backend, showcasing best practices in full-stack development, testing, and deployment.
Complete CRUD operations, real-time dashboards, authentication & authorization, passwordless passkey (WebAuthn) sign-in, data visualization, responsive UI, and comprehensive API documentation with Swagger.
Docker containerization, Kubernetes orchestration with blue-green & canary deployments, Jenkins CI/CD pipeline, and Terraform infrastructure as code for AWS.
Spring Security with JWT-based sessions, BCrypt password hashing, and FIDO2/WebAuthn passkeys powered by the Yubico server library for phishing-resistant, passwordless authentication.
Comprehensive coverage across the stack with JUnit 5 and an in-memory H2 database on the backend, plus Jest and React Testing Library on the frontend to keep regressions out of production.
Polyglot persistence with MySQL via Spring Data JPA and Hibernate, MongoDB for flexible document storage, and Faker-seeded demo data for instant, realistic environments.
A responsive React 18 single-page app built with Material UI and Tailwind CSS, interactive Chart.js dashboards, and smooth client-side routing with React Router.
Interactive, always-current REST API docs generated with Swagger/OpenAPI, alongside detailed setup, deployment, and contributing guides for a frictionless developer onboarding.
Modern three-tier architecture with React SPA, Spring Boot REST API, and MySQL database, supporting multiple deployment strategies and cloud-native practices.
Production-ready deployment with support for three advanced strategies: Rolling, Blue-Green, and Canary deployments.
Use Case: Regular updates, incremental rollouts
kubectl set image deployment/backend backend=new-image:v2.0
Use Case: Major releases, database migrations
./scripts/deploy-blue-green.sh green v2.0
Use Case: High-risk changes, A/B testing
./scripts/deploy-canary.sh v2.0 --weight=10
Real-time metrics with Chart.js visualizations showing employee growth, age distribution, department statistics, and performance indicators.
Complete CRUD operations for employee records with advanced search, filtering, pagination, and bulk operations support.
Hierarchical department structure with employee assignment, department metrics, and organizational charts.
JWT-based authentication, passwordless passkeys (WebAuthn/FIDO2) with biometrics or security keys, BCrypt password hashing, and secure API endpoints.
Mobile-first approach with Material UI and Tailwind CSS, ensuring seamless experience across all devices and screen sizes.
Interactive Swagger UI with comprehensive API documentation, request/response examples, and live testing capabilities.
Unit tests with Jest and JUnit, integration tests, E2E testing, and 90%+ code coverage for reliability.
Lazy loading, code splitting, database query optimization, caching strategies, and CDN integration.
RESTful API with comprehensive CRUD operations, following OpenAPI 3.0 specification
/api/employees
Get all employees with departments
/api/employees/{id}
Get employee by ID
/api/employees
Create new employee
/api/employees/{id}
Update employee by ID
/api/employees/{id}
Delete employee by ID
/api/departments
Get all departments
/api/departments/{id}
Get department by ID
/api/departments
Create new department
/api/departments/{id}
Update department by ID
/api/departments/{id}
Delete department by ID
/api/auth/register
Register new user
/api/auth/login
Authenticate user and get JWT token
/api/auth/verify-username
Verify username availability
/api/auth/reset-password
Reset user password
/api/passkeys/register/start
Begin registering a passkey (JWT)
/api/passkeys/register/finish
Verify attestation & store passkey (JWT)
/api/passkeys
List my passkeys (JWT)
/api/passkeys/{id}
Rename a passkey (JWT)
/api/passkeys/{id}
Delete a passkey (JWT)
/api/passkeys/authenticate/start
Begin a passkey login (public)
/api/passkeys/authenticate/finish
Verify assertion & issue JWT (public)
# Clone repository
git clone https://github.com/hoangsonww/Employee-Management-Fullstack-App.git
cd Employee-Management-Fullstack-App/backend
# Install dependencies
mvn clean install
# Configure application.properties
spring.datasource.url=jdbc:mysql://localhost:3306/employee_management
spring.datasource.username=root
spring.datasource.password=your_password
# Run backend
mvn spring-boot:run
# Backend runs on http://localhost:8080
# Navigate to frontend
cd ../frontend
# Install dependencies
npm install
# Configure .env
REACT_APP_API_URL=http://localhost:8080/api
# Run frontend
npm start
# Frontend runs on http://localhost:3000
# Start all services
docker-compose up --build
# Services:
# - MySQL: localhost:3306
# - MongoDB: localhost:27017
# - Backend: localhost:8080
# - Frontend: localhost:3000
# Stop all services
docker-compose down
# Remove volumes
docker-compose down -v
# Build backend
cd backend
docker build -t employee-backend:latest .
# Build frontend
cd frontend
docker build -t employee-frontend:latest .
# Run backend
docker run -p 8080:8080 employee-backend:latest
# Run frontend
docker run -p 3000:3000 employee-frontend:latest
# Create secrets
kubectl create secret generic backend-secrets \
--from-literal=db-host=mysql-host \
--from-literal=db-password=your-password
# Apply manifests
kubectl apply -f kubernetes/
# Check deployments
kubectl get deployments
kubectl get pods
kubectl get services
# Access application
kubectl port-forward service/frontend-service 3000:80
# Deploy green version
./scripts/deploy-blue-green.sh green v2.0
# Switch traffic to green
./scripts/switch-blue-green.sh green
# Rollback if needed
./scripts/switch-blue-green.sh blue
Landing Page
Interactive Dashboard
Employee Management
Department Management
User Profile
Swagger API Documentation
Automated Jenkins pipeline with comprehensive testing, security scanning, and multi-strategy deployments
Workspace cleanup and Git checkout
Parallel Maven and npm installation
Linting and security scans
JUnit and Jest test suites
Compile and package applications
Create container images
Trivy vulnerability scanning
Strategy-specific deployment
Health checks and smoke tests
frontend/
โโโ public/
โ โโโ index.html
โโโ src/
โ โโโ components/ # React components
โ โ โโโ Dashboard.js
โ โ โโโ EmployeeList.js
โ โ โโโ EmployeeForm.js
โ โ โโโ DepartmentList.js
โ โ โโโ DepartmentForm.js
โ โโโ services/ # API services
โ โ โโโ employeeService.js
โ โ โโโ departmentService.js
โ โโโ App.js # Main app component
โ โโโ index.js # Entry point
โโโ __tests__/ # Jest tests
โโโ package.json
โโโ Dockerfile
backend/
โโโ src/
โ โโโ main/
โ โ โโโ java/com/example/employeemanagement/
โ โ โ โโโ controller/ # REST controllers
โ โ โ โโโ service/ # Business logic
โ โ โ โโโ repository/ # Data access
โ โ โ โโโ model/ # JPA entities
โ โ โ โโโ security/ # Security config
โ โ โ โโโ config/ # Application config
โ โ โโโ resources/
โ โ โโโ application.properties
โ โโโ test/ # JUnit tests
โโโ pom.xml
โโโ Dockerfile
infrastructure/
โโโ kubernetes/ # K8s manifests
โ โโโ backend-deployment.yaml
โ โโโ frontend-deployment.yaml
โ โโโ hpa.yaml
โ โโโ pdb.yaml
โ โโโ network-policy.yaml
โโโ terraform/ # IaC for AWS
โ โโโ main.tf
โ โโโ modules/
โ โ โโโ eks/
โ โ โโโ rds/
โ โ โโโ ecr/
โ โโโ variables.tf
โโโ scripts/ # Automation
โ โโโ deploy-blue-green.sh
โ โโโ deploy-canary.sh
โ โโโ build-images.sh
โโโ Jenkinsfile # CI/CD pipeline
โโโ docker-compose.yml
โโโ Makefile
We welcome contributions! Please follow these guidelines to contribute to the project.
Create your own fork of the project on GitHub
Create a feature branch: git checkout -b feature/amazing-feature
Follow the coding standards and write tests for your changes
Commit with descriptive messages: git commit -m 'Add amazing feature'
Push to your fork and create a Pull Request with detailed description
Follows Airbnb JavaScript Style Guide
npm run format
Follows Google Java Style Guide
mvn formatter:format