As a software engineer, and someone who likes to provide value to others in the field, I felt like I wanted to go through a great tech stack for my company and product, EndorseFlow.
Product Outline
EndorseFlow is a real-time collaboration tool for creative teams, allowing those to review, approve, and publish digital content within one application. Internal and external reviews are as easy as ever to gather and document within your team.
Everything technical...
EndorseFlow is a web application, that also extends to a native desktop application using Electron. The web application is written using React.
Why React? It's easy. React is a simple framework to get used to, and allows for reusable components to be used throughout the project. For a large project, I recommend React over Vue.js, having used Vue before. Using React also gives us the ability to reuse our state/store when using React Native for our mobile application.
With a frontend, comes and backend.
Our RESTful API is using Node.js, the Express framework, paired together with MongoDB as our database, and Redis as our cache. We also dabble in Serverless for our video, image, and PDF thumbnail creation using AWS Lambda.
We chose MongoDB as our no-sql database for the reason that it is performant for the potential read/write workload, as well as the simplicity when interacting with the database to store and retrieve data.
Redis is used to allow for a clustered and horizontally scaled deployment. This ranges from simple API rate limiting, to frequently accessed user data for permission and role access checks. We also incorporate idempotency into our API, which uses Redis as our store.
We went real-time with Pusher, allowing us to simply incorporate WebSockets into our application without the added server cost, strain, and most importantly, time.
As for Node, and framework Express, we chose these for performance and developer simplicity.
That's it for now!
Although this post was longer than normal (sorry), I hope you got an insight into how a technology stacks for a large web application looks and goes together. Any questions just ask away!