{"id":20325691,"url":"https://github.com/lamdav/commujukebox","last_synced_at":"2026-05-08T03:39:27.860Z","repository":{"id":71873651,"uuid":"161952601","full_name":"lamdav/CommuJukeBox","owner":"lamdav","description":"Curate a list of videos to watch or listen to","archived":false,"fork":false,"pushed_at":"2018-12-15T23:47:02.000Z","size":178,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-24T03:32:56.555Z","etag":null,"topics":["chat","jukebox","react","slack"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lamdav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-15T23:41:12.000Z","updated_at":"2018-12-15T23:47:47.000Z","dependencies_parsed_at":null,"dependency_job_id":"d57b2ef9-de94-4f88-aa02-24861bbb5201","html_url":"https://github.com/lamdav/CommuJukeBox","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FCommuJukeBox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FCommuJukeBox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FCommuJukeBox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lamdav%2FCommuJukeBox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lamdav","download_url":"https://codeload.github.com/lamdav/CommuJukeBox/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241829280,"owners_count":20027054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["chat","jukebox","react","slack"],"created_at":"2024-11-14T19:41:12.000Z","updated_at":"2025-10-29T23:06:54.307Z","avatar_url":"https://github.com/lamdav.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CommuJukeBox\nThe Community Jukebox\n\n\n## Description\nBuild a community video playlist. Currently set up to be integrated with Slack; however, for other messaging platform,\nan endpoint `/api/{platform}` needs to be implemented with proper validation and pass the video link to play and a way to uniquely\nidentify the user who requested it.\n\nUsing a messenging platform like Slack, a user can send a video link to the backend service which will be routed to a central consumer\nfor broadcasting on a larger screen.\n\n\n## Features\n- [x] Slack Integration\n- [ ] Other chat integration (Pull Requests are welcome)\n- [x] User Request Throttling (5 minutes)\n- [x] Administrative Queueing Endpoint to bypass Throttling\n- [x] Validate Youtube videos\n\n\n## Setup\n1. Clone the repo: `git clone https://github.com/lamdaV/CommuJukeBox.git`\n2. Change into the repo directory: `cd CommuJukeBox`\n3. Install dependencies: `yarn install` or `npm install`\n4. Create Slack workspace or use an existing one\n5. Create a Slack [app](https://api.slack.com/apps)\n6. Create .env file with values filled out:\n```\nNODE_ENV=production  # state of deployment\nHOST=localhost  # host of api server\nSERVER_PORT=8080  # port of api server\nPRIVILEDGED_USER=changeme   # just a specific username for the administrative user\nPRIVILEDGED_TOKEN=changeme  # secret used to authenticate administrative endpoint\n\nSLACK_VERSION=v0  # slack schema version used to verify requests\nSLACK_VERIFICATION_SECRET=changeme  # slack verification secret used to verify requests\n\nREACT_APP_IO_HOST=localhost  # socket.io host for frontend to connect to\nREACT_APP_IO_PORT=8081  # socket.io port for frontend to connext to\n```\n7. Build frontend: `yarn build`\n8. Start server: `yarn serve`\n9. Install [ngrok](https://ngrok.com/)\n10. Start ngrok in separate terminal window: `ngrok http {SERVER_PORT}` (SERVER_PORT from .env)\n11. Create a Slack `Slash commands` and point it to the provided ngrok tunnel endpoint and append `/api/slack`\n12. In a different tab or window, go to `localhost:{SERVER_PORT}` and you should see a simplistic frontend\n13. Return to Slack and type the Slash command you created with a Youtube link: `/play youtube.com/watch?v={videoId}`\n14. A video should start playing `localhost:{SERVER_PORT}`\n\n\n## Contributing\nWant to add support for other chat applications? Create an endpoint `/api/{chatApplicationName}` and handle any verification\nprocess possible for that chat application. \n\nWant to add support for videos other than YouTube? Improve the existing URL verification to support other videos or improve \nthe existing YouTube url verification.\n\nAny features or improvements are welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdav%2Fcommujukebox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flamdav%2Fcommujukebox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flamdav%2Fcommujukebox/lists"}