Team Name
The Underachievers
Timeline
Fall 2018 – Spring 2019
Students
- Mary Huerta
- Quan Nguyen
- Endy Pluviose
- Mitchel Smith
- Kolten Sturgill
- Dominic Young
Abstract
We are creating a music aggregator to be used for connecting the users’ different services and playlists all in one place. Services that can be potentially included are Spotify, Apple Music, YouTube, and others. We will build this web application using React Redux, Golang, JavaScript, Material-UI, and PostgreSQL. Heroku will also be used to host our application for widespread use.
Background
People use different services for managing and having access to music that isn’t available on other platforms. As can be seen in the graph, competing services having wildly varying amounts of music and one may need to be subscribed to all of them to have access to all of their music.
A web application is needed that can grab all of the user’s playlists and music content and aggregate them all in one place. This is the issue Synthify wishes to solve.
There have been other similar projects created before, but there are none that can be used anywhere and that are still maintained. Synthify will be usable on any desktop or mobile device running current browsers.
Project Requirements
- Connect various music services
- Allow user to disconnect music services
- Stream songs from user playlists
- Store user playlists and update when externally changed
- Allow user to sign up, log in, log out, etc.
- Display current song title, artist, and song time
- Store user preferences
- Shuffle and repeat songs
- Allow user to change songs and playlists
- Display album artwork
System Overview
Synthify will have a server and client. The server layer will contain the resulting data and will pull from 3rd parties which will direct data to the client. The persistence frameworks will contain information such as the user’s login credentials, previous queries to music services, and playlists created by the user. The client will contain redux which will send data to the major viewable interfaces. These components will contain song and playlist information sent down from the server.
The client will have software dependencies on React Redux, React.js, Fetch API from Mozilla, Material-UI, and React Router. Redux will allow the client layer to interact with the HTTP interface and give information to all the different subsystems. Fetch will be used to send and receive resources from and to the server.
The server is broken down to being a database, controllers for the endpoints, a cache for preserving past results, a queue to keep track of the requests going out and what order they should be returned in, and finally the interface that will bring it together with the client. The database will be used to keep track of user info which includes name, email, passwords, connections, and user preferences. The cache will be utilized so that we do not have to make unnecessary requests to the connections when we are grabbing user content for the respective service. The HTTP interface will be the library used by the server that will direct the incoming requests to the controllers via a HTTP/TCP socket.
Results
There were more road bumps and blocks than expected, but we were able to successfully play songs from our web application using other various services. Due to a large portion of the project relying on the APIs of third parties, it made us have to change our initial assumptions to conform to how they will allow us to use their services. However, this has been a good learning experience and we ended with a functioning project.
Future Work
Due to the issues mentioned above, any real world use of this project would be difficult. However, we may continue to work on this at some point in the future.
Project Files
System Requirements Specification
Architectural Design Specification
References
1.Hindy, Joe. “Apple Music vs Spotify vs Google Play Music.” Android Authority, 4 Sept. 2018.
2.Sisario, Ben. “SoundCloud Starts Subscription Plan Taking On Spotify And Google.” The New York Times, 29 Mar. 2016.