Skip to content

Application Structure

This page describes the structure of the application and how it is organized.

Service Overview

The application is composed of multiple Docker containers (services), categorized into two primary groups:

Application Structure

The application code is stored inside a monorepo.

Each service is responsible for a specific part of the application and is bundled into a Docker container. The services are orchestrated by Docker Compose.

Core Containers

The operational containers are again split into publicly accessible and non-publicly accessible containers.

Publicly Accessible

  • frontend - the web application written using Vue3 and Quasar
  • api-server - the backend application written using NestJS
  • minio - the file storage

Private Network (Not Publicly Accessible)

  • queue-processor - The service worker processing the queues
  • postgres - The Postres database
  • redis - Database to manage the Queue
  • action containers - custom containers scheduled by the queue-processor to perform user specific actions

Helper Containers:

  • docs - this documentation, built using VitePress
  • prometheus - monitoring (for time series data)
  • tempo - tracing
  • loki - logging
  • grafana - visualization of the monitoring dat, logs, and traces

Infrastructure Overview

Infrastructure.jpg

How to Edit the Figure

The above figure can be edited using https://drive.google.com/file/d/1w4JAuPfGMLiISAmuAbiq0NbgInp4VGlP/view?ts=6666d313

Git Workflow

We use three designated branches main, dev and staging. To submit new code open a pull request to staging. Once enough features are present, we merge staging into dev. This will trigger our CI/CD pipeline and update the dev deployment. When we are happy with the stability of the dev deployment we merge into main.

Released under the MIT License.