We all agreed that in situations such as car rides, road trips, small social events, it is often very difficult to effectively share control of the music that is being played. Often times the device which is controlling the music will have to be swapped out in order to play someone else's music. This process can be awkward and cumbersome, so we knew there had to be a better way. We looked at some of our favorite music streaming platforms such as Apple Music, Spotify, and Soundcloud. We didn't really see any features that truly satisfied the problem we were trying to solve. We found that Spotify had an API available which was very well documented and supported. We decided to build our service based on this API.

What it does

Campfire allows users to propose new songs to play. These songs can be added from existing playlists or the users own library of songs. After adding a track, other users will be able to upvote or downvote the suggested track in order to increase it's position in the queue of songs to be played next. The service is built around the idea of a central "DJ" who has main authority over the music being played. The idea is that the DJ will be the one who connects their device to the speakers. The DJ will be the founder of a "camp" instance, and will have the ability to select a playlist which will play in the event that no one else has added any songs. From the perspective of other users, they will be able to join an existing camp by logging into their Spotify account. They can then browse their library in order to find tracks which they want to add to the collaborative queue.

How we built it

We started off with creating a server that was hosted on GCP which would host the website for everyone to connect to. This server was running a clean Ubunutu install and would be used just for running the website and storing any data. Spotify Web API was integrated into the page in order for each user to login to their spotify account and for us to keep track of who is currently connected. The website was created using React, Node.js, and Javascript to create a responsive and mobile friendly design.

Challenges we ran into

This was only our second time working in web development, so we experienced many of the common misunderstandings and growing pains of learning a new platform. In addition to this, we were not very experienced with using Google's Cloud services, so interacting with the server was a bit of a slow learning experience.

Accomplishments that we're proud of

We were very happy with our concept because this is something that we would actually continue to use outside of the hackathon. This was a great opportunity to expand on our skills, and despite our challenges, we felt that we learned a ton within this very short time frame.

What we learned

We learned that good planning is crucial to reaching success in your project. In our first hackathon, we started developing with barely any plans. This meant that things were very inefficient and that we wasted a lot of time. This time around, we made sure to have a good plan and a solid understanding of our goals before we started any programming. We sketched out the basic framework of our idea on a whiteboard to get a clear overview of the project and what components it was composed of. We then began to divide tasks between the group members and decide the order in which components should be developed. In order to help with our collaboration, we made a central github for the project. Creating branches within our repository helped to organize things a bit further, and ensured we could all work separately without getting confused on what changes had been made to shared files.

What's next for Campfire

In the future, we hope to develop a more robust set of functionality for Campfire. We would like to implement some more of the basic features of Spotify into our service so that it can be used without compromise in comparison to the normal Spotify services.We also want to make a more organized and fluid UI experience, especially centered around displaying the queue.

Share this project: