# subasad/dahalmahra architecture

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

- Interactive diagram: https://gitdiagram.com/subasad/dahalmahra
- Repository: https://github.com/subasad/dahalmahra

## Overview

Dahalmahra is a browser-based, real-time four-player card game. Players create or join a room, fill its lobby, choose a master suit, play legal cards through 13 tricks, and receive trick/round results before the next round. The server coordinates Socket.IO events and room state; Game.ts implements dealing, turn validation, trick resolution, scoring, Kot, and dealer rotation. The README also documents the responsive game UI and team play. Client/server source is partial, so edges reflect only visible event flows or README claims.

Main entry points: [`src/server.ts`](https://github.com/subasad/dahalmahra/blob/main/src/server.ts) (Room server), [`public/client.js`](https://github.com/subasad/dahalmahra/blob/main/public/client.js) (Game client), [`src/Game.ts`](https://github.com/subasad/dahalmahra/blob/main/src/Game.ts) (Game engine), [`public/index.html`](https://github.com/subasad/dahalmahra/blob/main/public/index.html) (Game interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Browser game"]
  node_client_ui["Game client<br/>[client.js]"]
end

subgraph group_server["Realtime service"]
  node_server["Room server<br/>[server.ts]"]
  node_game_state[("Room and round state<br/>[server.ts]")]
end

subgraph group_rules["Game rules and state"]
  node_game_logic["Game engine<br/>[Game.ts]"]
  node_game_types["Game state types<br/>[types.ts]"]
end

subgraph group_assets["Game presentation"]
  node_game_page["Game interface<br/>[index.html]"]
  node_game_styles["Responsive styling<br/>[style.css]"]
  node_card_assets["Card artwork"]
end

node_player(("Player"))

node_player -->|"plays through"| node_client_ui
node_client_ui -->|"sends game events"| node_server
node_server -->|"sends game updates"| node_client_ui
node_server -->|"stores room state"| node_game_state
node_server -->|"calls game rules"| node_game_logic
node_game_logic -->|"uses state types"| node_game_types
node_server -->|"uses player types"| node_game_types
node_client_ui -.->|"updates interface"| node_game_page
node_client_ui -->|"renders card art"| node_card_assets
node_game_page -.->|"uses styles"| node_game_styles

click node_client_ui "https://github.com/subasad/dahalmahra/blob/main/public/client.js"
click node_server "https://github.com/subasad/dahalmahra/blob/main/src/server.ts"
click node_game_logic "https://github.com/subasad/dahalmahra/blob/main/src/Game.ts"
click node_game_types "https://github.com/subasad/dahalmahra/blob/main/src/types.ts"
click node_game_state "https://github.com/subasad/dahalmahra/blob/main/src/server.ts"
click node_game_page "https://github.com/subasad/dahalmahra/blob/main/public/index.html"
click node_game_styles "https://github.com/subasad/dahalmahra/blob/main/public/style.css"
click node_card_assets "https://github.com/subasad/dahalmahra/tree/main/public/images/cards"

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_client_ui toneBlue
class node_server,node_game_state toneAmber
class node_game_logic,node_game_types toneMint
class node_game_page,node_game_styles,node_card_assets toneRose
class node_player toneIndigo
```

## Components

### Browser game

- [Game client](https://github.com/subasad/dahalmahra/blob/main/public/client.js): `public/client.js`

### Realtime service

- [Room server](https://github.com/subasad/dahalmahra/blob/main/src/server.ts): `src/server.ts`
- [Room and round state](https://github.com/subasad/dahalmahra/blob/main/src/server.ts): `src/server.ts`

### Game rules and state

- [Game engine](https://github.com/subasad/dahalmahra/blob/main/src/Game.ts): `src/Game.ts`
- [Game state types](https://github.com/subasad/dahalmahra/blob/main/src/types.ts): `src/types.ts`

### Game presentation

- [Game interface](https://github.com/subasad/dahalmahra/blob/main/public/index.html): `public/index.html`
- [Responsive styling](https://github.com/subasad/dahalmahra/blob/main/public/style.css): `public/style.css`
- [Card artwork](https://github.com/subasad/dahalmahra/tree/main/public/images/cards): `public/images/cards`

### Other components

- **Player**

## Connections

- Player → Game client: plays through (evidence: `README.md`)
- Game client → Room server: sends game events (evidence: `public/client.js`)
- Room server → Game client: sends game updates (evidence: `src/server.ts`)
- Room server → Room and round state: stores room state (evidence: `src/server.ts`)
- Room server → Game engine: calls game rules (evidence: `src/server.ts`)
- Game engine → Game state types: uses state types (evidence: `src/Game.ts`)
- Room server → Game state types: uses player types (evidence: `src/server.ts`)
- Game client → Game interface: updates interface
- Game client → Card artwork: renders card art (evidence: `public/client.js`)
- Game interface → Responsive styling: uses styles
