# dziarnowskij/individualproject architecture

> Architecture diagram of the GitHub repository dziarnowskij/individualproject, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/dziarnowskij/individualproject
- Repository: https://github.com/dziarnowskij/individualproject
- Video tour (about a minute): https://gitdiagram.com/dziarnowskij/individualproject/video

## Overview

This is a browser-based, two-player card game inspired by Schotten Totten, with Phaser scenes on the client and Socket.IO room/game coordination on the server. Players choose or join a room, receive cards, place cards into zones, and the server evaluates formations and broadcasts turns, dealt cards, and marker outcomes. The graph includes formation evaluation and the client’s UI and interaction layers. Server and client excerpts are partial, so uncertain internal wiring is omitted.

Main entry points: [`client/src/helpers/SocketHandler.js`](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/SocketHandler.js) (Socket handler), [`client/src/index.js`](https://github.com/dziarnowskij/individualproject/blob/main/client/src/index.js) (Phaser entry), [`client/src/scenes/game.js`](https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/game.js) (Game scene), [`server/server.js`](https://github.com/dziarnowskij/individualproject/blob/main/server/server.js) (Socket server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client game"]
  node_entry["Phaser entry<br/>[index.js]"]
  node_intro["Room selection<br/>[intro.js]"]
  node_game["Game scene<br/>[game.js]"]
  node_gameover["Game over scene<br/>[gameOver.js]"]
  node_roomerror["Room error scene<br/>[roomError.js]"]
  node_interactivity["Card interaction"]
  node_ui["Game UI<br/>[UIHandler.js]"]
  node_zones["Client drop zones<br/>[ZoneHandler.js]"]
  node_deck["Deck handling<br/>[DeckHandler.js]"]
  node_cards["Card rendering<br/>[Card.js]"]
  node_socket["Socket handler<br/>[SocketHandler.js]"]
  node_assets["Card assets"]
end

subgraph group_server["Server game"]
  node_server["Socket server<br/>[server.js]"]
  node_room["Room state<br/>[Room.js]"]
end

subgraph group_domain["Game rules"]
  node_dropzone["Zone evaluation<br/>[DropZoneHandler.js]"]
  node_formation["Formation rules"]
end

node_player(("Player"))

node_player -->|"chooses room"| node_intro
node_entry -->|"registers scene"| node_intro
node_entry -->|"registers scene"| node_game
node_entry -->|"registers scene"| node_gameover
node_entry -->|"registers scene"| node_roomerror
node_intro -->|"starts with room"| node_game
node_game -->|"sets up connection"| node_socket
node_game -->|"builds interface"| node_ui
node_ui -->|"renders zones"| node_zones
node_player -->|"plays cards"| node_interactivity
node_interactivity -->|"emits game events"| node_socket
node_socket -->|"sends events"| node_server
node_server -->|"broadcasts updates"| node_socket
node_server -->|"creates and queries"| node_room
node_room -->|"returns zone claims"| node_server
node_dropzone -->|"evaluates formations"| node_formation
node_deck -->|"creates cards"| node_cards
node_cards -->|"uses artwork"| node_assets
node_socket -->|"deals card updates"| node_deck
node_socket -->|"signals game outcome"| node_gameover
node_socket -->|"signals room error"| node_roomerror

click node_entry "https://github.com/dziarnowskij/individualproject/blob/main/client/src/index.js"
click node_intro "https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/intro.js"
click node_game "https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/game.js"
click node_gameover "https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/gameOver.js"
click node_roomerror "https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/roomError.js"
click node_interactivity "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/InteractivityHandler.js"
click node_ui "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/UIHandler.js"
click node_zones "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/ZoneHandler.js"
click node_deck "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/DeckHandler.js"
click node_cards "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/cards/Card.js"
click node_socket "https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/SocketHandler.js"
click node_server "https://github.com/dziarnowskij/individualproject/blob/main/server/server.js"
click node_room "https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/Room.js"
click node_dropzone "https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/DropZoneHandler.js"
click node_formation "https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/FormationHandler.js"
click node_assets "https://github.com/dziarnowskij/individualproject/tree/main/client/src/assets/cardDeck"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_entry,node_intro,node_game,node_gameover,node_roomerror,node_interactivity,node_ui,node_zones,node_deck,node_cards,node_socket,node_assets toneBlue
class node_server,node_room toneAmber
class node_dropzone,node_formation toneMint
class node_player toneIndigo
```

## Components

### Client game

- [Phaser entry](https://github.com/dziarnowskij/individualproject/blob/main/client/src/index.js): `client/src/index.js`
- [Room selection](https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/intro.js): `client/src/scenes/intro.js`
- [Game scene](https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/game.js): `client/src/scenes/game.js`
- [Game over scene](https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/gameOver.js): `client/src/scenes/gameOver.js`
- [Room error scene](https://github.com/dziarnowskij/individualproject/blob/main/client/src/scenes/roomError.js): `client/src/scenes/roomError.js`
- [Card interaction](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/InteractivityHandler.js): `client/src/helpers/InteractivityHandler.js`
- [Game UI](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/UIHandler.js): `client/src/helpers/UIHandler.js`
- [Client drop zones](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/ZoneHandler.js): `client/src/helpers/ZoneHandler.js`
- [Deck handling](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/DeckHandler.js): `client/src/helpers/DeckHandler.js`
- [Card rendering](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/cards/Card.js): `client/src/helpers/cards/Card.js`
- [Socket handler](https://github.com/dziarnowskij/individualproject/blob/main/client/src/helpers/SocketHandler.js): `client/src/helpers/SocketHandler.js`
- [Card assets](https://github.com/dziarnowskij/individualproject/tree/main/client/src/assets/cardDeck): `client/src/assets/cardDeck`

### Server game

- [Socket server](https://github.com/dziarnowskij/individualproject/blob/main/server/server.js): `server/server.js`
- [Room state](https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/Room.js): `server/helpers/Room.js`

### Game rules

- [Zone evaluation](https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/DropZoneHandler.js): `server/helpers/DropZoneHandler.js`
- [Formation rules](https://github.com/dziarnowskij/individualproject/blob/main/server/helpers/FormationHandler.js): `server/helpers/FormationHandler.js`

### Other components

- **Player**

## Connections

- Player → Room selection: chooses room
- Phaser entry → Room selection: registers scene
- Phaser entry → Game scene: registers scene
- Phaser entry → Game over scene: registers scene
- Phaser entry → Room error scene: registers scene
- Room selection → Game scene: starts with room
- Game scene → Socket handler: sets up connection
- Game scene → Game UI: builds interface
- Game UI → Client drop zones: renders zones
- Player → Card interaction: plays cards
- Card interaction → Socket handler: emits game events
- Socket handler → Socket server: sends events
- Socket server → Socket handler: broadcasts updates
- Socket server → Room state: creates and queries
- Room state → Socket server: returns zone claims
- Zone evaluation → Formation rules: evaluates formations
- Deck handling → Card rendering: creates cards
- Card rendering → Card assets: uses artwork
- Socket handler → Deck handling: deals card updates
- Socket handler → Game over scene: signals game outcome
- Socket handler → Room error scene: signals room error
