Inspiration

Once you finish eating with a group of friends, especially when the group is large and the restaurant can't split the bill, it can be hard to figure out how much each person pays for the meal. We wanted to create an app that would streamline the bill splitting process and ensure everyone paid the proper amount.

What it does and how we built it

The app takes a picture of the receipt and uploads the picture to an AWS S3 Bucket and uses AWS TextractTM to get the text off of the receipts. It uses this text in an AWS Lambda function to identify which items are ordered items and their associated price. These items and prices are stored in a database which also stores the names of the people associated with each item and an id value for each entry. This database is then accessed by our app through an API call, which then displays the item name, price, and people associated in a table. These databases are run on an AWS EC2 instance that was created with Elastic Beanstalk. From this page, the user can change which people are associated with which items. These updates also push to the database. Once the selections are confirmed by the user, the app will display a final screen which displays the items and total charge for each person. Although currently not possible due to Venmo having a closed API, we originally intended for these final charges to connect to Venmo to charge each user.

Challenges we ran into

We ran into a lot of issues running the AWS Lambda code such that it could access the AWS S3 Bucket we set up. None of our team members had used AWS in any capacity before, so all of the necessary steps with IBM users, permissions, and other aspects along that vein were hard to figure out on a time crunch. Additionally, the front end of the app ended up being much harder to develop than we initially expected. Much like AWS, none of us had coded an app before and we decided to use React with Expo. However, this created a lot of weird syntax errors we had never seen before and led to us being unable to create relatively simple page structures (namely a table) that were necessary for our app. Though we were able to succesfully take a picture with a camera, we were unable to fix the table based front-end issues in time to connect the front and the back-end, so although there is a working back-end and usable front-end the two are not yet connected.

Accomplishments that we're proud of

We're very proud of the progress made with the various AWS features we used and the databases. We went from not knowing anything about AWS to successfully using Python code to upload multiple images to the bucket, analyze and parsing them with the AWS Lambda function, and uploading the data to our database.

What we learned

We learned a lot about how AWS, especially Textract, Lambda Functions, and S3 Buckets work. Additionally, we learned how to create a Flask database and REST API. We also learned that App Development was a lot harder than we expected, as we thought that previous coding knowledge would transfer over a lot better.

What's next for Moven

We hope to learn how to properly implement the front end of our app to be hooked into the back-end. The camera function, though somewhat functional, isn't at the level or as aesthetically nice as we hoped it would be. In addition to this, there are the poorly implemented pages with the receipt items and the final costs for every person that we intend to finish after this Hackathon. After those pages are done, we hope to figure out a way to get access to Venmo APIs or otherwise implement Venmo within the app to allow the final charges for everyone to be directly ported to Venmo.

Built With

Share this project:

Updates