Microservices back-end for managing projects and their tasks, built on:
- Domain-Driven Design.
- Event-Driven Architecture.
- Hexagonal Architecture.
- Choreography and the Saga pattern for distributed transactions.
- Outbox and inbox patterns for reliable messaging.
- SOLID.
The front-end is FastDo.
- Spring Boot.
- Kotlin.
- Gradle Kotlin DSL (a separate build for each service, joined as a composite build).
- PostgreSQL (a separate database for each service).
- Apache Kafka (KRaft).
- Apache Avro with Schema Registry.
- Redis (API gateway sessions).
- Garage (S3-compatible storage for files).
- JUnit.
- Testcontainers.
- Spring Security.
- Spring Data JPA.
- Spring Cloud Gateway.
- OpenAPI (Swagger).
- Identity provider: Keycloak (realm
veds); the application never sees a password. - Pattern: BFF; only the API gateway holds tokens, the browser holds only a session cookie.
- Session store: Redis (Spring Session), every attribute encrypted by the gateway.
- JWT: exchanged per service (RFC 8693), so a token leaked from one service opens no other.
- Authorization: permissions are granted to roles; each service decides from its own projection.
- Details: Keycloak and Authorization.
- The application has an exception handling mechanism (RFC 9457 problem details with message codes).
- The application has a logging mechanism.
- The application has separate environments for local and prod.
- The application has a dedicated configuration file.
- The application has RBAC with permissions per role, announced to every service through Kafka.
- The application has Flyway database migration mechanism.
- The application has optimistic locking with ETag and If-Match headers.
- The application has translations (ICU MessageFormat) owned by the service that declares them.
- And many other features that can be found in the application code.
- Docker for development environment.
- Detekt for static code analysis.
- ktlint for code formatting.
- ArchUnit for executable architecture rules.
- Dokka for code documentation.
- OpenTofu for Kafka topic provisioning.
