GithubHelp home page GithubHelp logo

nokazn / ravyd Goto Github PK

View Code? Open in Web Editor NEW
16.0 4.0 2.0 8.34 MB

Spotify web client 🎵

Home Page: https://ravyd.com

License: MIT License

JavaScript 0.57% Vue 42.06% TypeScript 55.88% Dockerfile 0.31% SCSS 0.99% Shell 0.18%
typescript nuxt vue spotify-api spotify nuxtjs fastify music

ravyd's Introduction


Ravyd

CI License: MIT

Ravyd is an open source Spotify web client. Spotify premium account is required to play entire tracks.

Setup

1. Regisiter your application to Spotify

You need to register your application and get client ID & client secret to use Spotify Web API and Spotify web playback SDK in Spotify for Developers page.

For detailed explanation, please check out App settings guide.

2. Set environment variables

# packages/server/.env.development

CLIENT_ORIGIN=https://localhost:3000 # Required
PORT=5000
REDIS_URL=localhost # Required
REDIS_PORT=6379
REDIS_PASSWORD=<Your redis password> # Required
SESSION_SECRET=<Your session secret> # Required
SPOTIFY_CLIENT_ID=<Your Spotify Client ID> # Required
SPOTIFY_CLIENT_SECRET=<Your Spotify Client Secret> # Required
LOCAL_HTTPS=true # set to true If you use https local server
# packages/client/.env.development

CLIENT_ORIGIN=https://localhost:3000 # Required
SERVER_ORIGIN=https://api.localhost:5000 # Required
PORT=3000
LOCAL_HTTPS=true # set to true If you use https local server

You can use https local development server by locally-trusted certificates. You need to set LOCAL_HTTPS to true, and generate localhost.pem and localhost-key.pem by tools like mkcert and put them at project root.

Please refer to .env for client and .env for server.

3. Install dependencies

This project is managed by lerna. You can install dependencies for all packages by lerna bootstrap.

$ yarn global add lerna # or npm i -g lerna

# install dependencies for all packages
$ lerna bootstrap

4. Start application

This project uses Redis for session store. You can launch Redis by Docker.

# launch Redis
$ docker-compose up -d redis
# start development server at localhost:5000
lerna run dev --scope @ravyd/server --stream
# or start development server in Docker container
docker-compose up -d client

# start development server for client at localhost:3000
lerna run dev --scope @ravyd/client --stream
# or start development server in Docker container
docker-compose up -d server

If you want to launch client/server by docker-compose, you need to set environment variables in .env at project root. Please refer to .env.sample.

# build for production and launch server
$ lerna run build --scope @ravyd/server
$ lerna run start --scope @ravyd/server

# build for production and launch client
$ lerna run build --scope @ravyd/client
$ lerna run start --scope @ravyd/client

Scripts

# ESLint (fix option)
$ yarn lint
$ yarn lint:fix

# Stylelint (fix option)
$ yarn stylelint
$ yarn stylelint:fix

# Run vue type checks
$ yarn vtc

# Type checks
$ yarn tsc

Roadmap

  • Play albums, artists, playlists & podcasts
  • Create/Edit playlists
  • Follow artists/users
  • Spotify connect support
  • Detailed search
  • Synchronously playing tracks with other listeners
  • i18n

License

MIT

ravyd's People

Contributors

dependabot-preview[bot] avatar nokazn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

ravyd's Issues

アーティストの詳細ページ

すぐにやる

  • ディスコグラフィー一覧の更に表示ボタン
    • スクロールして読み込み
    • クエリパラメータで表示/非表示、offset の状態を持つ
  • 関連アーティスト

あとでやる

  • 人気のトラック
    • フィーチャーされたアーティストの表示改善
      • ページで表示しているアーティスト以外のアーティストを表示したい
  • 最新のリリース
  • ディスコグラフィー
    • アルバム
    • シングル・EP
    • 参加作品
  • 関連プレイリスト
  • ジャンル
  • アーティストの詳細情報 (Wikipedia とかから引用できないか)

フッターでトラックを操作する

  • アートワーク
    • トラックの情報
  • 曲名、アーティスト名 - related to #20
  • トラックのコントロール
    • 前の曲、次の曲
    • 再生・停止
    • シャッフル
    • リピート - related to #13
  • お気に入りボタン
  • ボリューム操作
  • デバイス選択

