Skip to content

Proposal

Richard Ng edited this page Mar 24, 2020 · 1 revision

Simul

Topic Chosen: Music/Video Streaming Service Interface

General Overview:

Our proposed idea is a music streaming web app that utilises the Spotify API. People can log into the web app using their Spotify login details (must be a premium user). Each user in the room can queue multiple songs, either from searching on spotify, or from their spotify playlists. To prevent one user from over-queueing, songs are queued in alternating user order. Songs also have synchronous playback with all users in a room for more of a social listening experience. If time permits, we would ideally want to have additional functionality such as lyrics and chat system to elevate the social experience. Additionally, in order to separate different genres, a lobby system could be introduced for future works.

The various features of our web app are listed below, and are split into must-haves, should-haves, and could-haves. This was done in order to split our deliverables into coherent sections so that our most important ideas were prioritised first.

Must-have:

  • Login/Authentication system with the Spotify API.
  • Using Spotify API to search songs and playlists
  • Allowing users to queue songs
  • Syncing music playback with all users in the same room

Should-have:

  • Ability to make lobbies private
  • Displaying lyrics
  • Ability to skip songs
  • Chat system within lobby
  • Lobby System

Could-have:

  • Extensive profile system (ability to follow other users or favourite rooms)
  • Like/dislike rooms
  • Social media integration
  • Rooms with either one master DJ that queues songs or multiple users
  • Chat filter (no inappropriate, swear words)
  • Shareable links for lobbies

The login/authentication system is essential in order to retrieve the access token to utilise the various features of the Spotify API such as audio playback and accessing the saved songs of the user logged in. Other features of the Spotify API we will require will be the searching function so users can find and add their desired songs to the queue. The syncing of music playback for all users is the main selling point of the application, thus is needed for the base product.

Although they aren’t necessary, the list of should-haves would be nice if implemented. Adding the functionality of creating private lobbies will be relevant for social gatherings and mean that more users will be able to use the app if they prefer not to listen in a large room. The ability to skip songs would prevent users from being able to queue songs which aren’t relevant to the genre.

The list of could haves are very low down on the priority list, and will be the first features to be omitted, they have less impact on the overall MVP compared to the other features presented.

There are multiple areas which need to be expanded on when implementing our application. Investigation will be made on multiple open-source repositories, primarily Spotify API and web playback libraries. We will need to research authentication methods with the Spotify API. Since Simul may have a chat system, we will need to have research on socket based programming. A possible extension for the chat system is the censoring system. Exploration would be needed into other libraries which could do this or potentially a method that we created. We believe the JavaScript library, SocketIO, will be beneficial to look into. Research will need to be made for deployment strategies. Our team will investigate Heroku for hosting and CircleCI for continuous integration as our application will be hosted on the web.

The lobby system will need an area to store its data. Our project will use MongoDB as our database. Encryption is a necessity for security purposes in our private rooms. We will explore into many different encryption strategies such as SHA and RSA1. Although the lyrics feature is not a must-have, we will need to consider strategies for implementation. We believe the current tools that have been made are not sufficient for our product as they are either out of date or are premium. If we were to implement this, we believe web scraping will be the most convenient for this task.

To guarantee consistency throughout our code, we will be using a linter, most likely ESLint. We will be following AirBNB’s style guide within our project. Another important aspect of our project is testing. Jest will be our main platform for testing our backend and frontend.

Our team has been delegated roles - front end and back end developers depending on our previous experience. Each member of the team will have the opportunity to be the team lead, who is responsible for overseeing the project, ensuring that each members’ work works together. The team lead will be a rotational role. The team will have at least one face to face meeting per week, where we are responsible for determining the goals set for the next week and demo what we have done in the previous week. Outside of in person meetings, we will communicate through Messenger, as it was more appropriate for smaller groups than Slack. At various times, we will meet in person to collaborate together to work through pair or mob programming.

For Git, we have decided to use Git issues to decide what we will be working on. Members will write issues, and assign members - either themself or others. The issue needs to be approved by another member before it can be worked on. This ensures that two people aren’t working on the same feature at the same time, and avoids unnecessary collision of work. Members will always work on their own branch - prefixed with feature/bug/admin. To merge branch changes, pull requests to master needs to be made. Two pull request approvals are necessary to merge the branch into master. Furthermore, branches need to pass all CI checks to merge into master, this includes dependency safety and tests. To keep track of workflow, we will use Github Projects. This is because it syncs well with pull requests and issues. We will be using Github wiki to manage meeting minutes and documentation. This will give the members of the team a single place to look for important information, rather than having it spread across multiple sources.

Clone this wiki locally