{"id":22006470,"url":"https://github.com/anoff/mobcards","last_synced_at":"2026-04-20T09:31:57.522Z","repository":{"id":50115286,"uuid":"129136367","full_name":"anoff/mobcards","owner":"anoff","description":"cardgames made for smartphones","archived":false,"fork":false,"pushed_at":"2021-06-04T00:37:29.000Z","size":2810,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-28T13:43:53.240Z","etag":null,"topics":["card","cards-against-humanity","game","mobcards","socket-io","vue","webdev","websocket"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anoff.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-04-11T18:21:15.000Z","updated_at":"2021-06-04T00:37:20.000Z","dependencies_parsed_at":"2022-09-23T14:12:19.650Z","dependency_job_id":null,"html_url":"https://github.com/anoff/mobcards","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/anoff%2Fmobcards","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoff%2Fmobcards/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoff%2Fmobcards/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anoff%2Fmobcards/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anoff","download_url":"https://codeload.github.com/anoff/mobcards/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245066524,"owners_count":20555404,"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":["card","cards-against-humanity","game","mobcards","socket-io","vue","webdev","websocket"],"created_at":"2024-11-30T01:12:22.313Z","updated_at":"2026-04-20T09:31:57.473Z","avatar_url":"https://github.com/anoff.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# mobcards 📱🃏\n\n\u003e Play cards with your friends even if you didn't bring any 🚫 🃏 —  but everyone got a smartphone right? 📱\n\n## description\n\nA mobile first (maybe only) web application that lets you play cards against humanity with friends without having a deck of cards handy.\nAlthough it works fully remote it is most fun if played in a IRL group.\n\nMatchmaking is done via a serverless backend where clients are connected using a **session token** that gets shared from the host to its friends/players.\n\n## usage\n\nRun node server on port `3000` and webpack dev server on `8080` to develop both with hot reloading and open [localhost:8080](http://localhost:8080)\n\n```sh\n# start dev server \nnpm run dev-server\n# start webpack-dev-server in ./web directory\nnpm run dev-client\n```\n\n## game design\n\n![usecase diagram](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.github.com/anoff/mobcards/master/assets/usecase.iuml)\n\n\u003e use cases and interactions\n\n![state machine](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.github.com/anoff/mobcards/master/assets/state.iuml)\n\n\u003e game states\n\n## socket events\n\nAll communication between clients and the server happens over websockets and is therefore eventbased. Clients fire an event and the reaction is triggered once the server responds. With high latencies this event driven approach _might_ feel unnatural.\n\nThere are two different state machine definitions one from the server viewpoint that describes the progress of a single game and one from a client view that describes the current client (UI) state.\n\n![game state machine](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.github.com/anoff/mobcards/master/assets/game-states.iuml)\n![player state machine](http://www.plantuml.com/plantuml/proxy?cache=no\u0026src=https://raw.github.com/anoff/mobcards/master/assets/player-states.iuml)\n\nPayloads updates of type `Array` are always in the form of:\n\n```javascript\n{ add: [], remove [], status: [] }\n```\n\nwhere `add` is a list of players/votes/cards that were added, `remove` resources that have to be removed from local state and `status` is a complete update of the state that should overwrite local state.\n\nA special `ACK` event is emitted by the server in response to a client message that modifies state, e.g. voting on start, choosing a card.\n\n## License\n\nCards taken from [crhallbergs collection of decks](https://github.com/crhallberg/json-against-humanity). The originals, his collection as well as all derivatives within this project are licensed under [CC BY-NC-SA 2.0](https://creativecommons.org/licenses/by-nc-sa/2.0/).\n\nAny code in this project is licensed under [MIT](https://opensource.org/licenses/MIT)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanoff%2Fmobcards","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanoff%2Fmobcards","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanoff%2Fmobcards/lists"}