On Github wnayes / team-gcc-acm-sdc
Will Nayes Jon Steffl
team gcc
Create a web platform that friends can use to create, develop, and promote their own radio station.
Listeners pick a memorable name to distinguish their channel.
A genre mix is chosen to seed future song selections.
A channel creator promotes listeners into influencers, who have say in reviewing songs.
The currently playing song is given thumbs up or thumbs down by active influencers to shape future song selection.
A station can be as public or private as the creator wants.
Facebook integration provides listeners means to share channels with their friends.
Listeners will be able to share their own music through their personal genre.
Localizing the user interface will allow for listeners in other countries to easy navigate the website.
The HTTP server can return localized resources using the Accept-Language header.
Mobile applications are easily localized through resource files.
The use of thumbs up and thumbs down is not universally accepted as positive in some countries.
Localization can account for this by using other symbols, like ↑ and ↓.
Color usage is consistently matched with easily recognizable icons.
The use of red and green for ratings is coupled with the thumbs up and thumbs down icons for this reason.
Using ALT attributes on images throughout is a simple way to increase accessibility.
Avoiding absolute font-size CSS values can help users with reduced eyesight.
Adding simple keyboard shortcuts for rating songs and chatting could benefit those not using a mouse.
Our relational model will include 4 entities.
Our relational model will include 6 relations.
Temporarily stored information will be handled outside of the SQL server, using the key-value store Redis.
Users connected over a WebSocket connection will have their session information stored in Redis.
A [userid]-session key would hold the session token.
Different listeners may be connected to different Node.js servers.
Redis can store a pairing between the user id and the specific server for passing events between Node.js instances.
Primary data storage will use a relational database, likely MySQL. Volatile information will be accessed using the key-value store Redis.
To support live notifications, chat, and song synchronization, an API powered by Node.js using Socket.IO will be used.
By tying user authentication to the Facebook Login API and other OAuth providers, the complexity of managing user accounts is limited.
We still need to manage socket sessions when listeners visit a channel.
As each listener leaves the channel, the volatile session and socket information will be removed.
When all sockets for a given channel have been closed, any song selection and sync actions will be canceled.
Listeners will be able to participate in a live chat with other authenticated members.
Listeners will also receive reviews from others in their chat feed.
A critical aspect to the experience is keeping all listeners on the same song and at approximately the same listening progress.
Having a socket connection facilitates this time sensitive demand.