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
  • seaweedfs - 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.