Feb, 15 2023
In a classic case of "this should only take a weekend to build", one month later I am finally ready to launch my latest side project: Tabbit.
The concept is a SMS based bot that will help with shared group expenses. I have seen these apps come and go.
My hypothesis with Tabbit is that these apps die because it is difficult to convince everyone in your group to download a new app simply to divvy up expenses.
I wanted to build an experience that is untethered from native apps.
So, I settled on SMS using Twilio. I figured that since you would be texting your group of friends a picture of the receipt anyway, why not just text the picture it to Tabbit instead?
Initially, I was hoping you could just include Tabbit's phone number in the group chat with your friends and have Tabbit send a text back with an itemized list.
Users in the group chat could then respond with an itemized list. However, this concept fell apart when I found out that Twilio no longer supports group messages due to changing SMS standards.
After some thinking, I settled on the idea of a mobile first web app to display the items from the receipt.
The process would be as follows: send a text to Tabbit with an image of your receipt, get a unique link as a response, then forward that link to the group you plan to split the bill with.
That's all well and good, but if I can't get an itemized list from a picture there's no use in building this.
I have some experience in machine vision from building my coffee grind analysis app, but I really didn't want to have to spin up an OCR up from scratch.
Searching around I came across AWS's Textract service and was blown away by its accuracy. Textract could handle almost everything I threw at it.
With most of the open questions solved, I started to piece them together. The final architecture:
(1) User sends a text message to Twilio with receipt picture
(2) Twilio calls my serverless webhook
(3) The serverless function runs the OCR and makes the database entry with the receipts details
(4) A link is sent back to the user for a NextJS webpage that displays each line item
(5) Once on the webpage, "saving your order" makes another serverless call to update the receipt details in the database
After a bunch tweaking with the UI, we are now live. Now how do I market this thing?