Inspiration
Over the summer, we ran into an issue where we went on a large group trip and accumulated a bunch of debts to each other. Keeping track of who owed who became quite cumbersome so we needed a better way. We looked into what existed and we saw apps like Splitwise that looked promising - but were dependent on one key issue: they assumed all users were willing to go through all of the work to download a separate app and create their own accounts. This was a huge assumption for large groups where if even one or two people don't want to go through the effort, it messes up the optimization algorithm for everyone. We needed an alternative to all users having to create an account.
What it does
Our application allows for varying degrees of commitment. Users can create accounts for opportunities to create their own group and getting admin permissions for their group (deleting group, etc.). They are also given the opportunity to share their group with others. This gives you a link to send to your friends so they can join as another type of user: Authenticated User. Authenticated users are also considered app users. Both owners of groups and authenticated users that are part of a group have the ability to add transactions for each group and assign people to those transactions. The third type of user is guests. Guests are users that don't want to create an entire account because they don't see the need. Instead of interacting with the react native mobile app, they interact with the app through a react web interface. Every time a group is created via the mobile interface, an endpoint is created in the React program with data populated from the group as specified in the domain resource. Therefore, guests can view the transactions list without having to log in. All in all, owners are allowed to delete groups. Authenticated Users and Owners are allowed to view the groups they are in and add transactions in each group. Owners, Authenticated Users, and Guests, are able to view a list of all transactions and calculate the optimized method of paying each other to minimize payments.
How we built it
We used flask and google cloud serverless functions to host our python backend that essentially calculated the most optimized route for the last number of transactions. For our frontend app, we used React Native to develop the mobile application with firebase realtime database to edit the database. To log in, we used Auth0. We created our guest version (web app) using react and hosted that on Vercel.
Challenges we ran into
We ran into a multitude of challenges when it came to the scope of this application. When initially setting up the database schema, we were not sure how to scale it so that all users would have the permissions as intended. As we had to juggle between testing all of these roles, it got very confusing very easily. The constant merge conflicts were certainly not a help either.
Accomplishments that we're proud of
We were proud of the seamless integration of these different roles. While most applications require users to be in one authenticated state, we were able to circumvent this and work on a unique project where not all users would have the same permissions based on the role they were subscribing to. We are also proud of how we were able to divvy up this entire project in a way that made sense, it seemed like all of us were contributing significantly to the end goal.
What we learned
We learned that ideas don't seamlessly translate to tasks. It may seem like an idea is a simple UI fix or a new feature that shouldn't take too long, actually implementing that idea and integrating that with everything else was always so much more difficult. We learned to be more patient and understanding, that even the simplest of changes should never be underestimated, so there should always be failsafes to account for if a task took more time than necessary.
What's next for Splitech
The next step for Splitech would be having more integration with venmo and zelle, so users can easily find those associated with the users they have to pay back. Also, we could implement SMS messages to notify people via text when all the transactions have been accumulated to tell people who owes who.
Our demo is here: https://drive.google.com/drive/folders/1yO_GDm8Pn_G2WUzQzh9TQWO4Y6oA71kt?usp=drive_link
Built With
- auth0
- firebase
- flask
- google-cloud
- javascript
- python
- react
- reactnative
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.