Being a college student is stressful, and working a part time job on top of that only adds to the lack of time that students deal with. Between class and work, the last thing students, or anyone else dealing with a hectic daily schedule, want to do at the end of a long day is try to remember what they owe their friends or what they spent money on. But keeping track of these expenses is essential for anyone looking to take long-term care of their finances, and doing so shouldn't be difficult or stressful. This is why I created Troop, to make keeping track of expenses easy and efficient.

What it does

Troop is centered around the idea of keeping track of group finances. By allowing users to create groups and add their friends to these groups, it provides a platform to easily and efficiently track the expenses that inevitably pile up when spending time with friends. The main page allows users to browse through different groups that they are a part of, not limiting users to being a part of only one group, since people usually have different groups of friends. When a user clicks on a respective group, it takes him to a unique page for that group, where they can see the total cost of the expenses within that'll group, and the calculated cost per person within the group. By clicking on the expenses tab, users can review, add, and delete expenses at will. Each expense even has a date of creation so that the user can know when he spent that money. Likewise, within the members tab, users can see who is a part of the group, and add/remove users at will. When a user clicks on a member of the group, they will be taken to a page that shows them how to pay that user, as specified by that respective user.

How I built it

The first part of building this project was creating users, since that would be the foundation for the app. Upon creating users, I needed to create a model for groups, deciding what the main characteristics of a group would be. After doing this, I needed to connect everything to Firebase, the database that would allow the application to store the information necessary for each user and his respective groups.

Challenges I ran into

The most challenging aspect of this project was implementing all the logic for connecting to Firebase. There were several times where Firebase, coupled with the syntax flow of Swift, gave me several issues. For example, the fetching of data from Firebase and passing of this information between view controllers often resulted in a lot of nil values, which was always stressful to see. The structuring of the data was also stressful, since it was necessary to convert a User model from Swift to a series of Strings, Dictionaries, and Arrays for Firebase. Another challenge that I was unable to overcome was allowing users to connect their accounts to the bank. I wanted to allow users to pay the amount that they owed, and then redistribute money if another user joined and the cost per person lowered, but I was not able to do this.

Accomplishments that I'm proud of

Working on this project provided me with an abundance of information that I am extremely grateful for. I am proud of becoming comfortable with Firebase and learning how to properly structure and store information into a database. I am proud of strengthening my knowledge of Swift programming and learning the UI aspect of building applications. But the accomplishment I am most proud of is having a finished product that I built from nothing but a blank swift file titled "User.swift".

What I learned

Working on this project, I learned so much about programming and application development, but the knowledge I acquired extends far beyond Swift syntax and Firebase. I learned the importance of self-sufficiency, doing research to find a solution rather than quickly going to an advisor for help. I learned the importance of perseverance, meticulously dissecting your code to find the exact location of an error rather than throwing in the towel and claiming there is no solution. But most importantly, I learned the importance of teamwork and selflessness, putting your pride aside and allowing your peers to help you or provide a different perspective when you cannot find an answer. Without my peers and instructors, the completion of this project would not have become a reality.

What's next for Troop

The next step for Troop is increased functionality. The first version provides a solid and clean basis for future growth. Perhaps the re-structuring of data to allow increased functionality and allow for more specific tracking of individual expenses. In order to take Troop to the next level, I will focus on allowing inter-user payments, seeing as not allowing users to pay each other may prove to be a stumbling block for the app. Troop has potential for growth, and future versions must stay in line with this potential.

Share this project: