{"id":18365219,"url":"https://github.com/festify/app","last_synced_at":"2025-04-06T16:31:10.234Z","repository":{"id":37383637,"uuid":"73214515","full_name":"Festify/app","owner":"Festify","description":":tada: Festify Host \u0026 Client","archived":false,"fork":false,"pushed_at":"2023-08-04T13:02:36.000Z","size":5489,"stargazers_count":423,"open_issues_count":69,"forks_count":76,"subscribers_count":13,"default_branch":"develop","last_synced_at":"2025-03-22T03:22:40.288Z","etag":null,"topics":["music","social-jukebox","spotify"],"latest_commit_sha":null,"homepage":"https://festify.rocks/","language":"TypeScript","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/Festify.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":"2016-11-08T18:23:39.000Z","updated_at":"2025-03-11T16:06:30.000Z","dependencies_parsed_at":"2024-11-05T23:13:02.941Z","dependency_job_id":"8b147aa6-1024-4433-9f34-27f48467925e","html_url":"https://github.com/Festify/app","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Festify%2Fapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Festify%2Fapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Festify%2Fapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Festify%2Fapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Festify","download_url":"https://codeload.github.com/Festify/app/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247512522,"owners_count":20950878,"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":["music","social-jukebox","spotify"],"created_at":"2024-11-05T23:12:55.285Z","updated_at":"2025-04-06T16:31:09.875Z","avatar_url":"https://github.com/Festify.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://festify.rocks/\"\u003e\n    \u003cimg title=\"Festify Logo\" height=\"150\" src=\"https://festify.rocks/img/festify-logo.svg\"\u003e\n\u003c/a\u003e\n\n# Festify\n\n[![Greenkeeper badge](https://badges.greenkeeper.io/Festify/app.svg)](https://greenkeeper.io/) [![Build Status](https://travis-ci.org/Festify/app.svg?branch=develop)](https://travis-ci.org/Festify/app)\n\nFestify is a free Spotify-powered app that lets your guests choose which music should be played using their smartphones. [festify.rocks](https://festify.rocks/)\n\n## Building\n\n### Dependencies\n\n1. [nodejs](https://nodejs.org), [TypeScript](https://typescriptlang.org) and [yarn](https://yarnpkg.com): Festify is written in TypeScript for better scalability and fewer bugs. We use yarn for package management.\n1. [Firebase](https://firebase.google.com): Festify is built upon Firebase Realtime Database and Firebase Cloud Functions. Set up a _dedicated and paid_ Firebase project. For user management, you need to enable at least [anonymous authentication](https://firebase.google.com/docs/auth/web/anonymous-auth), and if you want cheat-prevention to work, also authentication with GitHub, Facebook, Twitter, and Google+. In that case, you also need to set up and register the respective app / developer accounts with these services.\n1. [Spotify](https://beta.developer.spotify.com/): Festify plays music from Spotify. Set up a Spotify Developer Application (you need a Spotify Premium account) and configure the OAuth redirect URL. Usually at least `http://localhost:3000` is needed for a dev-environment. 3000 is the port the dev-server started with `yarn serve` runs on, but this can be any port you like, if you configure the dev server accordingly.\n1. [Fanart.tv](https://fanart.tv) \u0026 [Sentry](https://sentry.io): Festify displays Fanart from fanart.tv in the TV Mode and uses Sentry for error reporting. You require an account for both services.\n\n### Environment Files\n\nFestify loads configuration variables though JS / TS / JSON files included in the build process. All following paths are relative to the repository root.\n\n- `common.config.js`: This file includes common configuration values that don't deserve their own file. Currently this is the Sentry URL and the Fanart.tv API key. It looks like this:\n    ```js\n    export const FANART_TV_API_KEY = \"FANART_API_KEY_HERE\";\n    export const SENTRY_URL = \"SENTRY_URL_HERE\";\n    ```\n\n- `firebase.config.js`: This file contains a simplified form of the config snippet you get when you add Firebase to a web application.\n    ```js\n    export default {\n        apiKey: \"FIREBASE_API_KEY\",\n        authDomain: \"FIREBASE_AUTH_DOMAIN\",\n        databaseURL: \"FIREBASE_DATABASE_URL\",\n        projectId: \"FIREBASE_PROJECT_ID\",\n    };\n    ```\n\n- `spotify.config.js`: This file contains the required configuration for authorization with Spotify and playback.\n    ```js\n    export const CLIENT_ID = \"YOUR_SPOTIFY_APPLICATION_CLIENT_ID\";\n    ```\n\n- `functions/service-account.json`: This is the Firebase service account file obtained directly from the web console. You can obtain it by going to Project Settings \u003e Service Accounts \u003e Firebase Admin SDK \u003e Generate new private key.\n\n- `functions/spotify.config.ts`: This file contains Spotify configuration for the cloud functions.\n    ```ts\n    export const CLIENT_ID = \"YOUR_SPOTIFY_APPLICATION_CLIENT_ID\";\n    export const ENCRYPTION_SECRET = \"REFRESH_TOKEN_ENCRYPTION_KEY - PLEASE GENERATE\";\n    export const CLIENT_SECRET = \"YOUR_SPOTIFY_APPLICATION_CLIENT_SECRET\";\n    ```\n\nSince all config values (except for the `service-account.json`) are loaded through standard ES modules machinery, building the project will notify you if something is missing.\n\n### Building \u0026 Serving\n\nThe `package.json` contains all necessary commands for building Festify.\n- `build`\u003ca name=\"build-festify\"\u003e\u003c/a\u003e: Compiles the TypeScript to JS and bundles all JS to a single file. You can then deploy the files in `/build` to a webserver of choice to run Festify.\n- `fix`: Attempts to automatically fix linter errors.\n- `lint`: Lints the TS sources with tslint.\n- `prepare-env`: Used in CI environments to load environment files from branch-name-suffixed environment variables.\n- `serve`: Starts the rollup dev-server serving a local instance of Festify on port 3000. Also supports live-reloading. Ensure you deploy the project to firebase before using the dev server because Festify depends on cloud functions to be present!\n\n## Contributing\n\n1. Fork it! :octocat:\n1. Create your feature branch: `git checkout -b my-improvement`\n1. Make your changes and test them!\n1. Commit \u0026 push your changes\n1. Submit a pull request :rocket:\n\n## License\n\nLGPLv3\n\n## Sponsors\n\nThese people helped us bring Festify to life. Thank you!\n\n\u003ca href=\"https://browserstack.com/\"\u003e\u003cimg title=\"BrowserStack\" src=\"https://festify.rocks/img/sponsors/browserstack.svg\" width=\"400\"\u003e\u003c/a\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffestify%2Fapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffestify%2Fapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffestify%2Fapp/lists"}