Server
node.js
Before starting development we recognized the need to serve, potentially, thousands of users per-second. Our choice of using Node.js as a backend platform was driven by the incredible performance, as well as, the robust and scalable architecture that it enables.
We aimed at making the backend the least impactful link in the chain of operations, in order to enable responsiveness in the mobile app and web platforms.
At the same time our implementation had to observe the strict regulation of the TDIF in terms of security and privacy. And we're glad we chose node.js as a platform since it enabled easier implementation of recurring data validation and security measures across all APIs.
mongodb
It wouldn't have been an awesome journey if we didn't carefully select an appropriate database for the system. We did not need need many relations between our persistent records, but we did need very fast document retrieval, and a data structure that we could easily manipulate in both our backend and our frontend platforms.
MongoDB satisfies all of our main requirements, but it also adds robust features on top that we can use to improve performance: sharding and database encryption.
Sharding easily allows us to scale the performance, distributing load across multiple database instances. At the same time, database encryption offloads tedious encryption and decryption work from the backend server, while also increasing security in unforunate cases of data breaches.
Mobile
flutter
Our choice for using the Flutter framework was driven in large part by a need for performance and stability in a cross-platform environment. And it did pay off when features worked identically both on the Android and iOS apps, with a very responsive UI.
We did trade-off some convenience offered by other frameworks, and indeed we had to get our hands a bit "dirty", but we're not afraid of that. On the contrary, this enabled us to properly implement privacy and security requirements from the TDIF regulation, which otherwise may have been more challenging with other cross-platform approaches.
Web
nest.js
Individuals would make use of the mobile app. However, we also needed to provide business partners with means of interacting with the individuals.
Nest.js allowed us to quickly bring a web platform to life, providing essential functionality to business partners, and improving security by keeping the code server-side.
bootstrap and react
React made it quick to compose the layout of the web platform, while Bootstrap took care of the eye-candy.
There were not many requirements for this web platform, and we built it with a functionality-first approach. But even in its simplicity, having a concise UI that can express exactly where to find such functionality, and the state of the interactions, makes a big difference.