Making friends at college is hard. You don’t know anyone going in, it takes a lot of courage to just talk to someone new (especially if you’re an introvert), people don’t hang out before or after class, etc.. And as if it wasn’t hard enough before, now everything’s online due to Covid, so you don’t even get to see any of your classmates. In addition, with many schools going entirely online for the fall, incoming freshmen and transfer students in particular are likely to have a hard time connecting on campus without events like Welcome Week that were designed to help students make friends.
Therefore, we created Classmate Connector to help connect students who share the same classes, have similar personalities, share the same interests, etc.. We wanted to focus on finding friends in a way that would not be the same user experience as a dating app, and would hopefully even have a broader impact than just connecting two people. To keep our app focused on finding friends and not dates, we elected to NOT use any photos or demographic data as part of either our recommendation system or as something that determines if two people connect or not. This in turn should reduce unconscious bias based on factors like appearance changing whether or not two people want to connect. Therefore, we hope that Classmate Connector not only helps to connect people during online classes due to covid, but that it has a future to help students make friends and help universities foster inclusivity, even after the return to live classes.
What it does
To put it simply, Classmate Connector determines a similarity score between each pair of two users at the same university, and displays relevant information like a student’s classes, interests, and a little about their personality to prospective friends. From there, if both people are interested in getting to know the other person, the app shows both users the other student’s email, so they can get in contact.
More than just bringing similar people together, however, Classmate Connector’s matching algorithm is designed to connect students who have a higher chance of having classes with each other, orbeing together on campus together once campuses reopen. To do this, information like dorm, class standing/level, and class schedule are weighted into the algorithm more heavily than a single question. Consequently, we think we have balanced the algorithm to find the people users are most likely to connect with: similar enough in scheduled to be able to discuss classes and study together, but also similar enough personality wise and interest wise enough to be able to foster conversation about more than just school.
Note that Classmate Connector is not a messaging service in and of itself. We all are spread across so many communication platforms already, and we didn’t think that adding a new messenger service to the mix would make things better for the user. On the flip side though, we didn’t want to just give out the user’s phone number either, so that users still had some privacy using Classmate Connector, and had control over who they talk more with and where. One of the other major concerns was that there have been a lot of news stories about how anonymous, individual school chat services are hard to regulate to prevent cyber bullying. By providing email as the main form of contact, it limits conversations to one-on-one (at least without reply all), and helps to prevent the environment from becoming toxic. Emails are also transparent to school administrators if need be as well. By simply providing user’s emails to prospective friends, they can control how and where they feel most comfortable communicating, and which services are easiest for them.
How we built it
The front end of our app is built using Dart and Flutter, in order to allow it to have robust, natively compiled cross-platform capabilities. By using Flutter, our app runs on iOS, Android, and Desktop, allowing people to use the app from any device. It also allowed us to work with more complex components than most web apps have, such as the swipe gestures for pairing with other students.
The back end is built using Google Cloud Run functions, so that no matter how much our user base grows, everyone gets the same high-quality, fast, and easy to use experience. We also use Firestore as our main database, which once again provides high availability and deliverable to all of our users, however many that may be.
Challenges we ran into
All things considered, this was a surprisingly straightforward hack. However, where we ran into our biggest challenge was in designing for scalability and cross platform support. Because we were working off of the
master branch of flutter (so this is even before it is released for alpha testing) so we could support desktop applications, there were very few libraries that we could use to accomplish each task. As a result, we needed to implement all of our database handlers by hand, and pass them to Cloud Run functions to actually connect to the database. We also spent a lot of time debating between automatically refreshing user’s
toApprove and `matches’ lists, but our concern was that for a lot of users on the system, each time a new user was added, every other user would get a similarity score between them and the new user. This means that the number of pairs scales exponentially with each user, which would cause massive spikes if we had each device re-pull from the database every time there was an update. Instead, we implemented swipe to refresh, which we thought provides the same basic experience, but with lower latency and lower spikes in demand.
Accomplishments that we're proud of
We’re really happy with how the UI turned out in the end. It is clean and easy to understand, yet at the same time expressive. Most surprisingly, we were able to fit with the Material Design UI and Accessibility spec, even with all of the custom widgets we created, which ensures our app is easy to use, and scales across all devices.
From a back end perspective, we’re really proud that we got all of the different features that we wanted built long before the demo, so we had plenty of time to troubleshoot and make them more robust. With this extra time, we were able to implement some robust front end features like comprehensive error checking before sending data to the database, so we could catch mistakes before they brought down the app for a user. We also had enough time to hook everything up to Flutter (which we’re really proud of as well), in spite of the complications that come from needing cross platform support for everything we were doing.
What we learned
This was our largest and most complex Flutter UI that we have created, and we learned a lot about managing and passing data between widgets, and how to structure the project in order to keep the code organized for the future.
What's next for Classmate Connector
We have three main goals for the future:
- Support more types of questions, and add more questions to the app. The more data we have, the better we can connect people together.
- Allow more flexibility so that high schools and middle schools can also use the app, without aspects like the dorm selection getting in the way if they don’t apply. The problems of meeting new people are the same across each age group, and we would like to make this an app to use when transitioning between schools at any educational level.
- Continue to refine our matching algorithms to provide better matches to users with the data we already have available.