Make friends through music. Discover great sound tracks on Solana and play them with your buddies :dancer:.

Overview

Acoustic Licious

COVID-19 has significantly impacted the mental health of children and adults alike. Globally, the population suffering from loneliness rose from 6% to 21% post-pandemic; with communication going more virtual, better ways of socializing need to be developed.

Introducing Acoustic Licious, a stunning new way to discover & play great music and make new friends.

Hey there MLH Fellows! We know 1:1s are ubiquitous during the MLH Fellowship. What could be a better way to know other Fellows than to get on the floor and listen to your favorite tracks together :)

Main Features

  • Listen to the same songs with your buddies simultaneously.
  • Interact through instant messaging, proximity audio, reactions, and voting.
  • Share your favorite music with others by uploading it to Solana Blockchain and saving their music to your playlist.
  • A fair-queue mechanism that ensures everyone's song choices get played.
  • A beautiful user interface that is pleasing to the eye.

👨‍💻 Tech Stack

  • Frontend: React.js, Chakra UI, Redux, Socket.io Client, Solana Web3 Client, Anchor
  • Backend: Node.js, Express.js, Redis, Socket.io, Rust, Anchor

⚙️ How it works

An overview of the application core constructs is given below:

Rooms

Users can create public or private rooms where others can join. A room is a place where multiple people can listen to the same songs together at the same time. Public rooms can be searched and joined, whereas the invite link of the room has to be shared with others for joining private rooms.

Join public rooms:

Listen to songs in the room:

Playlists

A playlist is a collection of songs. Songs are played through playlists created by users. Users can freely add or remove songs from their playlists and rearrange the order of their songs inside the room. There are following two ways to search and add music to playlists:

  • Solana Music: Users can add their favorite music to Solana Blockchain for others to add them. Similarly, users can add songs uploaded by you to their playlists.

  • Through YouTube: A user can add music to their playlist by searching them on YouTube.

Queue Mechanism

Users can join the queue in the room to have the songs in their selected playlist played. The order in which users join the queue determines the order in which songs are played. The first song in their selected playlist will be played for each user in the queue. Then the first song will be cycled to the back of the playlist. Each user in the queue is, thus, guaranteed to have one of their songs played, and playlists of any size will continue to keep playing until the user leaves the queue.

Voting

Users can like or dislike the current song. If at least half of the people in the room have disliked the music, it will be skipped.

📥 How to run it locally?

Prerequisites:

  • Node v14.17.6
  • npm v8.1.3
  • Redis v6.2.5 with RedisJSON v1.0 and RediSearch v2.0

We used the redislab/rejson and redislab/redisearch Docker images to setup Redis modules.

  1. Run the above Docker images.
  2. In the root directory of backend, create a .env file with the following contents:
REDIS_HOST=localhost    
REDIS_PASSWORD=your_password_for_redis
REDIS_PORT=redis_port
SALT_ROUNDS=10
SESSION_SECRET=your_session_secret
YOUTUBE_KEY=your_youtube_api_key
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
Property Description
REDIS_HOST URL of where your Redis is hosted
REDIS_PASSWORD Password to your Redis
REDIS_PORT Port where Redis instance is hosted
SALT_ROUNDS Number of salt rounds for bcrypt
SESSION_SECRET Secret for session cookies to authenticate users
YOUTUBE_KEY Your YouTube API key
GOOGLE_CLIENT_ID Google Client ID in your GCP project
GOOGLE_CLIENT_SECRET Google Client secret in your GCP project
  1. In the root directory of backend, type: npm install to install dependencies.
  2. Run npm start in root directory of backend.
  3. In the root directory of frontend, type: npm install to install dependencies.
  4. Run npm start in root directory of frontend.
  5. Your app should be running at localhost:3000
You might also like...

A Single place to Discover, Collaborate, and Get your data right

A Single place to Discover, Collaborate, and Get your data right

A Single place to Discover, Collaborate, and Get your data right Darkseal Darkseal includes the following: Metadata schemas - Defines core abstraction

Dec 28, 2022

This is a Webpack based to-do-list project. With this app, users can add thier daily routine tasks to the list, mark them as complet, edit them or delete them.

To Do List This is a Webpack based to-do-list project. With this app, users can add thier daily routine tasks to the list, mark them as complet, edit

