A modular monolith-based back-end built with Spring Boot and Kotlin for the Chirp messaging Platform.
- 👤 User Features:
- Registration flow
- Login flow
- Email verification flow
- Password reset flow
- 💬 Chat Features:
- 1-on-1 chats
- Group chats
- User profile images
- 🔔 Push Notifications:
- New message(s)
- Message Image attachments
- Typing status indicators
- Voice messages
- Admin role(s) and chat management
- Architecture: Modular Monolith for scalable, clean separation of concerns across services
- Build Tool: Custom Gradle Build Scripts with Kotlin DSL
- Caching: Quick, in-memory access via Redis
- Database: Relational PostGres DB via Supabase
- Inter-Service Communication: RabbitMQ cluster via CloudAMQP
- Languages:
- Kotlin (97%): Comprises the bulk of the back-end source code
- Lua (2%): Small Lua scripts to allow for atomic IP isolation for rate-limiting functionality
- HTML (1%): Template files for ThymeLeaf
The Chirp Back-end uses a modular monolith architecture with the following components:
- 🎯 App - Main application and API gateway
- 💬 Chat - Real-time messaging and chat functionality
- 🔧 Common - Shared utilities and models
- 🔔 Notification - Push notifications and alerts
- 👤 User - User management and authentication
To maintain proper scalability and separation of concerns, each feature contains the same core layers across the project to maintain an organized yet modular monolith architecture:
| Chat | Common | Notification | User | |
|---|---|---|---|---|
| API Layer | X | X | X | X |
| Domain Layer | X | X | X | X |
| Infra Layer | X | X | X | X |
| Service Layer | X | X | X | X |
- API Layer: Holds feature-specific controllers, DTO's, exception handlers, mappers, requests, and other feature-specific functions
- Domain Layer: Holds feature-specific models, exceptions, and events (if applicable)
- Infra Layer: Holds feature-specific schemas, DB's, security configs, and rate limiting functionality (if applicable)
- Service Layer: Holds feature-specific services
Contributions are welcome! If you’d like to help with features, fixes, or UI polish, please open a corresponding issue or pull request with your suggestions/changes.
This project is licensed under the MIT License – see the LICENSE file for details.
Built with ❤️, Spring Boot, and Kotlin