Built by Aroop Biswal, Jason Fu, and Vincent Huang
An android recipe keeper app that allows for the searching and storage of recipes and groceries. Using the Spoonacular API for a database of recipes and a user login system for user-based storage, Recipe Keeper is a convenient way to discover and organize recipes.
Download and try the app here.
Node.js, AWS, MySQL, Expo (React Native),
For the backend, we initially used Node.JS with an Express framework, as we were most familiar with those. However, we soon realized that in order to keep our server running, we would have to integrate our code with a third party service. That service ended up being Amazon Web Services, as their products are relatively well documented, work well together, and their free tier provides more than enough resources.
The core of our backend is a MySQL database hosted on Amazon RDS. An AWS Lambda function written in Node.JS runs SQL commands to modify the database. Finally, a front-facing HTTP API that integrated the Lambda function was created using Amazon API Gateway . Through this process, we created a multi-endpoint HTTP API that could manipulate the MySQL database based on the features and needs of the frontend.
For the frontend, we used Expo, which utilizes React Native to create an app that is compatible with both ios and android environments natively. We separated each component of our app into their own .js/.jsx files to minimize redundant code and make our project more modular. To update and delete from the tables in our MySQL database, we called our api in response to certain user actions in the frontend. We also designed a cache system to store data from recent api calls to reduce load times from frequent calls.
To further enhance our app, we wanted to create an account login system. This was implemented using Auth0, which provides its own login/logout UI, and manages its own user database. Besides this, Auth0 uses OAuth protocols, which allowed us to protect our API endpoints with a JWT token. Upon logging in, a series of calls are made to various Auth0 endpoints that allow our app to retrieve a UserID and a Bearer Access Token, both of which are passed to and used by the backend API.
| Searching for Recipes by their Names | Grocery List |
|---|---|
![]() |
![]() |
| Saved Recipes | Recipe View with Ingredients and Integrated Grocery List |
|---|---|
![]() |
![]() |



