kinda.fun icon indicating copy to clipboard operation
kinda.fun copied to clipboard

Refactor The Wrongest Words Game to Use Firebase Exclusively

Open Copilot opened this issue 7 months ago • 0 comments

This PR completely migrates "The Wrongest Words" game from Socket.IO to Firebase Firestore, eliminating all real-time multiplayer dependencies on Socket.IO infrastructure while maintaining full game functionality.

Overview

The Wrongest Words game previously relied on Socket.IO for all real-time multiplayer communication including room management, player synchronization, game state updates, and vote collection. This migration replaces that entire system with Firebase Firestore's real-time capabilities.

Key Changes

🔥 Complete Socket.IO Removal

  • Removed all socket.io-client imports and connections
  • Eliminated 20+ Socket.IO event handlers (socket.on() listeners)
  • Replaced all Socket.IO emissions (socket.emit()) with Firestore operations

🗄️ Firebase Firestore Integration

  • Added comprehensive Firebase imports and initialization
  • Implemented real-time listeners using onSnapshot()
  • Created structured Firestore data model for multiplayer games

🏠 Room Management System

  • Room Creation: Generates unique 4-letter room codes and creates Firestore documents
  • Room Joining: Players can join existing rooms by code
  • Host Management: Automatic host selection and migration support
  • Player Sync: Real-time player list updates across all clients

🎮 Game State Management

  • Phase Coordination: Manages game phases (lobby → presenting → voting → results → game over)
  • Deck Selection: Host chooses card decks, synced to all players
  • Card Dealing: Distributes cards and manages rounds
  • Timer Sync: Presentation timer coordination across all clients

🗳️ Real-time Voting System

  • Vote Collection: Individual votes stored as Firestore documents
  • Live Processing: Automatic score calculation via snapshot listeners
  • Result Display: Real-time vote tallying and leaderboard updates

Firestore Data Structure

rooms/{roomCode}/
  ├── host: string (playerID)
  ├── createdAt: timestamp
  ├── gameType: "wrongest"
  ├── gameState/current: {
  │     phase: "lobby" | "presenting" | "voting" | "results" | "game-over"
  │     started: boolean
  │     currentRound: number
  │     activePlayerIndex: number
  │     cardsPresented: array
  │     votesSubmitted: number
  │   }
  ├── players/{playerID}: {
  │     name: string
  │     isHost: boolean
  │     card: string
  │     score: number
  │     lastSeen: timestamp
  │   }
  └── votes/{voteID}: {
        votingPlayerName: string
        upVoteIndex: number
        downVoteIndex: number
        timestamp: timestamp
      }

Socket.IO to Firebase Migration

Original Socket Event Firebase Replacement
socket.emit("createRoom") setDoc(rooms/{roomCode})
socket.emit("joinRoom") Subscribe to rooms/{roomCode}/players
socket.emit("startTheGame") updateDoc(gameState/current)
socket.emit("wrongestSubmitVotes") addDoc(rooms/{roomCode}/votes)
socket.on("receivePlayerList") onSnapshot(players collection)
socket.on("wrongestStartVoting") onSnapshot(gameState changes)

Testing Results

Build Status: All TypeScript/Vue compilation successful
Room Creation: Generates unique codes and updates UI correctly
Firebase Integration: Properly configured and functional

UI Screenshots

Before Room Creation: Main Screen

After Room Creation (Working): Room Created

Benefits

  1. Infrastructure Simplification: Eliminates need for custom Socket.IO server
  2. Automatic Scaling: Firebase handles real-time synchronization and scaling
  3. Improved Reliability: Managed database service with built-in redundancy
  4. Cost Efficiency: Pay-per-use model instead of maintaining dedicated servers
  5. Modern Architecture: Uses contemporary Firebase/Firestore patterns

Preserved Functionality

All existing game features remain intact:

  • Room creation and joining with codes
  • Real-time player list updates
  • Deck selection and card dealing
  • Presentation phase with timer
  • Voting and scoring system
  • Round progression and game completion

The game plays identically to the Socket.IO version while using Firebase's managed infrastructure.

Fixes #4.


💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.

Copilot avatar Jul 31 '25 18:07 Copilot