diff --git a/PLAN.md b/PLAN.md
index fe8ba33..48fc7b1 100644
--- a/PLAN.md
+++ b/PLAN.md
@@ -1,184 +1,121 @@
-# Tetris Battle Royale - Implementation Plan
+# Single Global Lobby - Implementation Plan
## Context
-Build a multiplayer Tetris Battle Royale game where 2-8 players compete. When a player clears rows, those rows are garbage-dumped onto random opponents' boards. Players see all other boards in real-time. Uses WebSocket for multiplayer and classic retro aesthetics.
-
-## Architecture
-
-### Tech Stack
-- **Frontend**: HTML5 Canvas, CSS3, Vanilla JavaScript
-- **Backend**: Node.js + Socket.io for real-time WebSocket communication
-- **No frameworks** - pure vanilla implementation
-
-### File Structure
-```
-tetris-battle-royale/
-├── server/
-│ ├── index.js # Socket.io server, game state management
-│ └── package.json
-├── public/
-│ ├── index.html # Game UI with player grids
-│ ├── css/
-│ │ └── style.css # Retro pixel-art styling
-│ └── js/
-│ ├── game.js # Core Tetris logic
-│ ├── renderer.js # Canvas rendering
-│ ├── network.js # Socket.io client
-│ ├── ui.js # HUD and game messages
-│ └── app.js # Main application
-└── README.md
-```
+Changed from room-based architecture to a single global lobby where:
+- No room name input needed
+- All players join the same lobby
+- Player list shows everyone in the lobby
+- Game starts when all players are ready (minimum 2 players)
---
-## Phase 1: Server Setup & Multiplayer Infrastructure [DONE]
+## Phase 1: Server - Replace Rooms with Single Lobby [DONE]
-**Goal**: Get a working Node.js server with Socket.io that handles rooms and player connections.
+**Goal**: Remove room-based architecture and use a single global lobby.
### Todos
-- [x] Initialize Node.js project with `package.json`
-- [x] Install dependencies: `express`, `socket.io`, `uuid`
-- [x] Create basic Express server serving static files from `public/`
-- [x] Implement Socket.io room system:
- - `join-room` event - player joins with username
- - `leave-room` event - player leaves
- - Broadcast `player-joined` / `player-left` to room
-- [x] Track players in room with IDs, names, ready status
-- [x] Create simple HTML page to test connection
+- [x] Replace `rooms` Map with single `lobby` object
+- [x] Change `join-room` event to `join-lobby`
+ - Remove roomName parameter
+ - Only accept playerName
+ - Add player to global lobby
+- [x] Update `ready` event
+ - Check if all players in global lobby are ready
+ - Start game when all ready (min 2 players, max 8)
+- [x] Update disconnect handling
+ - Remove from global lobby
+ - Handle game-in-progress disconnections
+- [x] Update all broadcast functions
+ - Remove room name parameter
+ - Broadcast to all connected clients (io.emit instead of io.to(roomName).emit)
-**Success criteria**: Can open 2+ browser tabs, join same room, see player list update.
+**Files modified**: `server/index.js`
+
+**Success criteria**: Server uses single lobby, no room names needed.
---
-## Phase 2: Core Tetris Game Logic [DONE]
+## Phase 2: Frontend HTML - Remove Room Name Input [DONE]
-**Goal**: Implement single-player Tetris mechanics on the client side.
+**Goal**: Simplify the login screen to only require player name.
### Todos
-- [x] Create `public/js/game.js` with:
- - 10x20 grid data structure
- - Tetromino definitions (I, O, T, S, Z, J, L shapes and colors)
- - Piece spawning at top center
- - Movement: left, right, soft drop
- - Rotation with wall kick (basic SRS)
- - Hard drop (instant place)
- - Row clearing detection
- - Game over detection (piece collides at spawn)
-- [x] Create `public/js/renderer.js` with:
- - Canvas setup per player board
- - Draw grid, active piece, locked pieces
- - Classic Tetris colors for each piece type
-- [x] Wire keyboard controls (arrow keys + space for hard drop)
-- [x] Game loop with adjustable speed (starts slow, speeds up with lines)
+- [x] Remove "Room Name" input field from login screen
+- [x] Remove room name label
+- [x] Change button text from "JOIN ROOM" to "JOIN LOBBY"
+- [x] Update lobby screen header
+ - Remove room name display
+ - Show "Global Lobby" instead
-**Success criteria**: Single-player Tetris works smoothly with all piece types and controls.
+**Files modified**: `public/index.html`
+
+**Success criteria**: Login screen only asks for player name.
---
-## Phase 3: Multiplayer Game State Sync [DONE]
+## Phase 3: Network Module - Update Lobby Methods [DONE]
-**Goal**: Connect multiple players and sync game state in real-time.
+**Goal**: Update client-side network methods for single lobby architecture.
### Todos
-- [x] Server: Add game state tracking per room
- - Active pieces, board states, scores
- - Game running/paused/over status
-- [x] Client `public/js/network.js`:
- - Send player actions to server (`move-piece`, `rotate`, `drop`)
- - Receive state updates and apply locally
-- [x] Server: Broadcast state at ~20fps to all room players
-- [x] Server: Handle `start-game` when 2+ players ready
-- [x] Client: Use networked state
-- [x] Sync piece positions, board state, scores across all players
+- [x] Rename `joinRoom` to `joinLobby`
+ - Remove roomName parameter
+ - Emit `join-lobby` event with just playerName
+- [x] Rename `leaveRoom` to `leaveLobby`
+ - Remove room name handling
+- [x] Remove `currentRoom` property (no longer needed)
+- [x] Update all event listeners to work without room names
-**Success criteria**: 2+ players can play simultaneously, all see each other's boards and piece movements in real-time.
+**Files modified**: `public/js/network.js`
+
+**Success criteria**: Network module works with single lobby.
---
-## Phase 4: Garbage Battle System [DONE]
+## Phase 4: UI Module - Simplify Join Flow [DONE]
-**Goal**: Implement the battle royale mechanic - clearing rows sends garbage to opponents.
+**Goal**: Update UI handling for simplified lobby flow.
### Todos
-- [x] Server: Track lines cleared per player
-- [x] Implement garbage row calculation:
- - 1 line → 0 garbage rows
- - 2 lines → 1 garbage row to random opponent
- - 3 lines → 2 garbage rows to random opponent(s)
- - 4 lines (Tetris) → 4 garbage rows
-- [x] Garbage row representation (filled row with 1 random gap)
-- [x] Server: Pick random target(s) when garbage sent
-- [x] Client: Receive garbage, shift board up, add garbage at bottom
-- [x] Visual: Garbage rows have distinct color (gray/black)
-- [x] Elimination: Player loses when garbage reaches top
+- [x] Update `handleJoin` method
+ - Remove roomName input validation
+ - Only validate playerName
+ - Call `network.joinLobby(playerName)`
+- [x] Update lobby display
+ - Show "Global Lobby" instead of room name
+ - Update player list display
+- [x] Update game over "Back to Lobby" flow
-**Success criteria**: Clearing rows visibly adds garbage rows to opponent boards.
+**Files modified**: `public/js/ui.js`
+
+**Success criteria**: UI works with single lobby flow.
---
-## Phase 5: Retro UI Polish [IN PROGRESS]
+## Phase 5: App Module - Update Event Handling [DONE]
-**Goal**: Classic Tetris aesthetic with multi-board layout.
+**Goal**: Update main application to work with global lobby events.
### Todos
-- [x] `public/css/style.css`:
- - Import Press Start 2P font from Google Fonts
- - CSS Grid layout for player boards (adaptive 2x2 or 2x4)
- - Retro color scheme (dark background, bright pieces)
- - CRT scanline overlay effect
- - Pixelated canvas rendering (`image-rendering: pixelated`)
-- [x] `public/js/ui.js`:
- - Player info HUD (name, score, lines)
- - Player list sidebar with status (playing/eliminated)
- - Room join screen with username input
- - "Ready" button and countdown before game start
- - Game over screen with winner announcement
- - Next piece preview panel
-- [ ] Visual effects:
- - [x] Row clear flash animation
- - [x] Garbage receiving shake effect
- - [ ] Player color indicators per board
+- [x] Update network listener setup
+ - Adapt to new event structure (no room names)
+- [x] Update game start handling
+ - Works with global lobby players
+- [x] Update state sync for single lobby
-**Success criteria**: Game looks like classic Tetris with all boards visible and polished UI.
+**Files modified**: `public/js/app.js`
+
+**Success criteria**: Game syncs properly with single lobby.
---
-## Phase 6: Polish & Edge Cases [PENDING]
-
-**Goal**: Handle real-world scenarios and add final touches.
-
-### Todos
-- [x] Player disconnect handling:
- - Remove from room, update player list
- - Continue game with remaining players or end if <2
-- [ ] Rejoin support (optional): Allow disconnected player to rejoin
-- [x] Score tracking and leaderboard
-- [x] Level system: Speed increases every 10 lines
-- [ ] Combo system: Bonus for consecutive clears
-- [ ] Sound effects (optional): Clear, garbage receive, game over
-- [ ] Settings menu: Speed, sound toggle, controls
-- [ ] README with setup instructions
-
-**Success criteria**: Game handles disconnections gracefully, full feature set working.
-
----
-
-## Dependencies
-```json
-{
- "dependencies": {
- "express": "^4.18.2",
- "socket.io": "^4.7.2",
- "uuid": "^9.0.0"
- }
-}
-```
-
## Verification
-1. `npm install` then `node server/index.js`
-2. Open `http://localhost:3000` in 2-8 tabs
-3. Join same room, click Ready, verify countdown
-4. Play and verify garbage rows appear on opponents
-5. Test disconnects, game over, winner announcement
+1. Start server: `cd server && node index.js`
+2. Open `http://localhost:3000` in 2+ browser tabs
+3. Enter only your name (no room name field exists)
+4. Click "JOIN LOBBY"
+5. All players should see each other in the same "Global Lobby"
+6. All players click READY
+7. Game starts automatically when all players are ready (minimum 2)
diff --git a/public/index.html b/public/index.html
index d81cf89..a391e09 100644
--- a/public/index.html
+++ b/public/index.html
@@ -11,23 +11,19 @@