Seek

The greatest memories can start with a simple notification

What is Seek?

Coming off of the heels of the pandemic, many teenagers and young adults agree that fun, spontaneous social interactions can often feel few and far between. In a world in which your relationships with your friends and family can be so vital for your mental well-being, it is crucial to facilitate those relationships in any way possible. BeReal, a wildly successful modern social media application, accomplishes this by facilitating honest, real interactions amongst its users through a virtual platform. However, this platform is purely virtual. With Seek, we hope to take the virtual social media space directly to one's physical relationships.

Seek's core functionality is simple. Seek is a social media application in which the user maintains a list of their close friends. When any of these friends are within a 50 meter radius, both users get a notification on their phone - a quest has started! The pair now have five minutes to find each other with one simple goal - to take a picture together! The pictures that the users take (two pictures total, one from each user) becomes one singular post that the users share that all of their friends can see!

It is often difficult to plan gatherings and such with friends, so these notifications provide individuals with an opportunity to initiate conversation or make plans with their friends. This can be fulfilling and facilitate the strengthening of interpersonal relationships. Users have the opportunity to not only get to have fun interactions with people who they run into (whether it is planned or not), but also to share these interactions with all of their friends, all packaged with a clean design and seamless user experience.

Inspiration

The core idea for Seek dates back to the developers' middle school days. Back then, we had a large friend group and we took silly, spontaneous pictures of each other and send them to our collective group chat, keeping track of who photographed whom and calling the spectacle the "Picture War". These pictures kept us in constant communication with each other, and every new picture sent came with a plethora of reactions and the start of a new conversation.

In our freshman year of college, we were introduced to a world where we met so many different people, but struggled to maintain relationships and easily lost contact with our new friends. The primary reason for this is because of the phenomenon (placed in layman terms)- "we have nothing to talk about." This creates an appeal for an application like Seek, which gives people something to talk about, forcing people to take that first step by using the excuse that they got the quest notification. People can then talk about how silly the picture looked, where they are headed, or even make plans.

Seek is an evolution of the concept of "Picture War", a means through which users can grow closer with friends without struggling through the awkwardness of initiating conversation. We intend on introducing that child-like and beautiful growth of friendship to everyone such that everyone can get a good laugh out of it and become as close as we were back then.

Features of Seek

Seek offers a wide assortment of features. Here is a list:

  • A robust main feed which shows all of your friends' quests, including both pictures and the other user that they had the interaction with
  • A maintained friends list, the ability to add friends from your contacts that are using Seek, the ability to accept friend requests you get
  • Geolocation features to facilitate our quests
  • Phone number verification upon login and signup
  • A memories page where a user can view all of their past interactions
  • Profile pictures for users which can be changed on the memories page
  • Notifications sent whenever two users are in close proximity
  • The ability to accept or decline interactions, with the quests only proceeding if both users accept
  • A robust working compass (which is also our logo!) that points directly to the other user during quests
  • A chatting feature that lets users chat to each other during quests, enabling the two to find one another
  • A camera feature that shows up when the users find each other that lets users take and upload their pictures

How we made Seek

Seek, by its nature, is a complex app with many moving parts. Seek relies heavily on real-time data in order to ensure that these quests can happen accurately, and, therefore, TiDB is the perfect real-time database for our app (we will expand on this further in a later section). Other than that, we used React Native with Expo to make Seek, ensuring that most of the core features are present on both iOS and Android. For the functionality of the app, we utilized a combination of Node.js with Express, TiDB, AWS S3 for image storage, and AWS Lambda for serverless efficient function calls. We also utilized Telesign for phone number verification and Firebase FCM + Expo push notifications for sending notifications to our users.

For the quests portion of our app, we utilized geolocation polling and stored the geographic coordinates with TiDB. Then, in our backend server, we frequently poll all friend pairings to see if they are close together in terms of geolocation - if they are, we initiate a quest and send both users a notification.

Naturally, this polling appears to be a cumbersome process. Therefore, in order to optimize this, we utilize AWS Lambda and the Haversine formula. This is a formula that can be used to calculate the distance between any two geographic coordinates in O(1) time and is preferred for calculating over shorter distances, making this the perfect formula for us to utilize. The aforementioned techniques, in combination with TiDB's efficient distributed data placement and full table scans, resolve our efficiency concerns.

