How tauqeer-code-craft/inkguess works
InkGuess is a real-time multiplayer drawing-and-guessing game. Players create or join a coded room, the host starts rounds, a drawer selects a word and shares strokes while others guess in chat, and the game updates hints, timers, scores, and final rankings before a rematch. The frontend combines REST room setup with Socket.IO gameplay; the backend coordinates room and game state through Redis with an in-memory fallback. Relationships involving unsampled gateway and component internals are limited to source-index references or README-documented behavior.
Main entry points: GameBoard.tsx Game board · game.service.ts Game engine · socketService.ts Socket client · useGameStore.ts Game state
Components 18
Player experience
- Room lobby
apps/frontend/src/components/Lobby.tsx - Game board
apps/frontend/src/components/GameBoard.tsx - Drawing canvas
apps/frontend/src/components/Canvas.tsx - Guess chat
apps/frontend/src/components/Chat.tsx - Word selection
apps/frontend/src/components/WordSelection.tsx - Scoreboard
apps/frontend/src/components/ScoreBoard.tsx
Frontend runtime
- App session
apps/frontend/src/App.tsx - Game state
apps/frontend/src/store/useGameStore.ts - Room REST client
apps/frontend/src/api/client.ts - Socket client
apps/frontend/src/sockets/socketService.ts
Game backend
- Room API
apps/backend/src/room.controller.ts - Socket gateway
apps/backend/src/socket.gateway.ts - Game engine
apps/backend/src/game.service.ts - Word selection data
apps/backend/src/game-words.ts - Game data types
apps/backend/src/types.ts
Room state
- State adapter
apps/backend/src/redis.service.ts - Redis
Other components
- Players
Connections 28
- Players → Room lobby: create or join
readme.md - App session → Room lobby: shows lobby
apps/frontend/src/App.tsx - App session → Game board: shows game
apps/frontend/src/App.tsx - App session → Socket client: connects
apps/frontend/src/App.tsx - Room lobby → Room REST client: requests rooms
apps/frontend/src/components/Lobby.tsx - Room lobby → Socket client: joins room
apps/frontend/src/components/Lobby.tsx - Game board → Game state: reads state
apps/frontend/src/components/GameBoard.tsx - Game board → Drawing canvas: renders
apps/frontend/src/components/GameBoard.tsx - Game board → Guess chat: renders
apps/frontend/src/components/GameBoard.tsx - Game board → Word selection: renders
apps/frontend/src/components/GameBoard.tsx - Game board → Scoreboard: renders
apps/frontend/src/components/GameBoard.tsx - Drawing canvas → Game state: updates
apps/frontend/src/components/Canvas.tsx - Drawing canvas → Socket client: sends strokes
apps/frontend/src/components/Canvas.tsx - Guess chat → Game state: updates
apps/frontend/src/components/Chat.tsx - Guess chat → Socket client: submits guesses
apps/frontend/src/components/Chat.tsx - Word selection → Game state: reads state
apps/frontend/src/components/WordSelection.tsx - Word selection → Socket client: selects word
apps/frontend/src/components/WordSelection.tsx - Scoreboard → Game state: reads scores
apps/frontend/src/components/ScoreBoard.tsx - Room REST client → Room API: HTTP requests
readme.md - Socket client → Socket gateway: sends game events
readme.md - Socket gateway → Game engine: dispatches events
apps/backend/src/socket.gateway.ts - Room API → Game engine: room operations
apps/backend/src/room.controller.ts - Game engine → State adapter: reads and writes
apps/backend/src/game.service.ts - Game engine → Word selection data: generates choices
apps/backend/src/game.service.ts - Game engine → Socket gateway: broadcasts events
apps/backend/src/socket.gateway.ts - State adapter → Redis: uses when available
apps/backend/src/redis.service.ts - Game engine → Game data types: uses data types
apps/backend/src/game.service.ts - Socket gateway → Game data types: uses data types
apps/backend/src/socket.gateway.ts