♫ Music Plus

A music app which provides personalised recommendations based on a user's listening habits and preferences. It will also offer a social component, allowing users to connect and share music with friends and no ADs.

☺ Music APIs source

Our music APIs source base on an open source NeteaseCloudMusicApi.

☺ Music Player

Our music player base on an open source program react-jinke-music-player.

⚠ Caption

We are using react-jinke-music-player as our player, it does not support playing audio stream file. Which means we have to accept whole audio stream file and convert to temporary blob file then play this blob file.

★ Feature list

  • Personalised Song Recommendations
  • Great Streaming Quality
  • Add Songs to Favorite
  • Post comments of songs
  • No ADs

★ Function list

  • Login
    • Login
    • Logout
    • Register
  • Home
    • Poster
    • Random Recommendation (Base on your play history)
    • Random Playlist (Base on public playlist)
    • ...
  • Playlist
    • CURD
    • Image upload
    • Look public playlist
    • Set private
    • Favourite list
    • History list
    • Create/store playlists without logging in (only local)
  • Player
    • Play without login
    • Play list
    • Lyric
    • Icon
    • Order/Single/Random
    • Light/Dark mode
    • Minimize
    • Audio stream player
  • Search
    • Singers
    • Songs
    • Albums
    • Add to playlist
  • comment (comment function is completed on Backend but not in Frontend)
    • add a comment
    • show comments
    • exit a comment
    • remove a comment
    • like
    • reply
  • profile
    • show my play list
    • ...
  • Global setting
    • Personal style setting
    • Language setting
    • responsive (partially completed)
  • others
    • Docker deployment
    • Electron cross-platform deployment

▣ Screenshots

  • Exmaple image
  • Home page image
  • My playlist image
  • My playlist image
  • Search a song image
  • Add a song to my player image
  • Random Recommendation image
  • Test Report (generated by mocha) image

☺ Technique stacks

  • React.js (Frontend framework)
  • React-Bootstrap (Frontend ui-framework)
  • React-paginate (Paginator)
  • React-router (Router)
  • React-jinke-music-player (Open source music player)
  • axios (Http request)
  • js-cookie (Sending cookie)
  • Javascript (Programming language)
  • Express.js (Backend framework)
  • nanoid (Generate ids)
  • mongoose (ODM)
  • morgan (Test tools)
  • supertest (Test tools)
  • chai (Test tools)
  • chai-http (Test tools)
  • assert (Test tools)
  • mochawesome (Generate report html document)
  • nodemon (Hot reload)
  • babel (convert commonjs std to es6 std)

☺ Configuration

# setup NeteaseCloudMusicApi
cd ./NeteaseCloudMusicApi
set PORT=4000 && node.js # Recommend Cmder terminal
# backend
cd ./MusicPlus/server
vi .env

# copy and paste
DB_URL=mongodb://127.0.0.1:27017/MusicPlus # database, required
NeteaseCloudMusicApi=http://127.0.0.1:4000  # Accessing NeteaseCloud APIs, required
BackendApi=http://127.0.0.1:3000 # For test module, Optional
# frontend
cd ./MusicPlus/client
vi .env

# copy and paste
VITE_BACKEND_BASE_URL=http://127.0.0.1:3000 # Backend API, required

☺ Startup

# Server
cd ./NeteaseCloudMusicApi
npm install
node app.js
cd ./MusicPlus/server
npm install
npm server  # localhost:3000 in default

# Client
cd ./MusicPlus/client
npm install 
npm run dev

☺ Production

cd ./MusicPlus/server
npm install
npm run production 

☺ Build

cd ./MusicPlus/client
npm build

☺ Unit Test

cd ./MusicPlus/server
npm test # unit test 
npm run mochawesome # generate test report in ./MusicPlus/server/mochawesome-report

☺ Management

We use notion to manage teams, assign tasks, and publish useful information. And use wechat, Tencent meeting for discussion every week.During the development process, in order to avoid conflicts, everyone has their own independent branch, which is merged into the dev branch after completing some functions. The dev branch will be merged into the main branch after proper testing. https://www.notion.so/74ceba8f885a4ae3bdfed33fd18562bd?v=e59565eeb2ec45aea246b3d252ea5bb5&pvs=4 image image