A modern full-stack customer management application built with Spring Boot, React, and Angular, featuring JWT authentication, containerized deployment, and CI/CD automation.
- Dual Frontend Support: Choose between React or Angular frontend
- JWT Authentication: Secure API with token-based authentication
- RESTful API: Well-structured REST endpoints for customer management
- File Upload: AWS S3 integration for profile image storage
- Database Migrations: Automated schema management with Flyway
- Containerization: Docker support for all components
- CI/CD Pipeline: Automated testing and deployment to AWS
- Health Monitoring: Spring Boot Actuator endpoints
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend Layer β
ββββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ€
β React App (Vite) β Angular App (v15) β
β - Chakra UI β - PrimeNG β
β - React Router v6 β - Reactive Forms β
β - Formik & Yup β - RxJS β
ββββββββββββββββββββββββββββ΄βββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Spring Boot Backend (v3.0) β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββ β
β β Controllers β β Services β β Data Access β β
β β - REST ββββ Business ββββ - JPA/JDBC β β
β β - Auth β β Logic β β - Repository β β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ β
β β Spring Security β β AWS Services β β
β β - JWT Auth Filter β β - S3 Storage β β
β β - JWT Utilities β β - File Upload β β
β ββββββββββββββββββββββββ ββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β PostgreSQL Database (v14.1) β
β - Flyway Migrations β
β - Customer Data β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
- Framework: Spring Boot 3.0
- Language: Java 17
- Security: Spring Security + JWT
- Database: PostgreSQL 14.1
- ORM: Spring Data JPA / JDBC
- Migrations: Flyway
- Cloud Storage: AWS S3
- Build Tool: Maven
- Testing: JUnit 5, Testcontainers
- Build Tool: Vite
- UI Library: Chakra UI
- Routing: React Router v6
- Forms: Formik + Yup
- HTTP Client: Axios
- State Management: Context API
- Framework: Angular 15
- UI Library: PrimeNG
- Forms: Reactive Forms
- HTTP Client: HttpClient
- JWT Handler: @auth0/angular-jwt
- State Management: RxJS
- Containerization: Docker
- CI/CD: GitHub Actions
- Container Registry: Docker Hub
- Deployment: AWS Elastic Beanstalk
- Database Hosting: AWS RDS (Production)
- Java 17+
- Node.js 18+
- Docker & Docker Compose
- Maven 3.8+
- PostgreSQL 14+ (or use Docker)
git clone https://github.com/jakr99/Spring-boot-dashboard.git
cd spring-boot-full-stack
docker-compose up -d
cd backend
mvn spring-boot:run
The backend will be available at http://localhost:8080
cd frontend/react
npm install
npm run dev
Access the React app at http://localhost:5173
cd frontend/angular
npm install
npm start
Access the Angular app at http://localhost:4200
POST /api/v1/auth/register
Content-Type: application/json
{
"name": "John Doe",
"email": "john@example.com",
"password": "password123",
"age": 25,
"gender": "MALE"
}
POST /api/v1/auth/login
Content-Type: application/json
{
"username": "john@example.com",
"password": "password123"
}
GET /api/v1/customers
Authorization: Bearer {token}
GET /api/v1/customers/{customerId}
Authorization: Bearer {token}
PUT /api/v1/customers/{customerId}
Authorization: Bearer {token}
Content-Type: application/json
{
"name": "Updated Name",
"email": "newemail@example.com",
"age": 26
}
DELETE /api/v1/customers/{customerId}
Authorization: Bearer {token}
POST /api/v1/customers/{customerId}/profile-image
Authorization: Bearer {token}
Content-Type: multipart/form-data
file: {image-file}
GET /actuator/health
GET /actuator/info
cd backend
mvn clean verify
mvn test
mvn failsafe:integration-test
mvn test -Dtest=CustomerServiceTest
cd frontend/angular
npm test
cd backend
mvn compile jib:build -Ddocker.image.tag=latest
cd frontend/react
docker build -t amigoscode-react:latest .
# Start all services
docker-compose up -d
# Stop all services
docker-compose down
The project uses GitHub Actions for continuous integration and deployment:
-
Backend CI (
backend-ci.yml
): Runs on PRs to main branch- Sets up PostgreSQL service
- Runs all tests
- Validates build
-
Backend CD (
backend-cd.yml
): Deploys on push to main- Builds Docker image using Jib
- Pushes to Docker Hub
- Deploys to AWS Elastic Beanstalk
- Sends Slack notifications
-
Frontend React CD (
frontend-react-cd.yml
): Deploys React app- Builds Docker image
- Pushes to Docker Hub
- Deploys to AWS
SPRING_DATASOURCE_URL=jdbc:postgresql://your-rds-endpoint:5432/dbname
SPRING_DATASOURCE_USERNAME=your-username
SPRING_DATASOURCE_PASSWORD=your-password
AWS_ACCESS_KEY_ID=your-aws-key
AWS_SECRET_ACCESS_KEY=your-aws-secret
VITE_API_BASE_URL=https://your-api-domain.com
full-stack-professional/
βββ backend/
β βββ src/
β β βββ main/
β β β βββ java/com/amigoscode/
β β β β βββ auth/ # Authentication logic
β β β β βββ customer/ # Customer domain
β β β β βββ exception/ # Exception handling
β β β β βββ jwt/ # JWT utilities
β β β β βββ s3/ # AWS S3 integration
β β β βββ resources/
β β β βββ db/migration/ # Flyway migrations
β β β βββ application.yml
β β βββ test/ # Test files
β βββ pom.xml
βββ frontend/
β βββ react/ # React application
β β βββ src/
β β β βββ components/
β β β βββ services/
β β βββ package.json
β βββ angular/ # Angular application
β βββ src/
β β βββ app/
β β βββ environments/
β βββ package.json
βββ .github/workflows/ # CI/CD pipelines
βββ docker-compose.yml
βββ Dockerrun.aws.json # AWS EB configuration
βββ README.md
The application uses PostgreSQL with the following default settings:
- Host: localhost
- Port: 5332 (mapped from container's 5432)
- Database: customer
- Username: amigoscode
- Password: password
In development, CORS is configured to allow all origins. Update for production in application.yml
.
Configure S3 bucket details in application.yml
:
aws:
region: us-east-1
s3:
buckets:
customer: your-bucket-name
- 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
This project is licensed under the MIT License - see the LICENSE file for details.
- Spring Boot team for the excellent framework
- React and Angular communities
- AWS for cloud services
- All contributors and maintainers