A distributed, full-stack microservices application designed for comprehensive library management and user reading metrics. Built with a decoupled Spring Boot backend ecosystem and a modern React frontend, the system utilizes centralized API routing, event-driven communication, and docker containerization.
The application is built using a Database-per-Service pattern to ensure loose coupling and independent scalability.
- Frontend: Modern multi page app built with React.
- API Gateway: Central entry point using Spring Cloud Gateway to handle routing and enforce centralized security.
- Identity & Access Management (IAM): Token-based authentication and authorization handled via Keycloak.
- Event-Driven Messaging: Asynchronous event dispatching utilizing Apache Kafka.
- Notification Engine: Decoupled email alert dispatching integrated with Mailtrap.
- Polyglot Persistence: Microservices leverage dedicated instances of MySQL and PostgreSQL.
- Framework: React.js
- Styling: Modern CSS UI with reactive dashboards
- API Gateway: Spring Cloud Gateway
- Security: Spring Security
- Authorization: Keycloak (OAuth2 / OpenID Connect)
- Message Broker: Apache Kafka
- Mail Server: Mailtrap SMTP integration
- Databases: MySQL, PostgreSQL
- Containerization: Docker & Docker Compose
api-gateway: Intercepts all client requests, manages routing to downstream services, and integrates with Keycloak to validate access tokens.library-frontend: The user interface. Houses the landing page, authorization flows, member dashboard, and book discovery grids.book-service: Handles the core library catalog operations, inventory tracking, and book availability.genre-service: Manages categories and genres independently to streamline catalog sorting.user-service: Tracks user profiles, current loans, reservations, history, and reading streaks. Connects to Kafka to broadcast account events.notification-service: Listens asynchronously to Kafka topics and triggers transaction/notification emails through Mailtrap.
- Docker & Docker Compose installed.
- Node.js (if running frontend outside Docker).
- Java 17+ (if running backend services locally).
- Clone the repository:
git clone [https://github.com/LPanov/library-app.git](https://github.com/LPanov/library-app.git) cd library-app