Skip to content

Latest commit

 

History

History
63 lines (39 loc) · 1.97 KB

technologies.md

File metadata and controls

63 lines (39 loc) · 1.97 KB

Technologies

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.

Backend

The backend uses Nestjs which is a Nodejs framework.

HTTP Server: Fastify

Fastify as HTTP API as it is one of the most performant Nodejs HTTP servers.

ORM: TypeORM

TypeORM is used as an ORM.

Image processing

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.

Persistence

Database: Postgres

The software system uses Postgres as database with the PostGIS extensions for handling geospatial data.

Object storage: Minio

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).

Frontend

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.

IDP: Supertokens

Supertokens is used as a self-hosted IDP.

Infrastructure

Edge router: Traefik

Traefik is used for routing.