Many restaurants in Waterloo do not take credit card or operate entirely cash-only. As someone who doesn't carry cash, I always rely on my friends paying for me when we head out to an aforementioned restaurant. This requires them to take a photo of the receipt, send me a copy, record on a shared spreadsheet, and I'll pay them through various means at the end of each term. This is time consuming and error prone. Why not automate the process?
What it does
Deevider utilizes OCR (with tesseract) to recognize dollar amount on a receipt that you scan with your phone. Then you will be able to select a person in your group to assign such cost. Finally you choose who paid for this bill and write a short note for reminder. That's it! Now you can keep a clear history of receipt records and ready to pay back based on Deevider's automatically calculated amount.
How I built it
The iOS client is written entirely in Swift, using tesseract for OCR, alamofire for network communication, and various smaller frameworks to expedite the hack. This project involves a server written in Node.js that stores all information inside a clustered cockroachdb. By having all information centralized on the cloud, everyone in the group can access the most up-to-date information anytime, anywhere.
Challenges I ran into
Tesseract for OCR is not very accurate. If the receipt was not taken with good lighting conditions and a perfect angle, some dollar amount might not be correctly recognized and thus fail to be parsed by my algorithm. In optimal condition, the algorithm can identify the items (from a continuous string of text) and immediately stop when hitting the total amount so we can distribute previous money amount to appropriate member in the group.
Push notification was originally planned but due to limited privilege of a free developer account, it was not possible to test and demo. This is definitely a great feature so we can notify each person in real time when a person in the group submitted a receipt info.
Accomplishments that I'm proud of
Having spent much time away from iOS development, I'm glad to be able to take this opportunity to explore. Also, Deevider has been a solo project and thus I felt great to have carried through planning, designing, coding, and so on -- all the stages. It also allowed me to understand how to use Node.js to handle form submission, especially file uploading (receipt images). At the same time, I also get to explore cockroachdb and integrate it into this project.
What I learned
Using various libraries on iOS, and, in general building, an api in Node.js that bridges the app and the data in cockroachdb.
What's next for Deevider
The new iOS brings the feature that allows peer-to-peer money transfer inside the message app. It'd be a great integration as it totally eliminates the need of taking care of the changes and simply make transactions smoother. Of course, the very next things are to optimize text recognition, enable push notification, and allow dynamic group creations and so on. With more users it'd be likely to need to scale up the server but I'm confident that the current configuration would be easy to do so.