Jonas
Kaad
Back to all projects

Yfitops

View on GitHub
December 2021

Music Streaming as a Microservice

Yfitops

Motivation

As part of our 3rd semester studying Software Engineering, we were tasked with developing a music streaming platform based on a micro-service architecture. The class was separated into different teams, each responsible for developing their own micro-service.

My team was assigned to handle Portability - figuring out a way to port the software to different platforms.

The Challenge

We chose to primarily focus on smartphone platforms after finding research indicating that 99% of all mobile users have either iOS or Android operating systems. Given our limited time and being new to mobile development, we decided to use a cross-platform development approach rather than developing two separate native applications.

Technology Stack

We implemented the MERN stack (or rather MERNN in this case):

  • MongoDB: Database that stores data in JSON format, aligning with what other teams were using
  • Express.js: Web framework for our backend API
  • React Native: Cross-platform mobile development framework
  • Node.js: JavaScript runtime for the backend

Features

  • User Authentication: Secure login and account management
  • Music Library: Browse and organize music collection
  • Playlist Creation: Create, edit, and manage playlists
  • Media Player: Full-featured music player with background playback
  • Artist & Album Pages: Browse music by artist and album
  • Search Functionality: Find songs, artists, and albums
  • Lock Screen Controls: Media controls accessible from the lock screen

Deployment

To host the API, we used:

  • A Kubernetes cluster assigned to our team (maintained by another group)
  • A free Heroku server for rapid prototyping

Reflection

The project was a great success, and we had a lot of fun developing an app from the ground up. However, we of course didn’t reach all our goals and there was still room for improvement.

For instance, the media player implementation had limitations - it required a selected song and an array of songs to be received as props to the component, making it impossible to click the miniaturized track player to access the full-screen version.

In the future, a solution would be to use a state manager like Redux, MobX, or React’s Context API to make the list of songs and the selected song globally available to all components, similar to what we did with our login system.

Screenshots

Login Screen

Login screen interface

Home Screen

Home screen with recommendations

Search Interface

Search functionality interface

Artist Page

Artist profile page

Album Page

Album details page

Library Screen

User's music library

Music Player

Music player interface

Music Player (Paused)

Music player in paused state

Playlist Screen

Playlist display screen

Playlist Songs

Songs within a playlist

Create New Playlist

Creating a new playlist interface

New Playlist Created

Newly created playlist

Empty Playlist

Playlist with no songs

Add to Playlist

Adding songs to playlist

New Song Added to Playlist

Song added to playlist confirmation

Music Widget playing

Widget player and lock screen music controls

Lock Screen Playback

Music playing on lock screen

More Projects

Technologies related to this project