-
Notifications
You must be signed in to change notification settings - Fork 3
Architectural Overview

ELB is the primary driver of the application, as a Platform as a Service (Paas) solution we use it to deploy a docker container containing our express.js server code and our React Single Page Application (SPA). ELB allocates compute resources, network VPCs and monitors our application's health. Using the Elastic Load Balancer we are able to define automatic scaling policies depending on metrics like our average request latency and more.
The managed offering of Elasticsearch by AWS is the main data warehouse containing all our scraped recipes and facilitating the advanced search logics offered to our users.
We use serverless instance to run our recipes crawler periodically and update our ES with new recipes from around the web. Simultaneously we update our recommendation engine (Recombee) inventory to sync our recommendation logics with the recipes at hand.
A container registry which is continuously deployed to from our CI/CD pipeline in Github Actions. The images are pulled to compute (EC2) instances by ELB.
Cloudflare is the main entrypoint which every user of the application goes through to reach our app. It provides us with CDN to cache our static resources and enable faster load speeds, TLS/1.3 Certificate for transport security, and some analytics.
Github is hosting our open source repository, enabling us to keep track of development, issues, management and progress. Using Github Actions we implement automatic pull requests check and a full continuous deployment pipeline which packages and deploys our master branch to our production cloud instance in AWS. We also receive security and code quality alerts and many more nice features like this wiki :)
We use Auth0 as an identity provider, allowing us to offer our users simple means of login either by a secure user name and password option or via Oauth2 social logins with Google and Facebook identities.
The managed offering of MongoDB is our main in-app user DB containing the users' saved recipes and preferences.
Recombee's recommendation engine is the backbone for our entire recommendation logics. We use extensively to offer users recipes based on their interactions (viewed and saved recipes), show them the most popular recipes on site and ask them if they want to save their last visited recipe. All of these business logics are augmented by each user's personal preferences such as forbidden ingredients or their dietary restrictions, making sure we don't recommend non relevant recipes.
Our app displays a lot of third party images of recipes, we wanted to improve the viewing experience for our users and use Cloudinary for media managements. Every recipe images is fetched on the fly through Cloudinary, undergoes transformation to fit our size requirements and advanced formats specs and then cached for other users' use. This enables us to make sure our users only download properly sized images and with more extensive use offer better performance.