# peter-mghendi/karata architecture

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

- Interactive diagram: https://gitdiagram.com/peter-mghendi/karata
- Repository: https://github.com/peter-mghendi/karata

## Overview

Karata is a real-time Kenyan card-game product, with browser and experimental desktop clients, plus separate trivia, bot, platform, and link-shortening services. The main workflow is a player using the web client and SDK to reach the Cards server for room and turn gameplay; the server registers the game engine and SignalR hubs. The README documents chat, replays, reconnection, resumable games, and learner mode. Only selected source was sampled, so uncertain internal service-to-handler and persistence wiring is omitted.

Main entry points: [`src/Karata.Cards/Program.cs`](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Program.cs) (Cards server), [`src/Karata.Web/Program.cs`](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Web/Program.cs) (Web client), [`src/Karata.Trivia/Program.cs`](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Program.cs) (Trivia service), [`src/Karata.Runtime/DependencyInjection.cs`](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Runtime/DependencyInjection.cs) (Runtime framework)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_clients["Clients and SDK"]
  node_web["Web client<br/>[Program.cs]"]
  node_desktop["Desktop client<br/>[Program.cs]"]
  node_kitcards["Cards SDK<br/>[Client.cs]"]
  node_surface["Surface UI kit"]
end

subgraph group_cards["Cards gameplay"]
  node_cardsapp["Cards server<br/>[Program.cs]"]
  node_cardsapi["Cards endpoints<br/>[Endpoints.cs]"]
  node_cardshubs["Live game hubs<br/>[PlayerHub.cs]"]
  node_roomturn["Room and turn services"]
  node_replay["Replay services"]
  node_engine["Rules engine"]
  node_pips["Card primitives<br/>[Deck.cs]"]
  node_cardsdb[("Cards database<br/>[CardsContext.cs]")]
  node_bot["Bot sessions"]
  node_botstrategy["Bot strategies<br/>[IBotStrategy.cs]"]
end

subgraph group_shared["Shared services"]
  node_platform["User and activity<br/>[Program.cs]"]
  node_platformdb[("Platform database<br/>[PlatformContext.cs]")]
end

subgraph group_other["Other products"]
  node_trivia["Trivia service<br/>[Program.cs]"]
  node_triviagame["Trivia gameplay"]
  node_trivianotify["Trivia notifications<br/>[NotificationHub.cs]"]
  node_go["Link shortener<br/>[Program.cs]"]
  node_godb[("Links database<br/>[GoContext.cs]")]
end

subgraph group_runtime["Runtime foundation"]
  node_runtime["Runtime framework"]
end

node_player(("Player"))

node_player -->|"uses"| node_web
node_web -->|"configures"| node_kitcards
node_web -->|"configures"| node_surface
node_web -->|"configures client"| node_platform
node_web -->|"configures client"| node_trivia
node_web -->|"configures interface"| node_bot
node_desktop -->|"configures"| node_kitcards
node_desktop -->|"configures"| node_surface
node_cardsapp -->|"maps"| node_cardsapi
node_cardsapp -->|"maps"| node_cardshubs
node_cardsapp -->|"registers"| node_engine
node_cardsapp -->|"configures"| node_runtime
node_cardsapp -->|"initializes"| node_cardsdb
node_roomturn -.->|"evaluates turns"| node_engine
node_cardsapp -->|"registers processor"| node_replay
node_bot -->|"runs"| node_botstrategy
node_trivia -->|"maps controllers"| node_triviagame
node_trivia -->|"maps hub"| node_trivianotify
node_trivia -->|"configures"| node_runtime
node_go -->|"configures"| node_runtime
node_go -->|"initializes"| node_godb
node_platform -->|"configures"| node_runtime
node_platform -->|"initializes"| node_platformdb

