Music streaming as a microservice


As a part of our 3rd semester studying Software Engineering, we had been tasked with developing a music streaming platform based on a micro-service architecture. As part of the assignment, the class had been separated into different teams, each tasked with developing their own micro-service. My team had been tasked with Portability, i.e., making the software portable. “Portability” has a many different meanings, but in this connection, we had to figure out a way to port the software to different platforms.

We chose to primarily focus on the smartphone platform and to that end found a report stating that 99% of all users either have iOS or Android operating systems(
Since this project was very limited on time and we were all new to mobile development, we chose to go for a cross-platform development language in React Native, rather than develop two different native apps in Swift and Kotlin.

For our backend API we went with Express, a Node.js web framework. We thought this made sense, since we were already developing with JavaScript/Typescript on the frontend in the app. To host the API, we used the Kubernetes cluster assigned to our team (which another group had the responsibility of maintaining), as well as a free Heroku server for rapid prototyping. Since all the other teams were using JSON for their services, we thought that having a database
that stores data in JSON format would make sense as well. Therefore, we chose to use MongoDB.

Did somebody say MERN stack? (Or maybe it’s MERNN, in this case?)

Overall, the project was great success, and we had a lot fun developing an app from the bottom. Of course, we didn’t reach all our goals and still left a lot to be desired. For instance, the current implementation of the media player requires a selected song and an array of songs to be received as props to the component. This makes it impossible to click the miniaturized track player to access the full screen track player, as a user might expect.
In the future a way to fix this would be to use a state manager like Redux, mobX or Reacts Context API, to make the list of songs and the selected song globally available to all components, like what we did with our login system.

ResourcesGitHub - Source CodeTechnologiesMongoDB
React Native
Date3rd Semester
September - December

More Projects