スクロールバーの領域

  • ヘッダーとその下コンテンツをスクロールさせるようにして、フッターの領域にスクロールバーを表示させたくない
  • ヘッダーの下にスクロールバーがあってほしい
  • layout/default.vue内で共通にスクロールの設定 (overflown-y: scroll;)すると全ページで遷移したときにスクロールバーの位置が共有されてしまう

キューのボタンの挙動

問題

  • trackUriListを指定してトラックを再生した場合、state が保持している分のtrackUriListしか指定できない
  • related to #30

カードのスタイル

About

全般

  • hover したときメニューボタンを右に表示
  • hover したときお気に入りボタンを左に表示
  • サイズの範囲
    • min & max または size の指定にする

ReleaseCard

  • トラックのカードの場合、URL のハッシュにトラックの番号埋め込む

PlaylistCard

  • descriptionをある程度のところで省略
    • Firefox for Android, IE 対応

ArtistCard

  • アーティストのカードで画像がない場合の overlay
  • カード全体のリンク

ライブラリ (tracks) ページ

問題点

  • contextUri
  • 再生ボタン
  • テキストの折り返し
  • 余白の調整
  • vuex で管理?
  • 曲の検索
    • クライアント側で一度全データを取得して保持しておく必要がある?
  • nextUrl を保持しておいて、スクロールで随時取得
  • addedAtの条件直す
  • トラックの数が多くなるとDOM構築完了まで結構時間かかる

プレイリストの新規作成

やること

  • 画像アップロード
    • なぜか 403 エラーが出る
  • 作成、アップロード失敗したときのメッセージトースト
  • バリデーション
    • 名前
      • 必須
    • 説明
      • 改行コード
  • プレイリスト一覧を更新

プレイリストの詳細ページ

すぐやる

  • 背景色
  • スクロールして更新
  • 自分のプレイリストの場合は編集できるようにする
    • お気に入りボタンの箇所を編集ボタンにする
    • 編集されたら表示も更新
  • 曲の保存状態の反映
  • メニュー
    • 公開/非公開
    • 削除? (APIエンドポイントが存在しない?) unfollow
    • 複製
  • 曲が 0 のとき
    • 再生ボタン無効化
    • contains を確認しない
  • author リンクの幅
  • 非公開のマーク

あとでやる

  • メニュー
    • プレイリストradio
    • シェア

再生リスト

問題点

  • Playback SDK の nextTrackList/previousTrackList では 2~3 曲ずつしか情報が返ってこない
    • アーティストの contextUri から再生する場面で、再生リストから曲を選択するとトラックのリストが変わってしまう

解決策

  • contextUri を保存しておく
  • アーティストページなどから再生を開始した場合 (trackList を配列で渡して /player/playした場合) は再生リストを独自で保持しておく

その他追加したいこと

  • 再生時間を表示
  • listItem をクリックしたときではなく、再生ボタンをクリックしたときに再生し、それ以外はアルバムページに飛ばす

アルバムの詳細ページ

すぐやる

  • 曲の長さ
  • 曲のタイトル長かったら省略
  • トラックが50以上の時の処理
    • スクロールして読み込み
  • トラックが50以上の時の再生時間
  • ボタン
    • 再生ボタン
    • シェア
    • 再生リストに追加
    • プレイリストに追加
  • copyrights
    • 🄫 か ℗ が含まれてなかったら文頭に追加
    • 文が同じならまとめる

あとでやる

  • 関連アルバム 他のリリース
  • ジャンル
  • 曲名のところに他のアーティストの名前

ライブラリ (artists) ページ

問題

  • 順番に取得したときの順番がよくわからない
    • アーティストをフォローして/library/artistsページに行っても先頭に追加されるわけではないので更新分だけを再取得みたいなことができない
  • 検索
    • クライアント側で一度全データを取得して保持しておく必要がある?

プレイリスト再生中に QueueButton から操作すると再生できない曲がある

問題

  • related to #52
  • 以前urisを指定して再生していた場合に初回ページ読み込み後に直接キューを操作したときのように、customTrackUriListが保持されていない状態で TrackQueueButton からトラックを操作した場合に発生
    • offseturi での指定になる場合があり、プレイリストの再生時に 403 エラーが発生しうる
    • playback-sdk から提供されるトラックのリストでurisパラメータを書き換えてしまう

解決

  • 初回読み込み時にキューを取得する
    • エンドポイントが現状存在しない

ディレクトリ構成

  • serverclientでディレクトリ分ける
  • client内に Nuxt のプロジェクトを格納する
    • nuxt.config.tsrootDirを変更する

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.