This document outlines the different technologies used in the software system and the reasoning behind these choices.
One of the aims of the system is the be run on-prem with minimal setup.
The backend uses Nestjs which is a Nodejs framework.
Fastify as HTTP API as it is one of the most performant Nodejs HTTP servers.
TypeORM is used as an ORM.
Jimp is used for image processing. This library was picked over more performant libraries such as Sharp due to it being fully written in JavaScript, eliminating the need for external libraries. This simplifies local development and enhances project portability. The implementation should be written such that can be easily replaced if the need arises.
The software system uses Postgres as database with the PostGIS extensions for handling geospatial data.
Minio is an on-prem S3-compatible object storage which is used for e.g. storing user profile photos.
For a production environment, a cloud-based object storage is recommended due to being cheaper than using fault-tolerant block storage (which would be required for self-hosting an object storage).
The frontend is written in React. The ambition is to in the future also write an Android app using React Native.
OpenAPI Generator is used to generate HTTP SDK for the web client based on the OpenAPI specification of the backend.
Supertokens is used as a self-hosted IDP.
Traefik is used for routing.