top of page

FoodPath

Updated: Nov 7, 2022

One of my greatest accomplishments to date - FoodPath.


1 month, 1 goal.


I came across the opportunity to take part in CodePath's iOS Development Course in Fall 2021, led by students turned technical leads of my institution, Aashray and Bipin. Prior to this opportunity, I've never had any experience in app development. Heck, I didn't even own an iPhone, let alone a MacBook. Leaving aside my worries for the workload of said semester, I thought to myself, "Why not? At least it won't affect my GPA if I can't cope through the course."


Throughout the course, the pressure was just that of the weekly assignment deadlines. Safe to say it was sweet when it lasted - the capstone project was just around the corner. By random, we were placed into groups, and thus the beginning of FoodPath.


I remember the agony, the joy, and the tears. Hardships were bound to follow, but never did we expect the weight of the burden. Documentations after documentations, my web browser was populated with unclosed tabs, as I myself was heavily dosed with caffeine. Indefinitely, we had doubts, "Did we dream too big?" - that was the question that caved in on us. In our defense, we had a deadline coming up, and we have yet to see the light at the end of the tunnel.


But I wouldn't have it any other way. If I were to go back in time, I would still allow myself to be jeopardized by the learning process.


A few takeaways that I've gained in my experience are as such:

  • The importance of a Sprint Model: We were able to catch up with our vulnerabilities by scoping out a more thorough sprint cycle based on the priority of tasks, assignment of tasks, and the limit of time such that the least amount of time will be wasted.

  • The necessity of communication: Considering the fact that we were working together virtually, there holds such an importance in ensuring that the team is on the right path. To do so is to ensure the team communicates well, by updating the team on one's own milestones, expectations, and most importantly, one's own struggles.

  • The courage to fail: At almost every turn, I realized I'm at a dead end. Initially, I was too afraid to admit the inevitable, thus my horrid attempt at head-butting through the cul de sac. It was only when I allowed myself to attempt change, that the solution appeared. Truth be told, I felt vulnerable towards said rerouting of directions, but I now see it as an extra piece of knowledge under my belt.

  • Best practices first: Like I mentioned, we had 1 goal - the FoodPath dream. And it was straight bulldozing into getting it to work. At first, it worked fine. But it was all there is to it, just "fine". Finally, as if FoodPath got tired of our work ethic, bugs started to appear one after another. We finally sat down and scanned through the parts we missed, fixing our pipeline to avoid an exhaustion of screens, adding more functionality to enable the asynchronous update of our database and so on. And finally, though FoodPath threw us a curveball, we managed to catch hold of it, and run towards the end of the field.


And ran we did - FoodPath earned Second Place at CodePath's National Demo Day.


So here's how it works:



To start off, users will be welcomed with an animated launch screen that has been implemented using SwiftyGIF. Then, users will be directed to our Stream Screen where users are allowed to select from our list of predefined ingredients that is stored on our Parse database. Upon confirmation, users will be directed to our Food Picker Screen that uses the Edamam API to recommend food dishes based off the ingredients whose isSelected boolean value has been updated asynchronously on the database. Upon confirmation via clicking the 'look at recipes' button, the selected food dish will be stored in the Parse database as a way to keep track of the user's browsing history. At the same time, the user's selected food dish is fed to Google's Serp API to recommend a few websites based off said food dish and is displayed on our Recipe Detail screen. Upon clicking, users can also be redirected to the website accordingly and the website details will also be stored into our database for history purposes. To ensure that there isn't an exhaustion of memory stack of screens, the back button in the nav bar unwinds segueways upon the user's tap gesture. Back on the Stream Screen, users have the option to use a photo instead. From there, users will be redirected to our Image Recognition Screen, whereby users can choose to either use their camera to take a photo or choose a photo from their gallery. Upon confirmation, our app will feed the image into our Image Classification Core ML model that is based off the Food 101 dataset and return an array of recognized food dishes in order of confidence level on our food picker from Image Recognition Screen. Similarly, users browsing history will also be stored into our database accordingly as they are redirected to our Recipe Details Screen once again. Back to our Stream Screen, users also have the option to view their browsing history that is categorized into Viewed Foods or Viewed Recipes on our Tab View Controller. On the Recipe tab, users can be redirected back to the website. Upon clicking the 'clear history' button, users can also remove all data in the related table in our database. As for the Food tab, users can either find more recipes after selecting one of their browsed foods or clear their history, similarly to the functionality on the Recipe tab.

A few future features that we'd like to implement into our app is to implement our optional user stories, enhance the user experience as well as to clean up the Edamam search result.



FoodPath walkthrough


FoodPath Tech Stack:

  • Google Serp API: Returns a list of websites that contain recipes associated to the selected food dish

  • Food 101 Core ML model: Image classification model that is based on the Food 101 dataset

  • Parse Back4App: Database to host all the data needed for the app

  • Edamam Food Database API: Returns a list of food dishes that contain the selected ingredients

  • SwiftyGIF: Launches an animated launch screen

  • Canva: Used to design assets




Dedicated to Kim Chheu, my teammate and Computer Mouse, and Eugene Tye, my supporter and MacBook supplier. Thank you for the grind, and the support from behind.


Comments


bottom of page