From d568955d6abf389e6ab7c6979e33122a65917a46 Mon Sep 17 00:00:00 2001 From: Thomas Hallock Date: Wed, 29 Oct 2025 09:45:40 -0500 Subject: [PATCH] feat(arcade): add yjs-demo collaborative game and Yjs persistence layer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add yjs-demo arcade game with collaborative state management - Add Yjs persistence layer for real-time sync - Update socket server with Yjs support - Update Rithmomachia game component - Add yjs type definitions šŸ¤– Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- apps/web/package.json | 5 + apps/web/public/gallery-demo.html | 4 +- apps/web/server.js | 26 ++ .../components/RithmomachiaGame.tsx | 191 ++++++++++- .../src/arcade-games/yjs-demo/Provider.tsx | 301 ++++++++++++++++++ .../src/arcade-games/yjs-demo/Validator.ts | 85 +++++ .../yjs-demo/components/PlayingPhase.tsx | 215 +++++++++++++ .../yjs-demo/components/ResultsPhase.tsx | 225 +++++++++++++ .../yjs-demo/components/SetupPhase.tsx | 102 ++++++ .../yjs-demo/components/YjsDemoGame.tsx | 31 ++ .../arcade-games/yjs-demo/components/index.ts | 4 + apps/web/src/arcade-games/yjs-demo/index.ts | 64 ++++ apps/web/src/arcade-games/yjs-demo/types.ts | 54 ++++ apps/web/src/lib/arcade/yjs-persistence.ts | 67 ++++ apps/web/src/socket-server.ts | 291 ++++++++++++++++- apps/web/src/types/yjs-cjs.d.ts | 24 ++ apps/web/test_fullscreen_persistence.html | 2 +- pnpm-lock.yaml | 67 ++++ 18 files changed, 1751 insertions(+), 7 deletions(-) create mode 100644 apps/web/src/arcade-games/yjs-demo/Provider.tsx create mode 100644 apps/web/src/arcade-games/yjs-demo/Validator.ts create mode 100644 apps/web/src/arcade-games/yjs-demo/components/PlayingPhase.tsx create mode 100644 apps/web/src/arcade-games/yjs-demo/components/ResultsPhase.tsx create mode 100644 apps/web/src/arcade-games/yjs-demo/components/SetupPhase.tsx create mode 100644 apps/web/src/arcade-games/yjs-demo/components/YjsDemoGame.tsx create mode 100644 apps/web/src/arcade-games/yjs-demo/components/index.ts create mode 100644 apps/web/src/arcade-games/yjs-demo/index.ts create mode 100644 apps/web/src/arcade-games/yjs-demo/types.ts create mode 100644 apps/web/src/lib/arcade/yjs-persistence.ts create mode 100644 apps/web/src/types/yjs-cjs.d.ts diff --git a/apps/web/package.json b/apps/web/package.json index 87cd8948..6808c0fb 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -60,6 +60,7 @@ "emojibase-data": "^16.0.3", "jose": "^6.1.0", "js-yaml": "^4.1.0", + "lib0": "^0.2.114", "lucide-react": "^0.294.0", "make-plural": "^7.4.0", "nanoid": "^5.1.6", @@ -72,6 +73,9 @@ "react-resizable-layout": "^0.7.3", "socket.io": "^4.8.1", "socket.io-client": "^4.8.1", + "y-protocols": "^1.0.6", + "y-websocket": "^3.0.0", + "yjs": "^13.6.27", "zod": "^4.1.12" }, "devDependencies": { @@ -87,6 +91,7 @@ "@types/node": "^20.0.0", "@types/react": "^18.2.0", "@types/react-dom": "^18.2.0", + "@types/ws": "^8.18.1", "@vitejs/plugin-react": "^5.0.2", "concurrently": "^8.0.0", "drizzle-kit": "^0.31.5", diff --git a/apps/web/public/gallery-demo.html b/apps/web/public/gallery-demo.html index 273abc93..50476e95 100644 --- a/apps/web/public/gallery-demo.html +++ b/apps/web/public/gallery-demo.html @@ -398,8 +398,8 @@