# kmanojkamath/eka_multiplayer_app architecture

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

- Interactive diagram: https://gitdiagram.com/kmanojkamath/eka_multiplayer_app
- Repository: https://github.com/kmanojkamath/eka_multiplayer_app

## Overview

eka is a Flutter multiplayer UNO-style game. Players sign in, create or join a room, wait for the host to start, then take synchronized turns until a player wins and sees the result screen. The README documents host/player game logic, Firestore room synchronization, action-card rules, wild-color selection, animated play, and custom-drawn cards. Dart implementation files were not excerpted, so edges reflect documented workflow and capabilities rather than verified call sites.

Main entry points: [`lib/game/host_logic/host_game_play.dart`](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/host_logic/host_game_play.dart) (Host rules), [`lib/screens/home_screen/login_screen.dart`](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/login_screen.dart) (Sign-in flow), [`lib/screens/home_screen/home_screen.dart`](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/home_screen.dart) (Home screen), [`lib/screens/game_sequence_screens/game_initialiser.dart`](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/game_initialiser.dart) (Match setup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity_lobby["Identity and lobby"]
  node_auth_ui["Sign-in flow<br/>[login_screen.dart]"]
  node_auth_gate["Auth routing<br/>[auth_wrapper.dart]"]
  node_home["Home screen<br/>[home_screen.dart]"]
  node_create_room["Create room"]
  node_join_room["Join room"]
end

subgraph group_matchplay["Matchplay logic"]
  node_initializer["Match setup"]
  node_host_logic["Host rules"]
  node_player_logic["Player turn logic"]
  node_game_models["Card and move models<br/>[card_logic.dart]"]
  node_game_logs["Turn logs<br/>[game_log.dart]"]
end

subgraph group_game_ui["Game presentation"]
  node_game_screen["Game screen<br/>[game_screen.dart]"]
  node_result["Result screen<br/>[result_screen.dart]"]
  node_card_layers["Card layers"]
  node_card_widgets["Card rendering<br/>[card_widget.dart]"]
  node_card_animation["Card animation"]
end

subgraph group_services["External services"]
  node_firebase_auth["Firebase Auth"]
  node_firestore[("Cloud Firestore")]
  node_google_signin["Google Sign-In"]
end

node_player(("Player"))

node_player -->|"signs in"| node_auth_ui
node_auth_ui -->|"authenticates with"| node_firebase_auth
node_auth_ui -->|"offers Google sign-in"| node_google_signin
node_auth_ui -.->|"continues through"| node_auth_gate
node_auth_gate -.->|"routes to"| node_home
node_player -->|"chooses room flow"| node_home
node_home -->|"creates room"| node_create_room
node_home -->|"joins room"| node_join_room
node_create_room -->|"synchronizes room"| node_firestore
node_join_room -->|"synchronizes room"| node_firestore
node_create_room -.->|"starts match flow"| node_initializer
node_join_room -.->|"enters match flow"| node_initializer
node_initializer -.->|"sets up turns"| node_host_logic
node_initializer -->|"synchronizes match"| node_firestore
node_host_logic -->|"enforces card rules"| node_game_models
node_player_logic -->|"processes turns"| node_game_models
node_host_logic -->|"tracks turns"| node_game_logs
node_player_logic -->|"processes persisted logs"| node_game_logs
node_game_logs -->|"persists room state"| node_firestore
node_game_screen -.->|"presents turn play"| node_player_logic
node_game_screen -.->|"presents host play"| node_host_logic
node_game_screen -.->|"shows player hand"| node_card_layers
node_card_layers -.->|"renders cards"| node_card_widgets
node_card_layers -->|"animates card play"| node_card_animation
node_host_logic -->|"reports win"| node_result

click node_auth_ui "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/login_screen.dart"
click node_auth_gate "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/auth_wrapper.dart"
click node_home "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/home_screen.dart"
click node_create_room "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/create_room_screen.dart"
click node_join_room "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/join_room_screen.dart"
click node_initializer "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/game_initialiser.dart"
click node_host_logic "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/host_logic/host_game_play.dart"
click node_player_logic "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/player_logic/player_game_play.dart"
click node_game_models "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/models/card_logic.dart"
click node_game_logs "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/models/game_log.dart"
click node_game_screen "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/game_screen.dart"
click node_result "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/result_screen.dart"
click node_card_layers "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/layers/cards_layers/player_cards_layer.dart"
click node_card_widgets "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/widgets/card/card-ui/card_widget.dart"
click node_card_animation "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/animations/card_animations/card_animations.dart"
click node_google_signin "https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/google_sign_in.dart"

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_auth_ui,node_auth_gate,node_home,node_create_room,node_join_room toneBlue
class node_initializer,node_host_logic,node_player_logic,node_game_models,node_game_logs toneAmber
class node_game_screen,node_result,node_card_layers,node_card_widgets,node_card_animation toneMint
class node_firebase_auth,node_firestore,node_google_signin toneRose
class node_player toneIndigo
```

## Components

### Identity and lobby

- [Sign-in flow](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/login_screen.dart): `lib/screens/home_screen/login_screen.dart`
- [Auth routing](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/auth_wrapper.dart): `lib/screens/home_screen/auth_wrapper.dart`
- [Home screen](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/home_screen/home_screen.dart): `lib/screens/home_screen/home_screen.dart`
- [Create room](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/create_room_screen.dart): `lib/screens/game_sequence_screens/create_room_screen.dart`
- [Join room](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/join_room_screen.dart): `lib/screens/game_sequence_screens/join_room_screen.dart`

### Matchplay logic

- [Match setup](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/game_initialiser.dart): `lib/screens/game_sequence_screens/game_initialiser.dart`
- [Host rules](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/host_logic/host_game_play.dart): `lib/game/host_logic/host_game_play.dart`
- [Player turn logic](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/player_logic/player_game_play.dart): `lib/game/player_logic/player_game_play.dart`
- [Card and move models](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/models/card_logic.dart): `lib/game/models/card_logic.dart`
- [Turn logs](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/game/models/game_log.dart): `lib/game/models/game_log.dart`

### Game presentation

- [Game screen](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/game_screen.dart): `lib/screens/game_sequence_screens/game_screen.dart`
- [Result screen](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/screens/game_sequence_screens/result_screen.dart): `lib/screens/game_sequence_screens/result_screen.dart`
- [Card layers](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/layers/cards_layers/player_cards_layer.dart): `lib/layers/cards_layers/player_cards_layer.dart`
- [Card rendering](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/widgets/card/card-ui/card_widget.dart): `lib/widgets/card/card-ui/card_widget.dart`
- [Card animation](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/animations/card_animations/card_animations.dart): `lib/animations/card_animations/card_animations.dart`

### External services

- **Firebase Auth**
- **Cloud Firestore**
- [Google Sign-In](https://github.com/kmanojkamath/eka_multiplayer_app/blob/main/lib/google_sign_in.dart): `lib/google_sign_in.dart`

### Other components

- **Player**

## Connections

- Player → Sign-in flow: signs in (evidence: `README.md`)
- Sign-in flow → Firebase Auth: authenticates with (evidence: `README.md`)
- Sign-in flow → Google Sign-In: offers Google sign-in (evidence: `README.md`)
- Sign-in flow → Auth routing: continues through
- Auth routing → Home screen: routes to
- Player → Home screen: chooses room flow (evidence: `README.md`)
- Home screen → Create room: creates room (evidence: `README.md`)
- Home screen → Join room: joins room (evidence: `README.md`)
- Create room → Cloud Firestore: synchronizes room (evidence: `README.md`)
- Join room → Cloud Firestore: synchronizes room (evidence: `README.md`)
- Create room → Match setup: starts match flow
- Join room → Match setup: enters match flow
- Match setup → Host rules: sets up turns
- Match setup → Cloud Firestore: synchronizes match (evidence: `README.md`)
- Host rules → Card and move models: enforces card rules (evidence: `README.md`)
- Player turn logic → Card and move models: processes turns (evidence: `README.md`)
- Host rules → Turn logs: tracks turns (evidence: `README.md`)
- Player turn logic → Turn logs: processes persisted logs (evidence: `README.md`)
- Turn logs → Cloud Firestore: persists room state (evidence: `README.md`)
- Game screen → Player turn logic: presents turn play
- Game screen → Host rules: presents host play
- Game screen → Card layers: shows player hand
- Card layers → Card rendering: renders cards
- Card layers → Card animation: animates card play (evidence: `README.md`)
- Host rules → Result screen: reports win (evidence: `README.md`)