Oct 30, 2022

Music World is web3 app built over Solana where anyone can add their favourite songs and see the other songs that are added by different people from around the globe.

💥 Introduction Music World is web3 app built over Solana where anyone can add their favourite songs and see the other songs that are added by differe

Jun 10, 2022

example app that creates a new player in Spotify Connect to play music from in the browse using Spotify Web Playback SDK.

Spotify Web Playback SDK Demo Requirements User must have Spotify Premium, DRM & EME supported and JavaScript enabled Web Browser. License Copyright 2

Jul 20, 2022

Big Chief is a website where you find and share everyday cooking inspiration. Discover recipes, cooks, videos, and how-tos based on the food you love.

Big Chief is a website where you find and share everyday cooking inspiration. Discover recipes, cooks, videos, and how-tos based on the food you love.

Big Chief Big Chief is a website where you find and share everyday cooking inspiration. Discover recipes, cooks, videos, and how-tos based on the food

Jun 1, 2022

Discover a vast library of open-source Tailwind CSS components and Mobile UI design elements 🚀

Discover a vast library of open-source Tailwind CSS components and Mobile UI design elements 🚀

SundarUI 😍 Discover a vast library of open-source Tailwind CSS components and Mobile UI design elements 🚀 What is SundarUI? Sundar UI is a library o

Mar 19, 2023

Great web App to make a list of awesome books to read. Made with ❤️, JavaScript ES6 Modules.

Awesome Books A basic app project built with HTML, CSS and JS to keep track of awesome books. Built With HTML/CSS & JS best practices: Correct use of

Sep 20, 2022

Reddit Page CLONE using Angular! A repository to contribute at hacktoberfest 2022. Make sure to share love by giving it a star.🌟 Have a great day!

Reddit Page CLONE using Angular! A repository to contribute at hacktoberfest 2022. Make sure to share love by giving it a star.🌟 Have a great day!

Reddit_tool Reddit Site CLONE using Angular, Springboot and Swagger OpenAI ! Introduction This project was developed with the following technologies:

Oct 20, 2022

This site compares your GitHub Profile to your friends, and analyses and tells your GitHub profile score too.

GitHub ⚔️ Duel Deployed at 🚀 : https://githubduel.vercel.app/ Compare your GitHub profiles with your friends It gives score to GitHub profile based o

