# danielsan-01/csinvtracker architecture

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

## Overview

CS Inventory Tracker is a web app for tracking Counter-Strike skins and stickers, planning purchases, and composing saved loadouts. Users browse or refresh an inventory, inspect and manage its items, and can plan a goal or save a loadout; Steam sign-in connects an account to user-specific data. The frontend uses a .NET API backed by PostgreSQL, with external Steam and market-data integrations. The graph includes major README-adjacent product branches visible in the tree; some frontend-to-API wiring and unsampled service details are inferred only where supported by the named modules.

Main entry points: [`frontend/lib/api.ts`](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/lib/api.ts) (API client), [`backend/Data/ApplicationDbContext.cs`](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Data/ApplicationDbContext.cs) (PostgreSQL data), [`backend/Controllers/AuthController.cs`](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/AuthController.cs) (Auth API), [`backend/Controllers/InventoryController.cs`](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/InventoryController.cs) (Inventory API)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web experience"]
  node_frontend["Next.js app<br/>[page.tsx]"]
  node_user_context["User context<br/>[UserContext.tsx]"]
  node_api_client["API client<br/>[api.ts]"]
  node_inventory_ui["Inventory UI"]
  node_catalog_hooks["Catalog hooks<br/>[useSkinCatalog.ts]"]
end

subgraph group_identity["Identity and admin"]
  node_auth_routes["Steam auth routes<br/>[route.ts]"]
  node_auth_callback["Auth callback<br/>[route.ts]"]
  node_auth_controller["Auth API<br/>[AuthController.cs]"]
  node_auth_service["Token service<br/>[AuthService.cs]"]
  node_admin_ui["Admin console<br/>[page.tsx]"]
  node_admin_controller["Admin API<br/>[AdminController.cs]"]
end

subgraph group_inventory["Inventory and catalogs"]
  node_inventory_controller["Inventory API"]
  node_catalog_controller["Skin catalog API<br/>[SkinsController.cs]"]
  node_stickers_controller["Sticker catalog API"]
  node_steam_import["Steam inventory import"]
end

subgraph group_planning["Goals and loadouts"]
  node_goal_ui["Goal planner<br/>[page.tsx]"]
  node_goal_storage["Goal storage<br/>[goalStorage.ts]"]
  node_loadout_ui["Loadout cooker<br/>[page.tsx]"]
  node_goals_controller["Goals API<br/>[GoalsController.cs]"]
  node_loadouts_controller["Loadouts API"]
end

subgraph group_data["Persistence and integrations"]
  node_market_service["Market pricing"]
  node_db[("PostgreSQL data")]
end

node_user(("Player"))
node_steam{{"Steam services"}}
node_market{{"Market providers"}}

node_user -->|"uses"| node_frontend
node_frontend -->|"reads session"| node_user_context
node_inventory_ui -->|"requests data"| node_api_client
node_goal_ui -->|"loads and saves"| node_goal_storage
node_goal_storage -->|"fetches goals"| node_api_client
node_loadout_ui -->|"requests loadouts"| node_api_client
node_catalog_hooks -->|"requests catalog"| node_api_client
node_user -->|"starts sign-in"| node_auth_routes
node_auth_routes -->|"redirects to OpenID"| node_steam
node_steam -->|"returns assertion"| node_auth_callback
node_auth_callback -->|"posts login"| node_auth_controller
node_auth_controller -->|"generates token"| node_auth_service
node_auth_controller -->|"reads and writes users"| node_db
node_auth_controller -->|"verifies identity"| node_steam
node_admin_ui -->|"requests admin data"| node_api_client
node_api_client -->|"calls API"| node_admin_controller
node_api_client -->|"calls API"| node_inventory_controller
node_api_client -->|"calls API"| node_catalog_controller
node_api_client -->|"calls API"| node_stickers_controller
node_api_client -->|"calls API"| node_goals_controller
node_api_client -->|"calls API"| node_loadouts_controller
node_inventory_controller -->|"reads and writes items"| node_db
node_inventory_controller -->|"imports inventory"| node_steam_import
node_steam_import -->|"fetches inventory"| node_steam
node_catalog_controller -->|"reads and writes skins"| node_db
node_stickers_controller -->|"reads and writes stickers"| node_db
node_inventory_controller -->|"requests pricing"| node_market_service
node_market_service -.->|"fetches prices"| node_market
node_goals_controller -->|"reads and writes goals"| node_db
node_loadouts_controller -->|"reads and writes loadouts"| node_db
node_admin_controller -->|"reads and writes records"| node_db

