{"id":14235593,"url":"https://github.com/mkeeter/pont","last_synced_at":"2025-04-12T19:48:03.373Z","repository":{"id":47346445,"uuid":"254085919","full_name":"mkeeter/pont","owner":"mkeeter","description":"An online board game in Rust and WebAssembly","archived":false,"fork":false,"pushed_at":"2025-01-08T13:35:07.000Z","size":256,"stargazers_count":266,"open_issues_count":3,"forks_count":21,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-04-12T19:47:55.007Z","etag":null,"topics":["board-game","game","rust","wasm","webassembly","websockets"],"latest_commit_sha":null,"homepage":"https://mattkeeter.com/projects/pont","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mkeeter.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE-APACHE","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-04-08T12:48:11.000Z","updated_at":"2025-04-05T00:15:59.000Z","dependencies_parsed_at":"2025-02-28T04:07:37.503Z","dependency_job_id":"7a72566b-ce57-4af2-abdc-87ce34a8b553","html_url":"https://github.com/mkeeter/pont","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/mkeeter%2Fpont","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fpont/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fpont/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mkeeter%2Fpont/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mkeeter","download_url":"https://codeload.github.com/mkeeter/pont/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248625497,"owners_count":21135513,"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":["board-game","game","rust","wasm","webassembly","websockets"],"created_at":"2024-08-20T21:02:07.985Z","updated_at":"2025-04-12T19:48:03.339Z","avatar_url":"https://github.com/mkeeter.png","language":"Rust","funding_links":[],"categories":["Rust"],"sub_categories":[],"readme":"# About\n### [Project homepage](https://mattkeeter.com/projects/pont)\n\n`pont` is an online game based on\n[Qwirkle (by Mindware Games)](https://en.wikipedia.org/wiki/Qwirkle)\n\n![Screenshot](https://mattkeeter.com/projects/pont/screenshot.png)\n\nNotably, both the client and server are written in Rust;\nthe only Javascript is a shim to load the WebAssembly module.\n\n# Hosting\nIt's easiest to run the whole application on a single VM,\nusing [NGINX](https://www.nginx.com/) to both serve static content\nand to act as a secure proxy for websocket communication.\nThe latter means we don't need SSL support in the game server itself.\n\nThe system looks something like this:\n\n![Screenshot](https://mattkeeter.com/projects/pont/diagram.svg)\n\nI'm hosting a copy of the game at\n[https://pont.mattkeeter.com](https://pont.mattkeeter.com),\nusing a $5/month droplet from [Digital Ocean](https://www.digitalocean.com/)\nand [Dreamhost](https://www.dreamhost.com/) for domain registration.\n\n## Initial setup\n```\nsudo apt update\nsudo apt install build-essentials libssl-dev pkg-config\ncurl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh\n```\n\n## Installing NGINX and setting up Let's Encrypt\n```\nsudo apt install nginx\nsudo apt-get install software-properties-common\nsudo add-apt-repository universe\nsudo add-apt-repository ppa:certbot/certbot\nsudo apt-get update\nsudo apt-get install certbot python3-certbot-nginx\n\nsudo certbot --nginx\n```\n(read and follow `certbot`'s instructions)\n\n## Turn on a firewall to improve security\n```\nsudo ufw allow ssh\nsudo ufw allow http\nsudo ufw allow https\nsudo ufw allow 8081\nsudo ufw enable\n```\n\n## Building the client WebAssembly file\n```\ngit clone https://github.com/mkeeter/pont.git\ncd pont/pont-client\nwasm-pack build --target web\n```\n\n## Deploy the nginx config\n```\nsudo cp pont.conf /etc/nginx/sites-enabled/pont.conf\nsudo rm /etc/nginx/sites-enabled/default\nsudo nginx -s reload\n```\nThis won't work out of the box, because the configuration assumes the url is\n`pont.mattkeeter.com`, which won't be true for you; edit it accordingly.\n\n## Running the server\n```\ncd pont/pont-server\ncargo run --release\n```\n(leave this in a `screen` session for easy persistence!)\n\n# License\n© 2020 [Matthew Keeter](https://mattkeeter.com)\n\nLicensed under either of\n\n * Apache License, Version 2.0\n   ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)\n * MIT license\n   ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)\n\nat your option.\n\n## Contribution\n\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in the work by you, as defined in the Apache-2.0 license, shall be\ndual licensed as above, without any additional terms or conditions.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkeeter%2Fpont","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmkeeter%2Fpont","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmkeeter%2Fpont/lists"}