Nov 21, 2022
Comments
  • [ImgBot] Optimize images

    [ImgBot] Optimize images

    Beep boop. Your images are optimized!

    Your image file size has been reduced by 40% 🎉

    Details

    | File | Before | After | Percent reduction | |:--|:--|:--|:--| | /snapshots/playlists.png | 1,542.79kb | 800.63kb | 48.11% | | /snapshots/roomslist.png | 1,551.50kb | 860.01kb | 44.57% | | /snapshots/home.png | 3,061.68kb | 1,728.40kb | 43.55% | | /snapshots/solanawallet.png | 3,085.63kb | 1,748.73kb | 43.33% | | /snapshots/solanamusic.png | 3,509.30kb | 2,070.65kb | 41.00% | | /snapshots/room.png | 2,023.74kb | 1,521.67kb | 24.81% | | /frontend/src/components/Header/sections/acousticsLogo.png | 60.06kb | 58.79kb | 2.13% | | /frontend/public/acousticsLogo.png | 333.17kb | 329.96kb | 0.96% | | | | | | | Total : | 15,167.86kb | 9,118.84kb | 39.88% |


    📝 docs | :octocat: repo | 🙋🏾 issues | 🏪 marketplace

    ~Imgbot - Part of Optimole family

    opened by imgbot[bot] 1
  • Configure Renovate

    Configure Renovate

    Mend Renovate

    Welcome to Renovate! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.

    🚦 To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.


    Detected Package Files

    • backend/package.json (npm)
    • frontend/package.json (npm)

    Configuration Summary

    Based on the default config's presets, Renovate will:

    • Start dependency updates only once this onboarding PR is merged
    • Enable Renovate Dependency Dashboard creation
    • If semantic commits detected, use semantic commit type fix for dependencies and chore for all others
    • Ignore node_modules, bower_components, vendor and various test/tests directories
    • Autodetect whether to pin dependencies or maintain ranges
    • Rate limit PR creation to a maximum of two per hour
    • Limit to maximum 10 open PRs at any time
    • Group known monorepo packages together
    • Use curated list of recommended non-monorepo package groupings
    • Fix some problems with very old Maven commons versions
    • Ignore spring cloud 1.x releases
    • Ignore web3j 5.0.0 release
    • Ignore http4s digest-based 1.x milestones
    • Use node versioning for @types/node
    • Limit concurrent requests to reduce load on Repology servers until we can fix this properly, see issue 10133
    • Do not upgrade from Alpine stable to edge

    🔡 Would you like to change the way Renovate is upgrading your dependencies? Simply edit the renovate.json in this branch with your custom config and the list of Pull Requests in the "What to Expect" section below will be updated the next time Renovate runs.


    What to Expect

    With your current configuration, Renovate will create 22 Pull Requests:

    Pin dependencies
    Update dependency express-session to v1.17.3
    • Schedule: ["at any time"]
    • Branch name: renovate/express-session-1.x
    • Merge into: main
    • Upgrade express-session to 1.17.3
    Update dependency nodemon to v2.0.16
    • Schedule: ["at any time"]
    • Branch name: renovate/nodemon-2.x
    • Merge into: main
    • Upgrade nodemon to 2.0.16
    Update Node.js to v14.19.3
    • Schedule: ["at any time"]
    • Branch name: renovate/node-14.x
    • Merge into: main
    • Upgrade node to 14.19.3
    Update dependency @socket.io/redis-adapter to v7.2.0
    • Schedule: ["at any time"]
    • Branch name: renovate/socket.io-redis-adapter-7.x
    • Merge into: main
    • Upgrade @socket.io/redis-adapter to 7.2.0
    Update dependency express to v4.18.1
    • Schedule: ["at any time"]
    • Branch name: renovate/express-4.x
    • Merge into: main
    • Upgrade express to 4.18.1
    Update dependency http-errors to v1.8.1
    • Schedule: ["at any time"]
    • Branch name: renovate/http-errors-1.x
    • Merge into: main
    • Upgrade http-errors to 1.8.1
    Update dependency js-video-url-parser to v0.5.1
    • Schedule: ["at any time"]
    • Branch name: renovate/js-video-url-parser-0.x
    • Merge into: main
    • Upgrade js-video-url-parser to 0.5.1
    Update dependency morgan to v1.10.0
    • Schedule: ["at any time"]
    • Branch name: renovate/morgan-1.x
    • Merge into: main
    • Upgrade morgan to 1.10.0
    Update dependency nanoid to v3.3.4
    • Schedule: ["at any time"]
    • Branch name: renovate/nanoid-3.x
    • Merge into: main
    • Upgrade nanoid to 3.3.4
    Update dependency passport to v0.6.0
    • Schedule: ["at any time"]
    • Branch name: renovate/passport-0.x
    • Merge into: main
    • Upgrade passport to 0.6.0
    Update dependency socket.io to v4.5.1
    • Schedule: ["at any time"]
    • Branch name: renovate/socket.io-packages
    • Merge into: main
    • Upgrade socket.io to 4.5.1
    Update npm to v8.12.1
    • Schedule: ["at any time"]
    • Branch name: renovate/npm-8.x
    • Merge into: main
    • Upgrade npm to 8.12.1
    Update Node.js to v16
    • Schedule: ["at any time"]
    • Branch name: renovate/node-16.x
    • Merge into: main
    • Upgrade node to 16.15.1
    Update dependency @testing-library/user-event to v14
    • Schedule: ["at any time"]
    • Branch name: renovate/testing-library-user-event-14.x
    • Merge into: main
    • Upgrade @testing-library/user-event to 14.2.0
    Update dependency connect-redis to v6
    • Schedule: ["at any time"]
    • Branch name: renovate/connect-redis-6.x
    • Merge into: main
    • Upgrade connect-redis to 6.1.3
    Update dependency debug to v4
    • Schedule: ["at any time"]
    • Branch name: renovate/debug-4.x
    • Merge into: main
    • Upgrade debug to 4.3.4
    Update dependency dotenv to v16
    • Schedule: ["at any time"]
    • Branch name: renovate/dotenv-16.x
    • Merge into: main
    • Upgrade dotenv to 16.0.1
    Update dependency googleapis to v100
    • Schedule: ["at any time"]
    • Branch name: renovate/googleapis-100.x
    • Merge into: main
    • Upgrade googleapis to 100.0.0
    Update dependency helmet to v5
    • Schedule: ["at any time"]
    • Branch name: renovate/helmet-5.x
    • Merge into: main
    • Upgrade helmet to 5.1.0
    Update dependency http-errors to v2
    • Schedule: ["at any time"]
    • Branch name: renovate/http-errors-2.x
    • Merge into: main
    • Upgrade http-errors to 2.0.0
    Update dependency redis to v4
    • Schedule: ["at any time"]
    • Branch name: renovate/redis-4.x
    • Merge into: main
    • Upgrade redis to 4.1.0

    🚸 Branch creation will be limited to maximum 2 per hour, so it doesn't swamp any CI resources or spam the project. See docs for prhourlylimit for details.


    ❓ Got questions? Check out Renovate's Docs, particularly the Getting Started section. If you need any further assistance then you can also request help here.


    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 1
  • Initiating Server

    Initiating Server

    1. Added code for creating http server with proper routes and middlewares.
    2. Attached the server to socket.io.
    3. Added additional event listeners and handlers.
    opened by sammanadh 0
