Nowadays we have a full continuous integration pipeline running. Everything we do runs in Docker containers. We’ve written a small helper app that uses Hashicorp’s Nomad to schedule those containers in our production and test environments. We are slowly expanding this into a commit-to-deploy trunk-based integration strategy.
Our app consists of multiple single page applications written in React. We use Redux for our main logic combined with redux-saga for all side effects and asynchronous calls. The main part is what we call the “editor”, where the systems are designed. Its core is a Fabric layer on top of a Leaflet map. End-to-end testing is getting in shape, which is done with help of Testim.
The backend is a Django application, in Python 3. We make use of django-rest-framework to ease the endpoint development, and Celery is our current (but contested) queue runner. We leverage the GEOS capabilities of PostGIS for raster data (height maps) as well as vector data (for meta data on images and buildings).
We are looking for ways to decouple too tightly coupled parts of our system, and have been working on implementing the Domain Driven Design approach in new code and code we touch where this makes sense. Typing –- both in the front- and backend –- are being added.
We use Hashicorp’s tools for deployment, together with some (Python) wrappers and scripts to run all of the above in the Google Cloud. Where possible we use managed solutions like for our database or for some utilities we can offload to Cloud Run.