We love listening to music with friends. However, only one device is capable of controlling the song queue normally. With Groupify, anyone can add onto the queue and play their favorite music. The First Amendment tells us that "Congress shall make no law respecting an establishment of religion, or prohibiting the free exercise thereof; or abridging the freedom of speech, or of the press; or the right of the people peaceably to assemble..." This level of strength and freedom that the constitution has given the people, has sparked a flame inside of us. The people have the power. Why should one person or organization decide on a song? It is the people's fundamental right to creative freedom!

What it does

This program allows a person to host a Spotify session. People can join the session and suggest what songs to be played. The host gets to approve/disapprove the song. This allows either a group of friends, a party, or even stores and restaurants to allow the people to pick a song to be played with ease. The approve/disapprove filter is perfect to help rid of unwanted or inappropriate songs for the setting.

How we built it

For the webserver, the client side was built with javascript, html, and css. The server side was created with flask and python. Spotify API and the library, spotipy, were also used as well to get the information required. A SQL database was created. Google cloud was used to deploy the database and the webserver.

Challenges we ran into

We had little to no experience on using APIs so learning and implementing the Spotify API was a struggle. We've had many dead ends and wasted hours on writing code that we didn't need. Git was not complying with a lot of our demands and often caused us to lose a large chunk of time.

A huge challenge that we faced was the authentication with the Spotify web API. Initially, we thought that we could use the authentication system that Spotify had. However, this turned out to be false and we had to write our own authentication routine and API.

Another challenge that we faced was polling the web server. So in order to get accurate updates, the database needs to be polled which then needs to poll the Spotify API. To get this to work, we had the client poll the web server in Node JS via POST request which then made calls to the Spotify API and update the client’s status

Accomplishments that we're proud of

Successfully setting up the web server was no easy feat but we still managed to get it to work while giving it a killer front end for the software that's really intuitive. The authentication of the of the API was a challenge and the lack of features related to interacting with the Spotify queue forced us to rely on the data base to store the info. Also figuring out when the next song was being played was a lot harder than it seems because there was no method that allowed you to know when the song ends.

What we learned

We learnt so many skills throughout the 24 hours we have worked together as a team. Not only have we learn a lot about each other, but how to use and manipulate APIs, learnt about web development, enhanced our skills with sql and google cloud and we learnt a lot about flask. Most of us never dealt with web servers and API's but this experience brought us together as we learnt together as we pushed though in delivering the software we were dedicated to do in just 24 hours.

What's next for Groupify

We want to include a like/dislike system to every song and save it to the database. This allows the host to know which songs are not liked by the people so that the host could remove it from the queue. This information could also allow us to place the songs on an exponential probability curve where more liked songs are more likely to be played. This allows for a more varied song selection but the most liked ones will be played the most. We would also like to implement a banned song list on the database where the song is automatically removed from the Spotify search for that session. Although already clean, our front end could use some visual improvements if we want to market the product. We also want a proper url.

Share this project: