Inspiration
Members of our hackathon team are from different states in the U.S.: Washington, Illinois, and Indiana. We came here to meet up and live together for four days. During the four days, we have a LOT of expenses - from paying for Airbnb to buying water and snacks. It's difficult and inconvenient to make all payments separately. And we found it troublesome to split our bills every single time when one person paid for the whole group. So we decided to calculate the net amount of money we owe to each other after the four days of the trip. What if there's an app that can help us keep track of our bills?
What it does
1. One-time Transaction:
- Split bills between several people for a one-time expense.
- Add the amount due to the balance portal of each user.
- Recording how much you lent, sent and owed to others.
- Can settle up the payments due in a single click.
2. Group Expenses:
- Form and join a group by adding members' phone numbers or inputting the group's unique code.
- Add a group expense so that each member in the group need to equally split the bill that the payer paid.
- Showing transaction history for the whole group.
- Keep you updated on how much you owe to each member of the group and how much each of them owes you.
3. Scanning Receipt:
- Can recognize the total amount paid when you scan or upload a receipt.
- You can simply add the expense to a group or one-time transaction by scanning the receipt of your payment.
How we built it
App: We used React-Native and Firebase to build the app. For the React-Native part, we use Expo to simplify the development procedure. And Firebase drives the whole app by using its authentication and realtime database services.
Receipt-Scanner: A combination of OpenCV and google cloud vision are used to detect and recognize texts in the image. The image is first preprocessed using OpenCV to grayscale, polarize, resized, and stretched to improve the quality of the image for better recognition. Then we passed the processed image into the Google vision API.
Challenges we ran into
- Scanning Receipt:
- Problem: Different receipts got different formats. For example, some receipts have their total amount after the word "Total", some after "Amount Due", some have dollar sign "$" in front of the number, some don't.
- Solution: Recognizing the greatest number that has a "." symbol in it, and has at most four digits before "." and exactly two digits after "."
- Problem: Integrating Scanning Receipt part of the project into our main app.
- Problem: Different receipts got different formats. For example, some receipts have their total amount after the word "Total", some after "Amount Due", some have dollar sign "$" in front of the number, some don't.
- App:
- This is the first time that we use Firebase as the backend API and database services for the whole app. It's a little difficult to discover and learn the features of Firebase in a short time. But finally, we overcome all the difficulties and built the app.
Accomplishments that we're proud of
We successfully complete the basic functionality of the app and we can actually use it tomorrow to split bills among our group members.
What we learned
- We spent a lot of time brainstorming. We listed a lot of ideas, but we challenge ourselves on a lot of aspects of each ideas. We eventually got it going, but we learned that we should be quicker on decision making and need to pick an idea and get it going.
What's next for Perpay
- Public Fund: make a public fund for a group of people. Keep track of what members buy using the public fund. (Especially useful with roommates living in the same apartment that share some common space)
- Get the geolocation of users and create a feature that detects same-time phone shaking actions, then automatically creates a group for nearby users. 3.Integrate our completed receipt total recognition 4.Generate a line chart for expenses over time.
Log in or sign up for Devpost to join the conversation.