Owner
Devyansh Chawla
Engineering at Cvent | MLH Fellow Summer'22, Fall'21 @MLH-Fellowship | GSoC'21 @wikimedia | Undergraduate at NIT, Kurukshetra
Devyansh Chawla
🟢 Music player app with a modern homepage, fully-fledged music player, search, lyrics, song exploration features, search, popular music around you, worldwide top charts, and much more.

Music-player-app see the project here. 1. Key Features 2. Technologies I've used Key Features: ?? Fully responsive clean UI. ?? Entirely mobile respo

suraj ✨ 3 Nov 16, 2022
Steam - Highlight specific friends who play

highlight-friends Steam Website - Highlight specific friends who play https://greasyfork.org/en/scripts/450409-highlight-specific-friends-who-play?loc

Roman Davydov 6 Nov 6, 2022
A Node.js HTTP proxy that tracks managed PaaS account applications and auto-stop&start them

paastis-engine Features Paastis engine is the heart of the Paastis project. Its goal is to monitor and manage (start & stop) PaaS applications based o

null 14 Nov 8, 2022
solana-base-app is a base level, including most of the common features and wallet connectivity, try using `npx solana-base-app react my-app`

solana-base-app solana-base-app is for Solana beginners to get them up and running fast. To start run : run npx solana-base-app react my-app change th

UjjwalGupta49 33 Dec 27, 2022
🛠 Solana Web3 Tools - A set of tools to improve the user experience on Web3 Solana Frontends.

?? Solana Web3 Tools - A set of tools to improve the user experience on Web3 Solana Frontends.

Holaplex 30 May 21, 2022
A daily print-and-play roguelike adventure you can play offline.

Chronicles of Stampadia A print-and-play roguelike with a new adventure every day! Play today's adventure | Read the manual | Learn how to play | Disc

Francesco Cottone 36 Oct 15, 2022
Danger is near (play to earn game, gamefi on near chain testnet) - user play as a fireknight in a PIXELVERSE world who go to forest and kill monster.

Danger is near (play to earn game, gamefi on near chain testnet) - user play as a fireknight in a PIXELVERSE world who go to forest and kill monster. User can earn $DANGER token and score to compete with others user.

Jason Factor 21 Dec 30, 2022
Learn to play the piano at your own pace through various modes of practice.

Piano Trainer Learn to play the piano at your own pace through various modes of practice. Features MIDI compatible Cross-platform support Interactive

Derek Jones 14 Aug 25, 2022
slack-friends Make it easy to send to Slack from your application

slack-friends Make it easy to send to Slack from your application Installation ?? npm install slack-friends How to get bot token https://api.slack.com

Taein Kang 9 Aug 23, 2022
An easy way to discover and manage your cloud like a local filesystem

cfs An easy way to discover and manage your cloud like a local filesystem. The swiss army knife for finding any resource in your AWS account. ⏬ instal

Khalid Zoabi 4 Jun 4, 2022