click node_web "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Web/Program.cs"
click node_desktop "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Desktop/Program.cs"
click node_kitcards "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Cards/Client.cs"
click node_surface "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Surface/DependencyInjection.cs"
click node_cardsapp "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Program.cs"
click node_cardsapi "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Endpoints.cs"
click node_cardshubs "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Hubs/PlayerHub.cs"
click node_roomturn "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Services/TurnProcessingServiceFactory.cs"
click node_replay "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Services/ReplaySessionRunner.cs"
click node_engine "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Cards/Engine/TwoPassKarataEngine.cs"
click node_pips "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Pips/Deck.cs"
click node_cardsdb "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Data/CardsContext.cs"
click node_runtime "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Runtime/DependencyInjection.cs"
click node_bot "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Runtime/Bot/Services/BotSessionManager.cs"
click node_botstrategy "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Bot/Strategy/IBotStrategy.cs"
click node_platform "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Platform/Program.cs"
click node_platformdb "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Platform/Data/PlatformContext.cs"
click node_trivia "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Program.cs"
click node_triviagame "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Controllers/ResponseController.cs"
click node_trivianotify "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Hubs/NotificationHub.cs"
click node_go "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Go/Program.cs"
click node_godb "https://github.com/peter-mghendi/karata/blob/main/src/Karata.Go/Data/GoContext.cs"

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_web,node_desktop,node_kitcards,node_surface toneBlue
class node_cardsapp,node_cardsapi,node_cardshubs,node_roomturn,node_replay,node_engine,node_pips,node_cardsdb,node_bot,node_botstrategy toneAmber
class node_platform,node_platformdb toneMint
class node_trivia,node_triviagame,node_trivianotify,node_go,node_godb toneRose
class node_runtime,node_player toneIndigo
```

## Components

### Clients and SDK

- [Web client](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Web/Program.cs): `src/Karata.Web/Program.cs`
- [Desktop client](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Desktop/Program.cs): `src/Karata.Desktop/Program.cs`
- [Cards SDK](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Cards/Client.cs): `src/Karata.Kit/Cards/Client.cs`
- [Surface UI kit](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Surface/DependencyInjection.cs): `src/Karata.Surface/DependencyInjection.cs`

### Cards gameplay

- [Cards server](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Program.cs): `src/Karata.Cards/Program.cs`
- [Cards endpoints](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Endpoints.cs): `src/Karata.Cards/Endpoints.cs`
- [Live game hubs](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Hubs/PlayerHub.cs): `src/Karata.Cards/Hubs/PlayerHub.cs`
- [Room and turn services](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Services/TurnProcessingServiceFactory.cs): `src/Karata.Cards/Services/TurnProcessingServiceFactory.cs`
- [Replay services](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Services/ReplaySessionRunner.cs): `src/Karata.Cards/Services/ReplaySessionRunner.cs`
- [Rules engine](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Cards/Engine/TwoPassKarataEngine.cs): `src/Karata.Kit/Cards/Engine/TwoPassKarataEngine.cs`
- [Card primitives](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Pips/Deck.cs): `src/Karata.Pips/Deck.cs`
- [Cards database](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Cards/Data/CardsContext.cs): `src/Karata.Cards/Data/CardsContext.cs`
- [Bot sessions](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Runtime/Bot/Services/BotSessionManager.cs): `src/Karata.Runtime/Bot/Services/BotSessionManager.cs`
- [Bot strategies](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Kit/Bot/Strategy/IBotStrategy.cs): `src/Karata.Kit/Bot/Strategy/IBotStrategy.cs`

### Shared services

- [User and activity](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Platform/Program.cs): `src/Karata.Platform/Program.cs`
- [Platform database](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Platform/Data/PlatformContext.cs): `src/Karata.Platform/Data/PlatformContext.cs`

### Other products

- [Trivia service](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Program.cs): `src/Karata.Trivia/Program.cs`
- [Trivia gameplay](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Controllers/ResponseController.cs): `src/Karata.Trivia/Controllers/ResponseController.cs`
- [Trivia notifications](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Trivia/Hubs/NotificationHub.cs): `src/Karata.Trivia/Hubs/NotificationHub.cs`
- [Link shortener](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Go/Program.cs): `src/Karata.Go/Program.cs`
- [Links database](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Go/Data/GoContext.cs): `src/Karata.Go/Data/GoContext.cs`

### Runtime foundation

- [Runtime framework](https://github.com/peter-mghendi/karata/blob/main/src/Karata.Runtime/DependencyInjection.cs): `src/Karata.Runtime/DependencyInjection.cs`

### Other components

- **Player**

## Connections

- Player → Web client: uses
- Web client → Cards SDK: configures
- Web client → Surface UI kit: configures
- Web client → User and activity: configures client
- Web client → Trivia service: configures client
- Web client → Bot sessions: configures interface
- Desktop client → Cards SDK: configures
- Desktop client → Surface UI kit: configures
- Cards server → Cards endpoints: maps
- Cards server → Live game hubs: maps
- Cards server → Rules engine: registers
- Cards server → Runtime framework: configures
- Cards server → Cards database: initializes
- Room and turn services → Rules engine: evaluates turns
- Cards server → Replay services: registers processor
- Bot sessions → Bot strategies: runs
- Trivia service → Trivia gameplay: maps controllers
- Trivia service → Trivia notifications: maps hub
- Trivia service → Runtime framework: configures
- Link shortener → Runtime framework: configures
- Link shortener → Links database: initializes
- User and activity → Runtime framework: configures
- User and activity → Platform database: initializes
