{"id":18457587,"url":"https://github.com/amwebexpert/ws-poker-planning","last_synced_at":"2026-01-28T23:32:21.297Z","repository":{"id":88549483,"uuid":"537450274","full_name":"amwebexpert/ws-poker-planning","owner":"amwebexpert","description":"Server for handling agile poker planning sessions communications through WebSocket clients","archived":false,"fork":false,"pushed_at":"2024-10-28T15:18:23.000Z","size":16544,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-08T05:33:43.703Z","etag":null,"topics":["nodejs","websockets"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/amwebexpert.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-16T12:33:54.000Z","updated_at":"2024-10-28T15:18:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"381ee3cb-341e-4320-8a0d-ff55f1659966","html_url":"https://github.com/amwebexpert/ws-poker-planning","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/amwebexpert/ws-poker-planning","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amwebexpert%2Fws-poker-planning","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amwebexpert%2Fws-poker-planning/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amwebexpert%2Fws-poker-planning/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amwebexpert%2Fws-poker-planning/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amwebexpert","download_url":"https://codeload.github.com/amwebexpert/ws-poker-planning/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amwebexpert%2Fws-poker-planning/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28855134,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T22:56:21.783Z","status":"ssl_error","status_checked_at":"2026-01-28T22:56:00.861Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["nodejs","websockets"],"created_at":"2024-11-06T08:14:58.531Z","updated_at":"2026-01-28T23:32:21.292Z","avatar_url":"https://github.com/amwebexpert.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WSPokerPlanning\n\n\n![GitHub last commit](https://img.shields.io/github/last-commit/amwebexpert/ws-poker-planning) [![License](https://img.shields.io/badge/license-MIT-green)](./LICENSE)\n\nPoker planning sessions server handing communications through WebSocket. Once this server is started, it manages an in-memory map of rooms with connected socket clients. Sockets clients can specify a roomUUID and once connected all messages are private to that room.\n\n1. the client side connects through a web socket URL and specify a roomUUID param. Example: `ws://localhost:8080/ws?roomUUID=xxxyyyzzz`\n1. the server upgrades the connection to a full duplex web socket channel and reply with the whole room current state\n1. the client socket can then:\n   - emit a message to update the room state by using `socket.send()`\n   - receive room updates asynchrously through the `socket.onmessage()`\n\n## Build and start (production mode)\n\n    npm run build\n    npm start\n\n## Start in development mode (with hot reload)\n\n    npm run start:dev\n\n## Localhost deployment\n\nIf the `process.env.PORT` is undefined the default port becomes `8080`\n\n- ws://localhost:8080/ws\n\n## WSPokerPlanning server production deployment\n\nThe `ws-poker-planning` server is a pure `Node.js` backend app that can be easyly deployed on public cloud engines like [Heroku](https://heroku.com/). You can deploy and start the app locally for testing purpose, but if you want real live web sockets support we suggest a deployment on:\n\n- your own enterprise internal servers where all your VPN connected users can see the running server\n- cloud solutions providers like `AWS`, `GCP`, `Azure`...\n\nThe production app has been deployed at the following location (thanks to OnRender.com) but may need a warmup step, give it a try:\n- `ws-poker-planning.onrender.com` - deployed on [onrender.com](https://ws-poker-planning.onrender.com)\n\nYou can also deploy it on your internal server because:\n- all your poker planning sessions are going to be private (only visible through your VPN for instance)\n- you can still take advantage of the full poker planning client app (see below) since the hostname and port are just a configuration\n\n## Full poker planning client app (PROD)\n\nThe [Web Toolbox](https://amwebexpert.github.io/etoolbox/#/PokerPlanning) includes a full front end implementation of the Poker planning session. To start a poker planning session:\n\n- ensure the server is up and running\n- open the [Web Toolbox](https://amwebexpert.github.io/etoolbox/#/PokerPlanning) UI\n- type the hostname:portnumber inside the `Server` field. No need to provide the port if it's the default one (`80` for `http` or `443` for `https`). For instance:\n  - `butter-sneaky-waitress.glitch.me`\n- type the name of your team inside the `Team name` field\n- type your username in the corresponding field\n- press the share button so the full poker planning session link can be shared with other team members\n- the resulting link is going to include the generated room number, the server, and the team name so it can be safely bookmarked for future poker planning sessions\n\n## Full poker planning client app and server (development)\n\nThe [Web Toolbox](https://github.com/amwebexpert/etoolbox#start-the-app-locally) GitHub project explains how to start the single-page app locally. Once this app is started, you can then start a poker planning session server as follows:\n\n- ensure the server is up and running by executing `npm run start:dev` which is going to start the server on `localhost:8080`\n- open the UI locally at [http://localhost:3000/#/PokerPlanning](http://localhost:3000/#/PokerPlanning)\n- type `localhost:8080` inside the `Server` field\n- populate the name of your team inside the `Team name` field\n- type your username in the corresponding field\n- press the `JOIN` button\n\n## Roadmap\n\n- add an automatic cleanup of old rooms, based on lastUpdateISO8601 poker session attribute\n  - send close signal on each socket of the room?\n- add ability to become a room master (the one having more rights on UI side, like being able to remove members)\n\n### References\n\n- [ws: a Node.js WebSocket library](https://www.npmjs.com/package/ws)\n- [WebSocket explained](https://javascript.info/websocket)\n- [For a SPA push notification, is a websocket mandatory?](https://stackoverflow.com/questions/31035467/for-a-push-notification-is-a-websocket-mandatory)\n- [Deploying a Node.js server with WebSockets on a free hosting Heroku](https://www.gamedev.net/blogs/entry/2272759-deploying-a-nodejs-server-with-websockets-on-a-free-hosting-heroku-web-desktop-clients-qt/)\n- [Express WS service example](https://github.com/8Observer8/mouse-click-js)\n- [Socket.IO enables real-time bidirectional event-based communication](https://github.com/socketio/socket.io)\n- [ReconnectingWebSocket](https://github.com/joewalnes/reconnecting-websocket/)\n- [GCP Using WebSockets](https://cloud.google.com/run/docs/triggering/websockets)\n\n### WebSocket could be used also on mobile app (iOS, Android…) as it is mature and well known\n\n- https://github.com/daltoniam/Starscream\n- https://square.github.io/okhttp/4.x/okhttp/okhttp3/-web-socket/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famwebexpert%2Fws-poker-planning","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famwebexpert%2Fws-poker-planning","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famwebexpert%2Fws-poker-planning/lists"}