Git Product home page Git Product logo

spotmyfm's Introduction

Codacy BadgeCodeQLVercelContinuous IntegrationCypress End2End Tests SpotMyFM

SpotMyFM

A Spotify Library Manager

Check SpotMyFM at spotmyfm.jorgeruizdev.com


¿What is SpotMyFM?

SpotMyFM is a Spotify Library Manager supported by artificial intelligence algorithms.

Please check the Users Manual for a detailed explanation of each of the features.

Some of the features are:

  • Advanced Library Filters. Filter by popularity, moods, LastFM community tags, release date intervals or even genres!
  • Deep Learning Track Analysis. Analyze any track with just a music file! Extract genres, subgenres and even moods😀!
  • Track Recommendatios. SpotMyFM has a small collection of 30k songs to recommend. This recommendations are based on sound features, like Tempo, Beats and their power spectrogram.
  • Playlist Creation. Create or extend an existing playlist with track recommendations or filter results.
  • Library/Playlist Stats. Explore your personal stats like favourite genres, musical taste changes over time or mood and decades distribution.
  • Track/Album/Artist/Playlist details. Navigate through your library! Explore all the tracks of a playlist, albums of an artist or even the tracks of each album with the details view. Read about the history of a band or album, get new recommendations or just check their genres, subgenres or moods!
  • Tag your album. Tag and filter your album with custom strings that identify each album.

And many more!


Datasets

Three datasets were created through the development of this project. Two of them are published at Kaggle

Ludwig Dataset - Genres, Subgenred & Moods - 13k+ Songs (Kaggle)

This is the main dataset that has been used to train all the neural networks

Gtzan Extended Dataset - 3k Songs Dataset (Kagggle)

This dataset has been used to initialize the weights of the main neural network.


Teaser

ezgif-5-abe8f0cb94

Architecture

Poster

spotmyfm's People

Contributors

dependabot[bot] avatar jorgeruizdev avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

spotmyfm's Issues

Settings Page

Create a Settings Page with the Tab Component

Tab 1: User Settings

  • Delete Account
  • Toggle View between Premium - No Premium

Tab 2: Cache Settings

  • Flush Cache
  • Quick Refresh Cache
  • Full Cache Refresh

Auto Login + Cookie Manger

Allow the user to Log In automatically after the Authentication Token has expired by using the refresh token.

Store both tokens inside a Cookie.

  • Auth Token as a Session Cookie
  • Refresh Token as a 14 days cookie.

Design a generic Card View

This view will be used across all the pages that render cards (Home Page, random, albums, etc).

RF:

  • Implement a search / filter box
  • Implement a Sort menu
  • Implement a Toggle View button (That Toggles between full cards and small / line cards)
  • Implement a Pagination Bar

UX:

  • Infinite Scroll Loading (Must be tuned for mobile devices)
  • Loading Track placeholder Proxy
  • Differentiate between No results and Login

Props

  • Toggle View
  • Is Loading
  • Current View (So it can differentiate between Horizontal and vertical)
  • Cards to Render (as children)
  • Sort Menu (For the specific items)
  • InputFilter props

image

Tracks to Playlist

Create a component that allows the user to add some of the tracks to an specific playlist or create a new one.

Protected Routes

Create a wrapper that checks if the user has enough privileges to access an specific page / route / component.

Privileges:

  • Is Admin
  • Is Logged

Theme Toggler

  • Define a Context that manages the current theme.
  • Define a function that saves and toggles the current theme.
  • Configure Tailwind to allow the use of the :dark pseudoclass.

Desktop Navigation Bar

Implement a navigation bar only visible in large screens that includes:

  • Logo / Title
  • User Picture + Log In / Log Out
  • User Settings
  • Links to the different pages
  • Github Repo Link
  • Help Page Link
  • Toggle Language Link?
  • TBD

Track Card

Create a card item that displays track information as a card

Improve the Facade performance with parallel requests

Spotify API has a limit of 50 items (20 albums) per request.
LastFM API has a limit 1 item per request.

This request could be done in batches of two or three request in parallel to greatly improve the facade performance.

Modal

Create a Modal component that will be use to render any component across all the pages.

The modal can be closed by:

  • Clicking the BackGround
  • Clicking the Close Button
  • Pressing ESC key
  • Back browser action.

Configure Github Actions for Integration Testing

The main idea is write the integration tests in Cypress as it seems to be the most advanced integration / system testing framework for JS at the moment.

This action must be completed before the configuration for unit testing.

Home Page

Create a homepage that displays the user most listened tracks in the past hours, month, year and since the creation of the account.

TrackView Advanced Filter Button / Modal

Filters the Track View

This button should appear by default but it could be toggled with an optional prop

  • Artist
  • Album
  • Artist Genre
  • Artist Popularity
  • Release date
  • Album Popularity

Responsive Modal

image

  • Move the top navigation down to the bottom and make it larger to improve accessibility.
  • Remove the rounded corners
  • Fix the not centered buttons.

image

Artist View

Implement an artist view based on the generic card view

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.