click node_frontend "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/page.tsx"
click node_user_context "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/contexts/UserContext.tsx"
click node_api_client "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/lib/api.ts"
click node_inventory_ui "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/components/item-grid/InventoryGridList.tsx"
click node_goal_ui "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/goal/page.tsx"
click node_goal_storage "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/lib/goalStorage.ts"
click node_loadout_ui "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/loadout-cooker/page.tsx"
click node_auth_routes "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/api/auth/steam/route.ts"
click node_auth_callback "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/api/auth/steam/callback/route.ts"
click node_auth_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/AuthController.cs"
click node_auth_service "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/AuthService.cs"
click node_admin_ui "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/admin/page.tsx"
click node_admin_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/AdminController.cs"
click node_inventory_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/InventoryController.cs"
click node_catalog_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/SkinsController.cs"
click node_stickers_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/StickersController.cs"
click node_catalog_hooks "https://github.com/danielsan-01/csinvtracker/blob/main/frontend/hooks/useSkinCatalog.ts"
click node_steam_import "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/SteamInventoryImportService.cs"
click node_market_service "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/CsMarketApiService.cs"
click node_goals_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/GoalsController.cs"
click node_loadouts_controller "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/LoadoutsController.cs"
click node_db "https://github.com/danielsan-01/csinvtracker/blob/main/backend/Data/ApplicationDbContext.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_frontend,node_user_context,node_api_client,node_inventory_ui,node_catalog_hooks toneBlue
class node_auth_routes,node_auth_callback,node_auth_controller,node_auth_service,node_admin_ui,node_admin_controller toneAmber
class node_inventory_controller,node_catalog_controller,node_stickers_controller,node_steam_import toneMint
class node_goal_ui,node_goal_storage,node_loadout_ui,node_goals_controller,node_loadouts_controller toneRose
class node_market_service,node_db,node_user,node_steam,node_market toneIndigo
```

## Components

### Web experience

- [Next.js app](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/page.tsx): `frontend/app/page.tsx`
- [User context](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/contexts/UserContext.tsx): `frontend/contexts/UserContext.tsx`
- [API client](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/lib/api.ts): `frontend/lib/api.ts`
- [Inventory UI](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/components/item-grid/InventoryGridList.tsx): `frontend/app/components/item-grid/InventoryGridList.tsx`
- [Catalog hooks](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/hooks/useSkinCatalog.ts): `frontend/hooks/useSkinCatalog.ts`

### Identity and admin

- [Steam auth routes](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/api/auth/steam/route.ts): `frontend/app/api/auth/steam/route.ts`
- [Auth callback](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/api/auth/steam/callback/route.ts): `frontend/app/api/auth/steam/callback/route.ts`
- [Auth API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/AuthController.cs): `backend/Controllers/AuthController.cs`
- [Token service](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/AuthService.cs): `backend/Services/AuthService.cs`
- [Admin console](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/admin/page.tsx): `frontend/app/admin/page.tsx`
- [Admin API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/AdminController.cs): `backend/Controllers/AdminController.cs`

### Inventory and catalogs

- [Inventory API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/InventoryController.cs): `backend/Controllers/InventoryController.cs`
- [Skin catalog API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/SkinsController.cs): `backend/Controllers/SkinsController.cs`
- [Sticker catalog API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/StickersController.cs): `backend/Controllers/StickersController.cs`
- [Steam inventory import](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/SteamInventoryImportService.cs): `backend/Services/SteamInventoryImportService.cs`

### Goals and loadouts

- [Goal planner](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/goal/page.tsx): `frontend/app/goal/page.tsx`
- [Goal storage](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/lib/goalStorage.ts): `frontend/lib/goalStorage.ts`
- [Loadout cooker](https://github.com/danielsan-01/csinvtracker/blob/main/frontend/app/loadout-cooker/page.tsx): `frontend/app/loadout-cooker/page.tsx`
- [Goals API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/GoalsController.cs): `backend/Controllers/GoalsController.cs`
- [Loadouts API](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Controllers/LoadoutsController.cs): `backend/Controllers/LoadoutsController.cs`

### Persistence and integrations

- [Market pricing](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Services/CsMarketApiService.cs): `backend/Services/CsMarketApiService.cs`
- [PostgreSQL data](https://github.com/danielsan-01/csinvtracker/blob/main/backend/Data/ApplicationDbContext.cs): `backend/Data/ApplicationDbContext.cs`

### Other components

- **Player**
- **Steam services**
- **Market providers**

## Connections

- Player → Next.js app: uses
- Next.js app → User context: reads session
- Inventory UI → API client: requests data
- Goal planner → Goal storage: loads and saves
- Goal storage → API client: fetches goals
- Loadout cooker → API client: requests loadouts
- Catalog hooks → API client: requests catalog
- Player → Steam auth routes: starts sign-in
- Steam auth routes → Steam services: redirects to OpenID
- Steam services → Auth callback: returns assertion
- Auth callback → Auth API: posts login
- Auth API → Token service: generates token
- Auth API → PostgreSQL data: reads and writes users
- Auth API → Steam services: verifies identity
- Admin console → API client: requests admin data
- API client → Admin API: calls API
- API client → Inventory API: calls API
- API client → Skin catalog API: calls API
- API client → Sticker catalog API: calls API
- API client → Goals API: calls API
- API client → Loadouts API: calls API
- Inventory API → PostgreSQL data: reads and writes items
- Inventory API → Steam inventory import: imports inventory
- Steam inventory import → Steam services: fetches inventory
- Skin catalog API → PostgreSQL data: reads and writes skins
- Sticker catalog API → PostgreSQL data: reads and writes stickers
- Inventory API → Market pricing: requests pricing
- Market pricing → Market providers: fetches prices
- Goals API → PostgreSQL data: reads and writes goals
- Loadouts API → PostgreSQL data: reads and writes loadouts
- Admin API → PostgreSQL data: reads and writes records
