Skip to content

CoderMP/Chirp-Backend

Repository files navigation

🐦 Chirp Back-end

A modular monolith-based back-end built with Spring Boot and Kotlin for the Chirp messaging Platform.

✨ Features

  • 👤 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)

🚧 Roadmap

  • Message Image attachments
  • Typing status indicators
  • Voice messages
  • Admin role(s) and chat management

🚀 Tech Stack

  • 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

🏗️ Architecture

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

📦 Project Structure

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

🤝 Contributing

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.

📄 License

This project is licensed under the MIT License – see the LICENSE file for details.


Built with ❤️, Spring Boot, and Kotlin