What it does
MusiCrowd is an interactive democratic music streaming service that allows individuals to vote on what songs they want to play next (i.e. if three people added three different songs to the queue the song at the top of the queue will be the song with the most upvotes). This system was built with the intentions of allowing entertainment venues (pubs, restaurants, socials, etc.) to be inclusive allowing everyone to interact with the entertainment portion of the venue.
The system has administrators of rooms and users in the rooms. These administrators host a room where users can join from a code to start a queue. The administrator is able to play, pause, skip, and delete and songs they wish. Users are able to choose a song to add to the queue and upvote, downvote, or have no vote on a song in queue.
How we built it
Our team used Node.js with express to write a server, REST API, and attach to a Mongo database. The MusiCrowd application first authorizes with the Spotify API, then queries music and controls playback through the Spotify Web SDK. The backend of the app was used primarily to the serve the site and hold an internal song queue, which is exposed to the front-end through various endpoints.
Challenges we ran into
- Deploying the server and front-end application, and getting both sides to communicate properly.
- React state mechanisms, particularly managing all possible voting states from multiple users simultaneously.
- React search boxes.
- Familiarizing ourselves with the Spotify API.
- Allowing anyone to query Spotify search results and add song suggestions / vote without authenticating through the site.
Accomplishments that we're proud of
Our team is extremely proud of the MusiCrowd final product. We were able to build everything we originally planned and more. The following include accomplishments we are most proud of:
- An internal queue and voting system
- Frontloading the development & working hard throughout the hackathon > 24 hours of coding
- A live deployed application accessible by anyone
- Learning Node.js
What we learned
What's next for Musicrowd
- Authenticate and secure routes
- Add IP/device tracking to disable multiple votes for browser refresh
- Drop songs that are less than a certain threshold of votes or votes that are active
- Allow tv mode to have current song information and display upcoming queue with current number of votes