# warpten/blizztrack architecture

> Architecture diagram of the GitHub repository warpten/blizztrack, 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/warpten/blizztrack
- Repository: https://github.com/warpten/blizztrack

## Overview

Blizztrack combines a TACT file-system framework with an ASP.NET Core service. A user-facing path runs from API requests through file-system assembly and resource lookup to descriptors or file data; background monitoring separately queries Ribbit and maintains product/configuration state. The framework parses TACT encoding, index, install, and root data, then resolves resources through a locator to disk-backed handles. The README documents these framework capabilities; several server integrations are represented by source-index references rather than inspected call sites, so those links are marked unverified.

Main entry points: [`Blizztrack/API`](https://github.com/warpten/blizztrack/tree/master/Blizztrack/API) (API controllers), [`Blizztrack/Services/FileSystemSupplier.cs`](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/FileSystemSupplier.cs) (Filesystem supplier), [`Blizztrack/Persistence/DatabaseContext.cs`](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Persistence/DatabaseContext.cs) (Application database), [`Blizztrack/Services/Hosted/SummaryMonitorService.cs`](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/Hosted/SummaryMonitorService.cs) (Summary monitor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Blizztrack server"]
  node_api["API controllers"]
  node_settings["App settings<br/>[Settings.cs]"]
  node_supplier["Filesystem supplier"]
  node_db[("Application database<br/>[DatabaseContext.cs]")]
  node_entities["Product state<br/>[Product.cs]"]
end

subgraph group_monitoring["Ribbit monitoring"]
  node_summary["Summary monitor"]
  node_knownfiles["Known-file monitor"]
  node_mediator["Update mediator<br/>[MediatorService.cs]"]
end

subgraph group_tact["TACT framework"]
  node_encoding["Encoding parser<br/>[Encoding.cs]"]
  node_index["Index parser<br/>[Index.cs]"]
  node_install["Install parser<br/>[Install.cs]"]
  node_root["Root parser<br/>[Root.cs]"]
  node_key["TACT keys<br/>[Key.cs]"]
  node_content_flags["Content flags<br/>[Content.cs]"]
end

subgraph group_resources["Resource access"]
  node_resource_types["Resource types<br/>[ResourceType.cs]"]
  node_descriptor["Resource descriptor"]
  node_locator["Resource locator"]
  node_handle["Resource handle<br/>[ResourceHandle.cs]"]
  node_locator_contract["Locator contract"]
end

node_user(("API client"))
node_ribbit(("Ribbit service"))

node_user -->|"requests"| node_api
node_api -->|"obtains filesystem"| node_supplier
node_api -->|"queries state"| node_db
node_api -->|"resolves resources"| node_locator_contract
node_supplier -.->|"loads TACT data"| node_encoding
node_supplier -.->|"loads TACT data"| node_root
node_supplier -.->|"loads TACT data"| node_install
node_supplier -.->|"loads TACT data"| node_index
node_encoding -->|"references"| node_index
node_encoding -->|"uses keys"| node_key
node_api -->|"serves install data"| node_install
node_api -->|"serves encoding data"| node_encoding
node_resource_types -->|"creates descriptors"| node_descriptor
node_locator_contract -->|"accepts descriptors"| node_descriptor
node_locator_contract -->|"returns handles"| node_handle
node_locator -->|"creates handles"| node_handle
node_locator -->|"looks up products"| node_db
node_locator -->|"resolves descriptor"| node_descriptor
node_handle -.->|"represents resource"| node_descriptor
node_summary -->|"queries updates"| node_ribbit
node_summary -->|"reads and persists"| node_db
node_summary -->|"publishes updates"| node_mediator
node_knownfiles -->|"consumes updates"| node_mediator
node_knownfiles -->|"records known files"| node_db
node_knownfiles -->|"reads resources"| node_locator_contract
node_settings -.->|"configures monitoring"| node_summary
node_settings -->|"configures cache"| node_locator
node_db -->|"stores product state"| node_entities
node_content_flags -.->|"filters content"| node_root

click node_api "https://github.com/warpten/blizztrack/tree/master/Blizztrack/API"
click node_settings "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Options/Settings.cs"
click node_supplier "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/FileSystemSupplier.cs"
click node_db "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Persistence/DatabaseContext.cs"
click node_entities "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Persistence/Entities/Product.cs"
click node_summary "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/Hosted/SummaryMonitorService.cs"
click node_knownfiles "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/Hosted/KnownFilesMonitorService.cs"
click node_mediator "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/MediatorService.cs"
click node_encoding "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Encoding.cs"
click node_index "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Index.cs"
click node_install "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Install.cs"
click node_root "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Root.cs"
click node_key "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Key.cs"
click node_resource_types "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceType.cs"
click node_descriptor "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceDescriptor.cs"
click node_locator "https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/ResourceLocatorService.cs"
click node_handle "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceHandle.cs"
click node_locator_contract "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/IResourceLocator.cs"
click node_content_flags "https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Enums/Content.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_api,node_settings,node_supplier,node_db,node_entities,node_user toneBlue
class node_summary,node_knownfiles,node_mediator toneAmber
class node_encoding,node_index,node_install,node_root,node_key,node_content_flags toneMint
class node_resource_types,node_descriptor,node_locator,node_handle,node_locator_contract toneRose
class node_ribbit toneIndigo
```

## Components

### Blizztrack server

- [API controllers](https://github.com/warpten/blizztrack/tree/master/Blizztrack/API): `Blizztrack/API`
- [App settings](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Options/Settings.cs): `Blizztrack/Options/Settings.cs`
- [Filesystem supplier](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/FileSystemSupplier.cs): `Blizztrack/Services/FileSystemSupplier.cs`
- [Application database](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Persistence/DatabaseContext.cs): `Blizztrack/Persistence/DatabaseContext.cs`
- [Product state](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Persistence/Entities/Product.cs): `Blizztrack/Persistence/Entities/Product.cs`

### Ribbit monitoring

- [Summary monitor](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/Hosted/SummaryMonitorService.cs): `Blizztrack/Services/Hosted/SummaryMonitorService.cs`
- [Known-file monitor](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/Hosted/KnownFilesMonitorService.cs): `Blizztrack/Services/Hosted/KnownFilesMonitorService.cs`
- [Update mediator](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/MediatorService.cs): `Blizztrack/Services/MediatorService.cs`

### TACT framework

- [Encoding parser](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Encoding.cs): `Blizztrack.Framework/TACT/Implementation/Encoding.cs`
- [Index parser](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Index.cs): `Blizztrack.Framework/TACT/Implementation/Index.cs`
- [Install parser](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Install.cs): `Blizztrack.Framework/TACT/Implementation/Install.cs`
- [Root parser](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Implementation/Root.cs): `Blizztrack.Framework/TACT/Implementation/Root.cs`
- [TACT keys](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Key.cs): `Blizztrack.Framework/TACT/Key.cs`
- [Content flags](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Enums/Content.cs): `Blizztrack.Framework/TACT/Enums/Content.cs`

### Resource access

- [Resource types](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceType.cs): `Blizztrack.Framework/TACT/Resources/ResourceType.cs`
- [Resource descriptor](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceDescriptor.cs): `Blizztrack.Framework/TACT/Resources/ResourceDescriptor.cs`
- [Resource locator](https://github.com/warpten/blizztrack/blob/master/Blizztrack/Services/ResourceLocatorService.cs): `Blizztrack/Services/ResourceLocatorService.cs`
- [Resource handle](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/ResourceHandle.cs): `Blizztrack.Framework/TACT/Resources/ResourceHandle.cs`
- [Locator contract](https://github.com/warpten/blizztrack/blob/master/Blizztrack.Framework/TACT/Resources/IResourceLocator.cs): `Blizztrack.Framework/TACT/Resources/IResourceLocator.cs`

### Other components

- **API client**
- **Ribbit service**

## Connections

- API client → API controllers: requests (evidence: `Blizztrack/API/FileSystemController.cs`)
- API controllers → Filesystem supplier: obtains filesystem (evidence: `Blizztrack/API/FileSystemController.cs`)
- API controllers → Application database: queries state (evidence: `Blizztrack/API/FileSystemController.cs`)
- API controllers → Locator contract: resolves resources (evidence: `Blizztrack/API/FileSystemController.cs`)
- Filesystem supplier → Encoding parser: loads TACT data (evidence: `Blizztrack/Services/FileSystemSupplier.cs`)
- Filesystem supplier → Root parser: loads TACT data (evidence: `Blizztrack/Services/FileSystemSupplier.cs`)
- Filesystem supplier → Install parser: loads TACT data (evidence: `Blizztrack/Services/FileSystemSupplier.cs`)
- Filesystem supplier → Index parser: loads TACT data (evidence: `Blizztrack/Services/FileSystemSupplier.cs`)
- Encoding parser → Index parser: references (evidence: `Blizztrack.Framework/TACT/Implementation/Encoding.cs`)
- Encoding parser → TACT keys: uses keys (evidence: `Blizztrack.Framework/TACT/Implementation/Encoding.cs`)
- API controllers → Install parser: serves install data (evidence: `Blizztrack/API/InstallController.cs`)
- API controllers → Encoding parser: serves encoding data (evidence: `Blizztrack/API/EncodingController.cs`)
- Resource types → Resource descriptor: creates descriptors (evidence: `Blizztrack.Framework/TACT/Resources/ResourceType.cs`)
- Locator contract → Resource descriptor: accepts descriptors (evidence: `Blizztrack.Framework/TACT/Resources/IResourceLocator.cs`)
- Locator contract → Resource handle: returns handles (evidence: `Blizztrack.Framework/TACT/Resources/IResourceLocator.cs`)
- Resource locator → Resource handle: creates handles (evidence: `Blizztrack/Services/ResourceLocatorService.cs`)
- Resource locator → Application database: looks up products (evidence: `Blizztrack/Services/ResourceLocatorService.cs`)
- Resource locator → Resource descriptor: resolves descriptor (evidence: `Blizztrack/Services/ResourceLocatorService.cs`)
- Resource handle → Resource descriptor: represents resource
- Summary monitor → Ribbit service: queries updates (evidence: `Blizztrack/Services/Hosted/SummaryMonitorService.cs`)
- Summary monitor → Application database: reads and persists (evidence: `Blizztrack/Services/Hosted/SummaryMonitorService.cs`)
- Summary monitor → Update mediator: publishes updates (evidence: `Blizztrack/Services/Hosted/SummaryMonitorService.cs`)
- Known-file monitor → Update mediator: consumes updates (evidence: `Blizztrack/Services/Hosted/KnownFilesMonitorService.cs`)
- Known-file monitor → Application database: records known files (evidence: `Blizztrack/Services/Hosted/KnownFilesMonitorService.cs`)
- Known-file monitor → Locator contract: reads resources (evidence: `Blizztrack/Services/Hosted/KnownFilesMonitorService.cs`)
- App settings → Summary monitor: configures monitoring (evidence: `Blizztrack/Services/Hosted/SummaryMonitorService.cs`)
- App settings → Resource locator: configures cache (evidence: `Blizztrack/Services/ResourceLocatorService.cs`)
- Application database → Product state: stores product state (evidence: `Blizztrack/Persistence/DatabaseContext.cs`)
- Content flags → Root parser: filters content (evidence: `Blizztrack.Framework/TACT/Implementation/Root.cs`)
