Git Product home page Git Product logo

groove-machine's People

Contributors

dependabot[bot] avatar robinnnnn avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

groove-machine's Issues

Sidebar

A sidebar that comes out from the left should display the main view to the right

Track component enhancement

  • If playing, clicking somewhere within the track (maybe some icon) should pause the song
  • Disc spinning should accelerate on start (rather than starting at max speed)
  • Disc spinning should stop (or slow) on pause
  • A different color should indicate paused state (red / yellow / orange / black?)

Revamp Controller GUI

Currently the controller shows up when the user moves their mouse near the bottom of the viewport. The controller itself is also quite broken.

It might be more fun to stick the GUI on the left side, that pushes the UI over to the right as it comes out (like a narrow sidebar). The next / previous tracks can be controlled by "up" and "down" arrows respectively (rather than left / right) to indicate vertical music traversal.

Maybe a standalone button that plays a random song in the playlist? Rather than having to click "shuffle" then "next"

Track progress indicator. Not sure what's the best way to display this if the GUI is vertical. Maybe a bottom-to-top bar that fills up?

Shuffle

Icon / indicator for toggling shuffle state

Loading gif for inline search

Displaying the full screen loader can be jarring, unless artificially slowed down.

This would also allow for better error handling UX

Auto-scroll on track change?

Should the UI automatically follow the currently playing track? More specifically, if one song ends and the next one begins, should the view scroll accordingly?

This might be annoying if a user is actively searching / scrolling through the UI during a track change.

Currently playing track doesn't reflect accurately sometimes

Not sure how to replicate this, but when it does happen the setInterval network request retrieves the correct playback info; the view just doesn't update from props properly.

Update: can replicate by skipping to the end of a track and seeing the view not update to the next track. Sometimes it does update but it's slow to do so.

Update 2: could not reproduce as of 3/15

[UI] Support for any Spotify playlist

The app should support any playlist by ID / link.

The user should be prompted with an input bar upon successful first-time login, and this feature should be accessible at any future point.

Currently, pasting in /playlist/ABC still defaults to loading /playlist/XYZ upon successful OAuth. This is because custom query params are dropped during the OAuth exchange.

Dark Mode

Would be neat to have a toggle for dark mode.

Proof of concept:

screen shot 2019-03-03 at 11 39 45 pm

Track pagination for long playlists

If a playlist contains many tracks, loading them all in the DOM may be prohibitively expensive.

However, not loading all tracks may throw a wrench in the "shuffle" or "skip to now playing" feature

Refresh token shortly after initial load

Refreshing the page often prevents token refresh as the first event happens after 10 minutes (#20). There are two potential solutions to this:

  1. Easy: The refresh call should happen shortly after page load
  2. Harder: Keep track of lastTokenIssueTime in localStorage, and refresh the token after a sufficient amount of time has passed since then (rather than sinceLastPageRefresh)

Descriptive README

README should address:

  • How to clone, install and run app locally
  • Spotify developer setup
  • Config / .env file
  • Live dev mode vs. build prod + serve mode
  • How deployment works
  • Where the app is accessible online

Invalid Playlist View

App should have a fun error state when it fails to fetch a provided playlist link / ID

Full Screen View

No idea what this should look like, but Spotify's FS view is a good precedent.

Inline search

There should be a separate way to search for a playlist within the main view, rather than being redirected to /search

Grid view

Should be a grid of rounded squares.

Maybe album covers, artist, track title in each square?

Search bar to filter tracks

Should be able to search for specific artists / tracks within a playlist, and the view should respond accordingly

Profile for logged in users

A user should know that they are OAuth'd with Spotify. A logged in state should display:

  • name
  • profile pic icon?
  • maybe a fruit emoji next to the name, where clicking on it rotates it to a different random fruit

Detect new device

The devices list should recognize:

  • when a new device connects (or disconnects) - when a new device is selected and managed from another device
    ... and update the list accordingly.

Is there an onDeviceUpdate handler in any of the SDKs? If not, we may have to use polling.

Playlist splash banner

  • The top banner should feature the playlist image, description, # songs, total duration, creation date, etc.
  • "Open in Spotify" link

Keyboard Controls

Controls

  • spacebar: play / pause
  • up / left: previous track
  • down / right: next track
  • r: play random song
  • s: toggle shuffle

Controls UI
There should be some pop-up UI that displays the available keyboard shortcuts to the user

Scroll View to Now Playing

There should be an easy way to arrive at the currently playing track, which will be especially helpful for longer playlists.

  • Function to take you to active track in vertically centered position
  • Uses a smooth scrolling animation
  • Scroll to active track on playlist mount, if applicable
  • Cancel animation on manual scroll. Forked the unmaintained scroll-to and created @robinnnnn/scroll-to to address this issue
  • Icon / purple dot / indicator that triggers this feature if active track is out of viewport
  • Removal / disabling / greying out of icon if active track is within viewport

Seek

User should be able to skip to certain parts of a track.

This should be available either in the Track Container or Sidebar

Device Selection

  • Clickable icon should open a list of devices
  • Potential known bug with Chrome set to current device; needs more investigation

[Break apart into more cards!] API error handling

  • Failing to play a track should display an error message on the track itself (some combination of red outline / box shadow / red text)?
  • Handle unfounded device on initial play. What should the user be prompted to do here? Connect a device?
  • In terms of UI, there should be a generic Error Banner component that comes in from the top

Loading animation

Some gif / placeholder should indicate that playlist data is being fetched from the server

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.