We all tend to take a lot of things for granted. While brainstorming solutions to connect people during social distancing, all of the ideas we had were to connect with friends or even strangers, especially during a time like this. But weirdly enough, not once did we think of connecting with our families - which we realized was exactly the problem. So many of us spend our time at work or school, always wishing we could hangout more with our friends and even get a break from our family - but what better opportunity to get to know those literally closest to us than while stuck in quarantine?
🤔 What it does
FamJam is an Android app that helps families, roommates - anyone who lives together, to get to know each other in a fun way. Every “family member” will receive two daily missions and one mission weekly. The first daily mission will be sent in the morning while the second will appear at a random time for you to rack up bonus points, to encourage you to put family first, and of course to see you scramble. Every mission involves brightening up someone's day or doing something to get to know another member better. For example, your mission of the day might be to give your mom a hug! The weekly mission will involve the entire “family”, with anything from playing soccer together to having a profound discussion about what family means to them.
After completing a mission, you immediately earn points, the harder the mission, the more points you get! Complete more missions and you can climb to the top of the leaderboard 😎. At the end of the week, the member with the most points wins a badge. Badges can also be earned through other methods, just to keep members on their toes. But be warned, there’s also a laziness badge.
The member with the most points by the end of the month receives a present from the other members. Though of course, everyone's a winner when you’re strengthening genuine connections with those around you!
🧰 How we built it
This is the second time our team has ever used Android Studio! Our last hackathon was our first time trying to build an Android app. Everyone took the lead on learning a certain element such as UI/UX design, front-end and back-end. We were amazed by how much we all learned throughout those two days and we wanted to challenge ourselves again. This time, we all took leads on a different component. Those who focused on design before, worked on the back-end now and vice versa - we really wanted to push ourselves while being able to create a project that we were passionate about.
The first day after finalizing our idea, we all shared a Figma document and over call, one of our members taught us how to use the prototyping tools and gave us design tips. For the initial setup of Firebase and connecting it to our app, another member wrote up a document with a structure, steps, and advice on how to implement each component.
Each of us had to study up on different areas, whether it was tinkering around with tutorials or reading documentation. Nevertheless, we really took advantage of each other's skill sets to grow our own. This was extremely effective as by the end of the first day we had finished the UI/UX designs, had a quarter of the app coded and our database structure outlined.
😅 Challenges we ran into
There were many challenges we ran into while making this app, especially since this was our most ambitious project yet, with more screens, features and components than anything we’d ever done before! Some specific challenges we’re proud to say we’ve overcome were:
Data Structures: Although we're super excited about our app features, we quickly realized that we would require a complicated backend structure to accommodate authentication and data storage using Firebase. In particular, it was confusing to structure relationships between different nodes containing user and family data. We ended up using foreign keys, custom Java objects and lots of testing to make our app work.
Layout Inflater & RecyclerView: To populate our views with our Firebase data, we needed a way to change views dynamically. It took many lots of tutorials, discussions with teammates and searching on StackOverflow to make this aspect function properly.
Image URL firebase: This was definitely one of the most frustrating challenges we ran into and definitely tested our resilience - how could something as simple as loading an image via it’s URL be so hard? Implementing this took several tries. We researched and compiled a list of various strategies to go about implementing them, dividing and conquering them amongst us to figure out which ones would work best. We tried everything from extending the Async task to using the Picasso library. It was by troubleshooting together that we were most effective because we could contribute new ideas and push each other forward.
Customizing Mission Card designs: While in our last project we went with a more generic card block, this time we really wanted to make our app feel unique with new layouts and dynamic styling! We had to get crafty with relative positioning, background colours and button styling. Since we also wanted our cards to change strokes, colours and assets depending on the type of mission you receive, we had to integrate a lot more Java backend than before, switching out elements after checking out mission statuses and more! It was complicated and overwhelming at times, but seeing it all come together made every minute worthwhile.
🤩 Accomplishments that we’re proud of
Some things we are really proud of is definitely pushing ourselves out of our comfort zone into areas we aren't familiar with. This includes working with the backend in firebase, logins, google authentications and working with inflators.
UI/UX design is another feature we are very proud of. We made sure to create multiple versions to create a cohesive and streamlined design that would be friendly, inviting and calming to users. In order to do this we experimented with a variety of soft colour palettes that were muted and gentle to the eyes in addition to making countless iterations of different cards to see which would fit FamJam best.
Teaching our own knowledge as it’s quite difficult to articulate a concept when we, ourselves, were beginners. However, today every one of us taught a skill to the others. This not only made everyone more well rounded but also surprisingly taught us that teaching is a great way to learn. Through visualizing the problem multiple ways when someone couldn’t understand, we had a much more organized understanding of concepts that used to be difficult.
🧠 What we learned
Since this was our second time developing an android application, we already learnt some of the very basics needed to get an app running. However this gave us an opportunity: unlike our last Android project where we were unfamiliar with these basics, we were able to feel confident enough to switch our typical assignments. From this, we were able to learn how to implement a working User Login in Firebase with Google sign-ins, Layout Inflators, and using Figma more intensively with masks, blending modes, and creating vector art.
🎓 What's next for FamJam
We are planning on implementing tracked statistics through the completed missions to determine how close members are to each other, allowing them to “level up” in closeness as they do more missions together! This would help users understand who they are closest with, as well as gear the app to give targeted missions depending on how close they are. For example, members who aren’t that close to each other might be given easier missions to start off!
To make things both more accountable and fun, we want to add a feed of all the missions that your family members have completed recently. That way, if someone tries to mark a mission complete when you know they didn’t do it with you, you can call them out for it and they lose their points!
We also plan on adding custom missions that can be randomized and given out to members, giving the option for ‘families’ to come up with their own missions. This would make each experience more personalized and more fun, allowing for inside jokes and further improving how tight knit everyone is.
We recognise that an app that allows for closer relationships to be formed has uses beyond being used only with those we are stuck with. We plan to add the option for users to have multiple “families” with their close friends, or other people they hope to become closer with. Especially for situations where the members of a family or friends are long distanced, we also plan to give an option for members to select virtual missions that can be completed even while apart!
Furthermore, we’d love to publish the app to get feedback from the public. We could then identify how to improve existing features, code new ones, and add better incentives to use the app for future reference.
Lastly, with the COVID-19 pandemic taking place, not every family has had the privilege of being at home, whether they are unable to travel or a frontline worker. Once we finalize and publish the app, we hope to donate the Google Ads revenue towards charitable organizations helping to support families and frontline workers impacted by the coronavirus.