Skip to content

megmil/Soundroom

Repository files navigation

Soundroom

Table of Contents

  1. Overview
  2. Product Spec
  3. Project Plan
  4. Schema

Overview

Description

A collaborative music queue where users can create and join virtual music rooms to request and vote on songs. Users can participate in a room without connecting to a music streaming account, or they can optionally link their Spotify account to control playback through the Soundroom app. Allows two room listening modes: Party Mode, where only the host's device plays the queue; and Remote Mode, where all devices play the queue.

Technical Challenges

  • Live implementation: Parse LiveQuery subscribes to 5 queries (invitations for current user, current room, song requests in current room, upvotes in current room, downvotes in current room) to respond to real-time updates from multiple users
  • Search bar: throttle search requests to reduce the number of API calls and allow typeahead
  • Allow multiple music players / catalogs: swap out Spotify for Apple Music (for search/get API calls and playback) or use Deezer to search/get tracks without connecting to a music streaming service
  • Custom animations: tap resize animation, vote button bounce, loading cell shimmer layer, queue insert/delete/move row animations

Databases, SDKs, APIs, and libraries incorporated

  • Parse and Parse Live Query + Back4App
  • Spotify iOS SDK
  • MusicKit
  • Spotify Web API
  • Deezer API
  • Apple Music API
  • SkyFloatingLabelTextField

Product Spec

User Stories

Required Stories

  • Users can register / login / logout as a user
  • Users can create rooms

  • Users can join private rooms

  • Users can control playback through the Spotify app

  • Users can vote on songs

  • Songs change position in the queue based on their "score"

  • Users can search songs

  • Users can add songs to the queue

  • Users can leave a room

  • Hosts can swipe to remove a song from the queue

Stretch goals

  • Search bar throttles search requests to reduce the number of API calls
  • Users can participate in a room without connecting to Spotify or Apple Music
  • Users can swap out Spotify, MusicKit, and Deezer to search tracks and load track data
  • Users can swap out Spotify and Apple Music to play the queue
  • Hosts can create rooms in party mode (i.e. only the host plays music) or remote mode (i.e. all members play music)
  • Animate queue for individual changes (e.g. song moves up/down, song is deleted, song is inserted)
  • Animate button taps
  • Shimmer animation covers empty track/user views while data is loading

Screen Archetypes

  • Login
    • Create account or login
  • Profile
    • See recent rooms
    • Connect to Spotify through Settings
  • Room
    • Start a new room
    • Join a room
    • Vote on songs
  • Search
    • Search songs
    • Add songs to the queue

Project Plan

Wireframes

wireframe

Gantt Chart

gantt

Schema

Models

Made with Table Generator.

Song

Property Type Description
track Track track information from music catalog
requestId String Request objectId
userId String requester PFUser userId
isrc String standard code for track

Track

Property Type Description
deezerId String deezer identifier
isrc String standard code for track
streamingId String spotify URI or MusicKit ID
title String song name
artist String artist name (or formatted artists name)
albumImageURL URL album cover image URL

Request

Property Type Description
objectId String PFObject objectId for request
roomId String PFObject objectId for the requester's current room when this request was made
userId String PFUser userId for the requester
isrc String standard song code for the requested track

Room

Property Type Description
roomId String PFObject objectId
hostId String PFUser userId of user that created this room
currentISRC String standard song code for currently playing track
title String room name
listeningMode Integer remote or party mode

Upvote

Property Type Description
objectId String PFObject objectId for upvote
requestId String PFObject objectId for the request the upvote was made on
roomId String PFObject objectId for the room the upvote is in
userId String PFUser userId for the upvoter

Downvote

Property Type Description
objectId String PFObject objectId for downvote
requestId String PFObject objectId for the request the downvote was made on
roomId String PFObject objectId for the room the downvote is in
userId String PFUser userId for the downvoter

Invitation

Property Type Description
objectId String PFObject objectId for invitation
roomId String PFObject objectId for the room the invitation is to
userId String PFUser userId for the user the invitation is to
isPending Boolean indicates whether or not the user has accepted the invitation

PFUser

Property Type Description
userId String PFUser userId
username String username for login
password String password for login
avatarImageType Integer random value that corresponds to 1 of 5 avatar images

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published