Skip to content

mchar7/litter

Repository files navigation

Litter Banner Site Status CI/CD K8S License Spring Boot Java MongoDB

Litter is a (backend-only for now) API for a Twitter-like social media site. Built with Spring Boot, MongoDB, and enough cloud infrastructure to make me cry when I get my monthly Azure bill.

Tip

TL;DR: It's like Twitter, but smaller. And better. It deploys itself to Azure AKS with one Terraform command (almost). Want to run it? Skip to the deployment section.

Table of Contents

🚀 Features

  • Reactive Spring Boot backend with WebFlux
  • Token-based authentication with JWT
  • Message publishing and subscription system
  • Automated deployment to Azure AKS
  • Full CI/CD pipeline with GitHub Actions
  • Comprehensive test suite with JUnit 5
  • Infrastructure as Code with Terraform
  • Kubernetes deployment via Helm chart
  • Docker Compose for local development
  • API documentation with Postman

🔧 Tech Stack

Category Technologies
Backend Spring Boot, WebFlux
Frontend N/A (maybe later if I still care — I've been messing about with a possible Angular front end)
Database MongoDB 8.x via Spring Data (Reactive)
Cloud Platform Azure: Azure Kubernetes Service (AKS), Key Vault, DNS Zone
Infrastructure Terraform, Helm, Kubernetes, Docker
Build Tools Gradle, GitHub Actions
Testing JUnit 5, TestContainers, Postman
Security JWT, Azure Key Vault, TLS/SSL, Argon2 password hashing (Spring Security)

🚀 Deployment Instructions

Pick your deployment method:

📖 API Documentation

While the site is online (see status badge at the top of this README), you can access the API documentation via the built-in Swagger UI.

🏗️ Project Structure

litter
├── chart/              # Helm templates and values
│
├── compose/            # Docker Compose files
│
├── src/
│    ├── main/          # Application source code
│    └── test/          # Unit and integration tests
│
├── terraform/          # IaC configuration
│
├── build.gradle        # Gradle build file
├── gradle.properties   # Gradle properties
├── settings.gradle     # Gradle settings
│
├── Dockerfile          # Docker build file
│
└── README.md           # Wait a minute...this is pretty meta

☁️ Infrastructure

Azure infrastructure as Mermaid diagram

Tip

The infrastructure is defined entirely in code:

📜 License

This project is licensed under the GNU General Public License v3.0 in case someone wants to clone this for some reason; see the LICENSE file for details.

❤️ Acknowledgments

  • My caffeine addiction, for making this possible
  • The Azure free tier, for not bankrupting me during development
  • The original Twitter, for being so bad that I had to try to make my own

Important

Found a bug? Have a feature request? Just want to let me know that more than 2 eyeballs have seen this? Open an issue!