An elist management app with a custom form builder to create user preference forms
Backend is implemented with Nest.js, an API framework for TypeScript
Data is stored in a MySQL database using Google CloudSQL for MySQL. I chose a relational database to be able to support granular analytics operations for elists.
MikroORM used for modeling domain entities, handling transactions and query building. I chose Mikro for it's first class TypeScript support, and since it exposes a knex like query builder for highly flexible queries.
Backend architecture is split into Entities, Controllers for organization
API is hosted as a gen 2 GCP Cloud Function
Front-end is build in angular, and served with firebase
UI library used is Angular Material. I use prime-ng most frequently and wanted to try out angular material's API.
Front-end architecture is layered
Form builder is implemented with Angular Reactive Forms using the ngx-reactive-form-class-validator and with custom form controls
Project is organized as a monorepo with shared interfaces using Nx
I wanted to experience full-stack engieering in an isomorphic TypeScript environment, as well as work with Angular Reactive Forms. I gained deep insight into the latter, and great appreciation for much of a productivity boost shared interfaces can be. I was also hoping to build a project that would allow me to experiment with micro-frontends.
Overall, my feeling is that the isomorphic TypeScript stack gives you a great boost when you go completely backendless, and use a serverside framework to interact with the data layer directly. or perhaps if you're using a NoSQL database. If you construct an API, and use ORMs with a relational database, classes can't be shared due to normalizaton and joins. So you might as well be using a different language if performance and/or ecosystem are a concern.