Shopping 4 Chow
Shopping 4 Chow is a web/mobile app that will be used for food related activities like creating shopping list, custom recipes as well as custom Meal Plans. It will also contain a list of commonly and uncommonly used ingredients as well as pictures. This is a personal project with only 1 member.
The purpose of this app is to make it easier to create and manage Shopping list for recipes. After selecting a recipe, the ingredients as well as the quantity will be added to the shopping list. If multiple recipes are selected, all the ingredients are added to the list and any overlapping ingredients are added together. For instance if one recipes calls for 1 lbs of chicken and another calls for ½ pounds then both will be added to the total amount of 1.5 lbs of chicken on the Shopping list.
The Architecture
Authentication
Authentication will use AWS Cognito
Backend
The Backend is currently using Java 16 Spring and Hibernate, but a cloned Go and possible Rust version are being considered to see if there are any performance improvements or optimization.
CICD
Jenkins will be used in combination with the AWS CodeBuild plugin tool for deployments to AWS.
Database
For storing data like Food, Recipes etc Postgresql will be used and AWS RDS for hosting.
Environment
Development, Testing and Production
Frontend
For the frontend React will be used. Hosting will be through s3. Mobile will use either React Native or Flutter. Pros and Cons for both are being considered.
Hosing
This app will be hosted on AWS and use multiple Serverless services like Fargate. This will require the entire app to run on a docker container.
Infrastructure as code
Terraform
Project Management
Clubhouse, https://clubhouse.io/, will be used for Project Management to keep track of tasks and issues.
Static Storage
Images will be stored on AWS s3
Upgrades
Currently this app is being designed with a Monolithic Architecture approach using Services and Data Access Object (DAO). After the initial release, a plan to redesign using Microservices and GRPC will be implemented. Kubernetes will also be considered if the cost justifies the upgrade.
Version Control
GIT
Testing
For java, Junit & Mockito will be used for Testing and writing Mock Tests respectively.