Accomplishments we are proud of

We are proud of the overall personality that that app offers while showcasing cool functionality. We worked tirelessly to achieve the working geolocation and quest initiation functionality utilizing serverless functions, as well as sending notifications for this functionality- watching it all come together was incredibly satisfying. More than just those portions of functionality, however, we are pleased with the integrated UI/UX display and various features that create the personality of our application. We believe that our logo's presence not only as the logo, but also as a functioning compass during a quest contributes to this overall cohesion and maintains the compass theme while reiterating the title we chose- Seek! From the color scheme, to name, and even the logo, we created the application to have both a strong aesthetic appeal and interesting features that are inspired by popular social media while maintaining a unique appeal and entirely different goal. We hope that the personality that our app is filled with is conveyed through our presentation.

What we learned

Given that we are all college freshmen, we have never had an experience like this before. We learned a great deal of technical skills - how TiDB works and why it's great for apps like ours, how to use serverless functions with AWS, how to design good UI/UX with react native. But, more than that, we learned how to take a project almost fully from the inception of the idea to the last line of code written. Although I strongly believe that our project can be expanded on to become a true vast social media platform, I think we definitely reached a great point and we learned how to do that along the way. We learned how to accurately delegate work, manage our time, deal with unexpected issues, and more. I am sure that these skills are invaluable to us in the future, so I am glad that this hackathon gave us the amazing opportunity to learn them now.

What's next for Seek

We are aware of the greatest concerns associated with Seek. Naturally, any app that relies on location tracking can be a security concern. However, not only do core principles in our app design try to tackle this issue, but we also have future plans to ensure that users' location data is as safe as possible.

First, we already have implemented phone number verification, which reduces the chances of impersonation of others and have made it clear that Seek is an opt-in service. There is precedence for this - Snapchat offers Snapmap, a map where you can see the location of all of your friends who opt-in to the feature. Additionally, you can only add friends for whom you have a contact saved. This ensures that users can only be friends with people who they already know and prevents catfishing and other interactions that may occur.

Second, we plan on adding a feature in which users can go 'incognito' - a state in which they will have no interactions and their locations would not be tracked. This will be a prominent toggle that

Finally, we plan on adding encryption to all of the data to ensure that it is kept safe.

Other than security, there are some known issues that we would like to address in the future. For one, geolocation does not work accurately on iOS devices. This is coming from our lack of resources - we do not have access to a paid apple developer account or a macbook, both of which are required to have geolocation work on iOS devices. This simple infrastructure deficit made it impossible for us to develop geolocation for iOS devices, however all other portions of the application work.

Challenges We Ran Into

As we pushed our limits in creating this platform, there were many challenges we had to face. For the majority of us, this was our first time using React Native, so we had to learn the basics of the framework, and its very distinct intricacies compared to React. There were many challenges in this regard, due to the fact that we built the app for both iOS and Android, with each platform containing its own differences from screen sizes to the way the app is rendered. In the iOS version, limitations on our ability to use location data in the background (being that we needed a paid developer account to do so, as well as a MacBook) forced us to implement in a more Android-focused way, which was a challenge in itself, being that only one of us had an Android phone to test on. Moreover, a different challenge was with the backend framework of our databases. We had to learn how to use AWS in the form of S3 buckets, as well as Serverless Lambda functions, all of which were new to us.

How our application uses TiDB

Seek heavily relies on realtime geolocation data in order to make sure that users don’t miss their interactions, the very core unique feature of our app. TiDB, being an HTAP database, offers functionality to ensure that these queries are done as fast as possible with the OLTP functionality, and later perform our analysis on this data with the OLAP functionality.

By their very nature, social media applications (especially ones which rely on realtime geolocation data) need to be designed with scalability in mind and must use OLTP databases, as the amount of data increases massively with each user added. Therefore, TiDB’s focus on horizontal scalability makes it a perfect solution to these potential data/speed requirements.

In order to figure out if users are close enough for an interaction to run, we need to query an entire table in the database very frequently. Therefore, TiDB’s cost effectiveness is vital in ensuring that this process is as cheap as possible while still being incredibly fast to ensure we do not lose out on any data.

NOTE: the github link is only available to the github account held by the judges for testing purposes.

Share this project:

Updates