Inspiration
With millions of college students sent home during the pandemic, some form of social interaction has never been more needed. This is where MiddleMeet comes in - a web application that allows people to meet up safely and effectively. A new innovation in the social scene, MiddleMeet uses an efficient equidistant algorithm to allow people to “meet in the middle” of their current locations - hence the name. It then suggests the best activities in this area - hikes, restaurants, parks, and more, all based on thousands of submitted reviews. Meet up with college friends you haven't seen since last year, with relatives that always push you to visit them, or with old high school buddies you haven’t seen since AP Gov, all while making sure no one has to drive farther than the other. With the planning left in our hands, all that's left on you is to meet in the middle!
What it does
MiddleMeet is a web application that will suggest activities for friends to do at a location roughly equidistant to all members of the party. You input the cities where you and your friends are from, and can get as specific as street addresses. Afterward, you can choose the type of activity you want to do, such as a hike or a restaurant. Then, you can select how many results you want and click submit!
We will provide you with a list of activities/locations to choose from, sorted by their ratings on Yelp. You choose the activity that interests you the most, and get the travel times for all your members to the location. You can also input your phone number and we'll text you the address of the chosen location!
How we built it
The first task of the project was to convert street addresses to coordinates so that we could use them to calculate the midpoint. Exploring different libraries and APIs, we decided to use Geopy, a Python library that quickly outputs the appropriate latitude and longitude coordinates. This library was simple to use and was robust enough to work with different types of inputs.
Then, we developed our midpoint algorithm, which was easy enough for two addresses - you just find the midpoint. But for multiple addresses, we went through multiple triangle and parallelogram centroid formulas until we settled on the simplest algorithm possible.
The next step was to find activities near the location. We used the Yelp Fusion API for this task. After you input a longitude or latitude and an activity type, we return a list of activities in that location. After we get the result query, we filter it and rank the locations by their Yelp rating.
A feature we incorporated was to get the travel time in minutes/hours from each person to the selected location. To do this, we incorporated Google Cloud and their Google Maps API. Using the API, we were able to calculate the travel time between two street addresses.
Finally, we send a text message to the current user of the application the street address of their location. Using the Twilio API, we purchased a number and incorporated the feature.
The backend code and implementation with APIs and programming libraries were written in Python. Meanwhile, the frontend code is written in HTML/CSS (with the Bootstrap framework) and Javascript. The forms created on the frontend make a post request to a Flask (Python) backend server. The Python program then runs the backend logic, rendering results in a Jinja2 template for the user.
Challenges we ran into
On the frontend side, some of the challenges we ran into had to do with formatting the results we wanted the user to see. We wanted to give the user a clean experience while browsing through our suggested locations. Additionally, loading a picture for each location/activity was a challenge at first.
Furthermore, working with Flask, it was difficult to figure out a way to store user inputs with each page reload/change. We had to figure out an efficient way to store user inputs without a database.
On the backend side, working with the Yelp Fusion API was a challenge at first. It took some time to figure out how we can convert out the latitude and longitude coordinates instead of a street address to get a list of activities, and switching from default values to user input was tricky as well.
The development of our midpoint algorithm took multiple hours. We thought about hardcoding different algorithms for n addresses (Basically for three addresses having a different algorithm, for four addresses having another different algorithm, etc.) We went through many iterations of triangle centroid formulas and parallelogram centroid formulas before we realized the simplest midpoint algorithm would be the best- we decided on averaging out every x and y coordinate.
Accomplishments that we're proud of
Showing the results in a clean and simple way is a key feature on our application. Additionally, working with the Google Maps API, Yelp Fusion API, and the Twilio API, we were able to make a fully functioning product with many key features. We are especially proud of being able to show the travel time to the selected location for each member in the party, and being able to send the street address of the selected location as a text to the current user’s phone number.
What we learned
Working with multiple APIs and libraries and combining them all into one project was something some of our members had not done before. We learned to make queries and sort through the result to find the information we were looking for. Additionally, we did not know how to develop a web application with Python as a backend language.
What's next for MiddleMeet
One of the simplest changes we could make is supporting more than five addresses, which our algorithm does but our UI doesn't. Eventually, the grand vision for this idea is to become a fully functioning social network, in which each user creates an account (which stores their street address) and is able to add friends, schedule/be invited to hangouts, and share/view content from meetups. This would further decrease the time and effort organizing a hangout would take, as it would literally be a click of a button away. We would further be able to suggest mutual friends to certain users, thereby furthering each user’s social circle.
Additionally, to aid small businesses in the pandemic, we plan to optimize our algorithm to prioritize local small restaurants, for example, in the area of the scheduled meetup. This way, you can meet with your friends while supporting a good cause.





Log in or sign up for Devpost to join the conversation.