We have all struggled with waking up early to get in that workout or attend that 8 AM lecture, and often the only thing that can really motivate us is our friends... and money. These fundamentals of our app are inspired by the real life story of Tejas and Viraj who made a bet to see who would skip class first. The idea of losing money, enforced by having a friend to keep you accountable, motivated Tejas and Viraj to attend all of their 8 AM classes for the first week. We decided to bring these motivators together in an app called Cosigner, where friends can come together to pool money to see who slips up in accomplishing their daily goals.
What it does
Cosigner allows you to create groups with your friends with a collective pool of money. Each person has their own tasks that they want to accomplish, and accomplishing more tasks means you get a more significant chunk of the pool. Think you can accomplish more of your tasks than your friends? Put it to the test by downloading Cosigner!
How we built it
The app is built in Android Studio and we use socket programming to connect to an Amazon EC2 server that allows us to make queries against an Amazon RDS database. These queries provide information regarding user balances, groups, and goals. We used Java to construct classes from this raw data that can be converted into JSON string objects. We used Google's GSON library to serialize and deserialize our Java objects to and from JSON files. We found this technique to be much more scale-able as opposed to compressing objects to byte streams. This is because IOS and web development platforms universally support JSON. Using this technology, we were able to transmit client requests and server output over a TCP network.
In addition, we implemented Google Sign in using the Google Cloud platform. This required some knowledge with the Google Cloud ecosystem, OAuth2.0 authentication, and SHA1 keys, but we were able to seamlessly integrate a google account into our app. This of course relies on Google's Firebase platform. Our app accesses several fields from a resulting google sign in object to provide the information needed for a user to exist in our database.
We have also implemented PayPal into our project. PayPal was necessary as it provides a universal incentive for users to become their best selves. We used the PayPal SDK to allow clients to submit money to our business Cosigner account. This was all done in a sandbox which can easily be shifted to a live platform. We are also currently trying to use the Payouts API through Java-executed cURL commands to allow users to be paid back based on tasks that they achieve.
Challenges we ran into
We had a lot of challenges in sending data to and from the server from different machines over the same network. Android Studio handles client side server requests slightly different than traditional Java as there are many extra layers of abstraction placed on top of the native Java code. This was especially difficult since none of us had any prior experience with socket programming and serializing objects to easily send over data. We also had to work hard to figure out how to configure the EC2 server with Java server code, since this is done in an environment that none of us are familiar with. We consider these difficulties necessary impediments since these skills will prove useful in future hackathons and personal projects.
In general, it was also difficult implementing other APIs. We tried to integrate snapkit, but we had to wait for an access token that simply never arrived. Integrating the PayPal SDK was relatively easy, but learning how to use cURL and Postman to utilize the Payouts API was difficult, especially since we needed this to work in our server's Java code. Integrating the Google sign in was also tough since the SHA1 key needed is unique to the machine generating the apk, so only the apks generated by one machine can be used for google sign in which made testing difficult.
Accomplishments that we're proud of
It was incredibly exciting seeing one of our group members input a value on their phone, and seeing it appear on another screen solely through the network connection. It seems like a small feat, but the complexities of sending data through streams and TCP networking made this achievement all the more welcomed. And with this simple stepping stone, we are able to send information to our server that allows us to make queries against an Amazon RDS service. We feel that this is a very valuable achievement that has allowed us to extend our computer science knowledge beyond the classroom. It is the first time that we have really been excited by a project enough to code it for a full 36 hours.
What we learned
We have learned a lot about basic networking protocols and how information is processed. Creating this app required a knowledge of IP addresses, input/output streams, as well as how to host servers using AWS APIs. On top of these specific technologies, this project has also taught us how to work as a team and how to divide components up among different members of the group. The software development cycle is intrinsically different when involving a group as opposed to an individual. A project of this scale taught us the importance of technologies such as Git to manage edits and prevent error-prone code from making it to the main branch.
What's next for Cosigner
We intend to make Cosigner a household name. In the same way everyone just knows what Facebook is, everyone will know about Cosigner. We want to one day bring Cosigner to the app store as an app that combines the younger generation's attraction to social media with productivity. Typically social media detracts from a user's productivity as a user can get lost in scrolling through endless pictures on their feed. But with Cosigner, we want users to get lost in how they can optimize their schedule to make themselves more productive. An ambitious target for sure, but we feel we have an advantage over older generations inventing social media platforms since we understand the target demographic better. We also understand what it takes to keep motivation levels high to accomplish a goal. Remember the name Cosigner since one day you are going to hear about it again, and you might just have the chance to say that you got to see version 1.0 at Bitcamp 2019.