Between obesity and malnutrition, problematic eating habits are becoming a huge epidemic. With the high-stress lifestyle of college students, we often lose sight of whether we're eating too much or too little—that's why we built CALcount.
What it does
CALcount is a calorie/nutrient counting app that tries to make it as easy as possible to keep track of what you're eating every day. You take a picture of your food, and CALcount tries to recognize foods in the picture, suggesting what it sees to add to your food diary. It then looks up your meal to give you important nutrition information. The picture, meal, and nutrition info is saved in the cloud, so you can access what you've eaten at your fingertips.
How we built it
The frontend is written in Expo.io; the backend is in Node.JS; the backend is hosted using Google Cloud's App engine; the computer vision API to recognize foods from pictures is from Google Cloud Vision; nutrition information is from the USDA nutrition data API; pictures are uploaded to AWS; meals are uploaded to mLab using mongoose.
Challenges we ran into
Frontend: Uploading images to AWS involved several patches on top of Expo
Backend: Parsing convoluted data that came back from USDA database; learning 2 APIs, what they expected & returned; deploying the application using a new platform
Database: The CalVisitor wifi made testing hard—we realized that it blocked us from connecting to certain ports so we had to switch to AirBears
Accomplishments that we're proud of
We used a multitude of technologies, several of which were completely new to us, to create a cohesive & useful application. To make this happen we had to work as a team—everyone worked on a separate part of the application.
What we learned
Kavi: I learned about making HTTP requests and parsing the data in the response. I also learned more about express and node in general.
Bryan: Learned to deploy a node app using Google Cloud App Engine; learned to use Google Cloud Vision API; architectured app from vision to hack.
Ethan: I struggled with setting up Amazon S3 with federated web identities (through Google's Identity Platform) so that only authenticated users of our app could upload to our S3 bucket -- there was a lot of configuration to be done and the documentation differs across Stack Overflow answers, Amazon's tutorials, and even their own documentation (especially for ES6 imports). However, it was extremely rewarding when the first file made it through hundreds of Access Denied errors :~)
What's next for CALcount
CALcount tries to act as an assistant to the user, and we think it could be even more powerful if it gave suggestions for meals given the BMI of the user and their exercise/meal patterns. We could also link these suggestions to possible grocers and restaurants who serve these meals. Users could also plan out meals for the day, either using pictures or typed out meal plans to see how many calories they will consume and what nutrients they will intake. Another improvement can be helping the user create meals that will be both nutritious and delicious.