Tom Balcaen

(This page is intentionally minimalistic. It's my desire to prioritise for the things that are necessary.)

Happy Plate - automated mealplan

Introduction

A few months ago I was asked why there were no digital platforms that help people eat healthy while suggesting easy to prepare meals. There were a lot of resources that tought you what a great and healthy meal is. On the other hand there were a lot of resources that tought you how to prepare a healhty meal. But not a solution that combined them. After doing some brainstorming I decided to develop an progressive web application (PWA). That would generate a mealplan, with easy to prepare meals, taking into account the nutritional needs of that person.

Understanding the challenge

The challenges assosiated with this platform are as follows. First, the platform we want to use. It is important to understand our target audience. People who are using mealplans and are preparing meals, are those who use the platform in the kitchen. So, we can asume that a mobile application is preferable to a desktop application or web application. Looking at the recent trends, we see a markable increase in PWA's. Also, I wanted to create a microservice architecture because it is easier to maintain than a monolitic app. It is also more flexible in the technologies used. Maybe in the near future there is a possibility to add artificial intelligence or some other technologie. Using microservices it will be easier to implement them.

User journey

Through the user journey I will visualise the user flow throughout the application. First the user decides to live a healhty lifestyle. Because it is hard to maintain, users need a application that helps them with the hard decisions in this process. What is healthy, when to eat and how to prepare. It is imminent to assume that people have a busy schedule. So meals need to be easy, fast to prepare, with everyday ingredients. At the beginning of the week or with the first sign in. The user is prompt to enter some personal data. With this personal data the application will generate an effective mealplan for the rest of the week. Having a weekly mealplan gives the user the posibility to decide to do some mealprepping. The mealplan need to be organised. It must be possible to change the meals suggested. Or to 'lock' the meals. (not every person eats an entirely new breakfast every day)

Technologies used and why

In today's times there is an abundance of technologies one can use to create an application. I believe it is important to think carefully and use tools with the end project in mind. For this project I used tools that I am really curious about, that have a potential to be of economical value to me in the future aswell as tools that I was familiar with.

Front end framework

My choice of front end framework is Angular (not AngularJS). I was already familiar with Angular and using this framework was the logical solution for getting to an MVP as soon as possible. Angular was complimented with the bootstrap framework and angular materials.

Serverless backend

I decided to use Amazons API gateway to organise the api and lambda functions to provide compute power. This way I will only pay for the compute used. This also gives me the opportunity to immerse myself in serverless technologies, which I'm very interested about.

Authentication provider

The happy plate application needs to authenticate and verify users, so we can provide them with their personal information and personal mealplan. I chose Amazon cognito as a authentication and identity provider. It gives me the opportunity to have a hands on with a new out of the box technology (I create most of my authentication and identity system by writing authentication middleware, with the passportjs, JWT, express and a database to store user information). It is fully managed, this will free up time to handle other stuff.

Storage & database

For this project I will use different databases for different purposes. Because this application is build on a microservice architecture it is easy to integrate multiple database technologies. The databases I'm using are the open source solution MongoDB and the Amazon owned DynamoDB. Both are noSQL databases. MongoDB being a document store and dynamoDB being a key-value aswel as a document store. MongoDB will be used to especially for its awesome capability to query fields inside a document. Because we want to generate a mealplan based on personal user parameters it is the right choice. The schemaless nature of mongoDB gives us the advantage to handle change over time when te application because more mature and imminent change is needed. DynamoDB however is very good at retrieving data, fast and reliable when primary keys are readily available. Dynamodb is scaling horizontally, (because of sharding) instead of scaling vertically like most of the SQL databases. This is a good feature to have in case this application gains traction and stores a lot of data, performance will not be an issue. This database will be used to retrieve the weekly mealplan as well as user information. In the future we will be using a third type of database, a graph database to build a real-time recommendation engine.

Architecture

Architecture schema of the used technologies.

simplified schema of the application

Delivery process

Things I would do differently

Focus on doing one thing well and remove all the other noise. People are using an app to solve a problem, they are only going to use that app when that unique problem is solved, it does not matter how many additional features the application has!

Screenshots