{"id":16668466,"url":"https://github.com/ekzhang/setwithfriends","last_synced_at":"2025-04-04T06:10:11.651Z","repository":{"id":40844700,"uuid":"231443574","full_name":"ekzhang/setwithfriends","owner":"ekzhang","description":"🎮 A frictionless multiplayer web app that lets you play Set with friends","archived":false,"fork":false,"pushed_at":"2024-08-14T17:00:08.000Z","size":4924,"stargazers_count":559,"open_issues_count":28,"forks_count":60,"subscribers_count":6,"default_branch":"main","last_synced_at":"2024-10-13T11:25:15.688Z","etag":null,"topics":["firebase","multiplayer","online-game","react","serverless","set-game"],"latest_commit_sha":null,"homepage":"https://setwithfriends.com","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ekzhang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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":"2020-01-02T19:10:22.000Z","updated_at":"2024-10-09T10:52:14.000Z","dependencies_parsed_at":"2024-10-25T18:32:47.305Z","dependency_job_id":"14568235-c6be-452f-a331-0adec4f98732","html_url":"https://github.com/ekzhang/setwithfriends","commit_stats":null,"previous_names":[],"tags_count":34,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fsetwithfriends","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fsetwithfriends/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fsetwithfriends/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ekzhang%2Fsetwithfriends/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ekzhang","download_url":"https://codeload.github.com/ekzhang/setwithfriends/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247128753,"owners_count":20888235,"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":["firebase","multiplayer","online-game","react","serverless","set-game"],"created_at":"2024-10-12T11:25:28.755Z","updated_at":"2025-04-04T06:10:11.635Z","avatar_url":"https://github.com/ekzhang.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Set with Friends\n\n![Logo](https://i.imgur.com/YTldFYX.png)\n\nThis is the source code for [Set with Friends](https://setwithfriends.com/), an\nonline, multiplayer implementation of the real-time card game\n[Set](\u003chttps://en.wikipedia.org/wiki/Set_(card_game)\u003e). Your goal is to find\ntriplets of cards that follow a certain pattern as quickly as possible.\n\n- [Web version](https://setwithfriends.com/)\n- [Official Discord](https://discord.gg/XbjJyc9)\n\n## Technical Details\n\nThis app was built on a serverless stack primarily using the\n[Firebase Realtime Database](https://firebase.google.com/docs/database), along\nwith [Firebase Cloud Functions](https://firebase.google.com/docs/functions) for\nmore complex or sensitive operations. The frontend was built with\n[React](https://reactjs.org/), with components from\n[Material UI](https://material-ui.com/).\n\nCode for the frontend is written in JavaScript and located in the `src/` folder,\nwhile serverless functions are written in TypeScript and located in the\n`functions/` folder.\n\nThe latest development version of the code is on the `main` branch. We use\nGitHub Actions to automate our build and deployment process on Netlify, after a\nnew release is created with version number `vA.B.C`.\n\n## Contributing\n\nThis game is currently in maintenance mode, and we'll only accept bug fixes. I\nwould recommend talking to us on Discord (link above) if you really want to see\na new feature added. We also have monthly community meetings organized there.\n\nTo build the site for development:\n\n- Install Node 20 and npm 10.\n- Run `npm install -g firebase-tools` to globally install the Firebase CLI.\n- Run `npm install` in the root folder to get dependencies.\n- Run `npm install` in the `functions` folder.\n- To start the project, run `npm run develop`. This runs a script, which is\n  responsible for doing several things concurrently:\n  - Build the TypeScript cloud functions in watch mode.\n  - Start the Firebase Local Emulator Suite.\n  - Start the frontend dev server with Vite + React.\n\nThe site can be opened at `http://localhost:5173`.\n\nYou should also be able to access the Emulator UI at `http://localhost:4000`,\nwhich contains useful information and allows you to inspect/modify the database\nduring development. Changes to client code in `src` should be immediately\nvisible, as well as changes to code in `functions`.\n\nOther useful commands:\n\n```bash\nnpm run lint\nnpm test\n\n# Bundle the application into static assets.\nnpm run build\nnpm run build:preview\n\n# Format the codebase with Prettier.\nnpm run format\n\n# Run development server targeting setwithfriends-dev project.\nnpm run dev -- --mode preview\n\n# Run development server targeting production data. This requires Eric to update\n# the \"Browser key (auto created by Firebase)\" website restrictions at\n# https://console.cloud.google.com/apis/credentials to allow traffic.\nnpm run dev -- --mode production\n```\n\n## Deployment\n\nAs mentioned above, the latest changes to the `main` branch are deployed\nautomatically to Netlify using the `npm run build` script. If you try to run\nthis locally, it will not work due to protections on the production database.\nInstead, you can preview a release build configured to connect to the local\nemulator suite using the `npm run build:dev` script.\n\nThe other parts of the app (serverless functions, database rules) are deployed\nto production using GitHub Actions on the `main` branch. The\n[staging environment](https://setwithfriends-dev.web.app/) gets automatic deploy\npreviews when CI on the `main` branch passes. It is useful for seeing the latest\nversion of the app and making sure that nothing is broken before releasing to\nproduction.\n\n## License\n\nBuilt by [Eric Zhang](https://github.com/ekzhang) and\n[Cynthia Du](https://github.com/cynthiakedu).\n\nAll source code is available under the [MIT License](LICENSE.txt). We are not\naffiliated with _Set Enterprises, Inc._, or the SET® card game.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekzhang%2Fsetwithfriends","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fekzhang%2Fsetwithfriends","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fekzhang%2Fsetwithfriends/lists"}