# masydeloitte/aiinfraapp_newapproach_29_09 architecture

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

- Interactive diagram: https://gitdiagram.com/masydeloitte/aiinfraapp_newapproach_29_09
- Repository: https://github.com/masydeloitte/aiinfraapp_newapproach_29_09

## Overview

This is a local AI infrastructure sizing application. Users sign in, create a project, enter workload and data assumptions, request deterministic capacity estimates, and view projections, warnings, and downloadable reports. Administrators maintain sizing catalogs. The API owns authentication, authorization, calculation orchestration, persistence, catalog administration, and report generation; the frontend presents those workflows. The calculation pipeline and API/storage implementation were sampled; additional capabilities are included only where the README documents them.

Main entry points: [`backend/app/db/session.py`](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/db/session.py) (Database sessions), [`backend/app/main.py`](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py) (Calculation API), [`frontend/app/projects/[id]/page.tsx`](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/projects/%5Bid%5D/page.tsx) (Sizing workspace), [`backend/app/core/security.py`](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/core/security.py) (JWT and RBAC)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web workflows"]
  node_login["Sign in<br/>[page.tsx]"]
  node_dashboard["Projects dashboard<br/>[page.tsx]"]
  node_workspace["Sizing workspace<br/>[page.tsx]"]
  node_adminui["Catalog admin<br/>[page.tsx]"]
end

subgraph group_api["API services"]
  node_authapi["Auth and access<br/>[main.py]"]
  node_security["JWT and RBAC<br/>[security.py]"]
  node_projectapi["Project API<br/>[main.py]"]
  node_calculationapi["Calculation API<br/>[main.py]"]
  node_catalogapi["Catalog API<br/>[main.py]"]
  node_reportapi["Report endpoints<br/>[main.py]"]
  node_schemas["Request schemas<br/>[schemas.py]"]
  node_reports["JSON PDF XLSX<br/>[main.py]"]
end

subgraph group_sizing["Sizing domain"]
  node_engine["Sizing pipeline<br/>[pipeline.py]"]
  node_result["Sizing result"]
end

subgraph group_state["Catalog and records"]
  node_records["Domain records<br/>[entities.py]"]
  node_dbsession["Database sessions<br/>[session.py]"]
  node_postgres[("PostgreSQL")]
  node_catalogs[("Sizing catalogs<br/>[entities.py]")]
  node_calcruns[("Calculation runs<br/>[entities.py]")]
end

node_user(("User"))

node_user -->|"signs in"| node_login
node_login -->|"login request"| node_authapi
node_authapi -->|"verifies credentials"| node_security
node_security -->|"loads user"| node_dbsession
node_dbsession -->|"queries"| node_postgres
node_authapi -->|"returns token"| node_login
node_user -->|"manages projects"| node_dashboard
node_dashboard -->|"creates and lists"| node_projectapi
node_projectapi -->|"validates input"| node_schemas
node_projectapi -->|"requires user"| node_security
node_projectapi -->|"reads and writes"| node_dbsession
node_dbsession -->|"maps entities"| node_records
node_user -->|"enters sizing inputs"| node_workspace
node_workspace -->|"submits assumptions"| node_calculationapi
node_calculationapi -->|"validates request"| node_schemas
node_calculationapi -->|"requires user"| node_security
node_calculationapi -->|"loads project and catalogs"| node_dbsession
node_dbsession -->|"reads catalog items"| node_catalogs
node_calculationapi -->|"calculates from snapshot"| node_engine
node_engine -->|"produces estimates"| node_result
node_calculationapi -->|"persists run"| node_dbsession
node_dbsession -->|"stores result and lineage"| node_calcruns
node_calculationapi -->|"returns sizing result"| node_workspace
node_workspace -->|"requests report"| node_reportapi
node_reportapi -->|"loads calculation"| node_dbsession
node_reportapi -->|"formats report"| node_reports
node_reports -->|"serves download"| node_workspace
node_user -->|"administers catalogs"| node_adminui
node_adminui -->|"reads and creates items"| node_catalogapi
node_catalogapi -->|"requires admin"| node_security
node_catalogapi -->|"reads and writes"| node_dbsession
node_dbsession -->|"loads saved runs"| node_calcruns

click node_login "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/page.tsx"
click node_dashboard "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/dashboard/page.tsx"
click node_workspace "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/projects/%5Bid%5D/page.tsx"
click node_adminui "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/admin/page.tsx"
click node_authapi "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"
click node_security "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/core/security.py"
click node_projectapi "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"
click node_calculationapi "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"
click node_catalogapi "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"
click node_reportapi "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"
click node_schemas "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/schemas.py"
click node_engine "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/engine/pipeline.py"
click node_records "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py"
click node_dbsession "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/db/session.py"
click node_catalogs "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py"
click node_calcruns "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py"
click node_reports "https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py"

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_login,node_dashboard,node_workspace,node_adminui,node_user toneBlue
class node_authapi,node_security,node_projectapi,node_calculationapi,node_catalogapi,node_reportapi,node_schemas,node_reports toneAmber
class node_engine,node_result toneMint
class node_records,node_dbsession,node_postgres,node_catalogs,node_calcruns toneRose
```

## Components

### Web workflows

- [Sign in](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/page.tsx): `frontend/app/page.tsx`
- [Projects dashboard](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/dashboard/page.tsx): `frontend/app/dashboard/page.tsx`
- [Sizing workspace](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/projects/%5Bid%5D/page.tsx): `frontend/app/projects/[id]/page.tsx`
- [Catalog admin](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/frontend/app/admin/page.tsx): `frontend/app/admin/page.tsx`

### API services

- [Auth and access](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`
- [JWT and RBAC](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/core/security.py): `backend/app/core/security.py`
- [Project API](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`
- [Calculation API](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`
- [Catalog API](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`
- [Report endpoints](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`
- [Request schemas](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/schemas.py): `backend/app/schemas.py`
- [JSON PDF XLSX](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/main.py): `backend/app/main.py`

### Sizing domain

- [Sizing pipeline](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/engine/pipeline.py): `backend/app/engine/pipeline.py`
- **Sizing result**

### Catalog and records

- [Domain records](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py): `backend/app/models/entities.py`
- [Database sessions](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/db/session.py): `backend/app/db/session.py`
- **PostgreSQL**
- [Sizing catalogs](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py): `backend/app/models/entities.py`
- [Calculation runs](https://github.com/masydeloitte/aiinfraapp_newapproach_29_09/blob/main/backend/app/models/entities.py): `backend/app/models/entities.py`

### Other components

- **User**

## Connections

- User → Sign in: signs in
- Sign in → Auth and access: login request
- Auth and access → JWT and RBAC: verifies credentials
- JWT and RBAC → Database sessions: loads user
- Database sessions → PostgreSQL: queries
- Auth and access → Sign in: returns token
- User → Projects dashboard: manages projects
- Projects dashboard → Project API: creates and lists
- Project API → Request schemas: validates input
- Project API → JWT and RBAC: requires user
- Project API → Database sessions: reads and writes
- Database sessions → Domain records: maps entities
- User → Sizing workspace: enters sizing inputs
- Sizing workspace → Calculation API: submits assumptions
- Calculation API → Request schemas: validates request
- Calculation API → JWT and RBAC: requires user
- Calculation API → Database sessions: loads project and catalogs
- Database sessions → Sizing catalogs: reads catalog items
- Calculation API → Sizing pipeline: calculates from snapshot
- Sizing pipeline → Sizing result: produces estimates
- Calculation API → Database sessions: persists run
- Database sessions → Calculation runs: stores result and lineage
- Calculation API → Sizing workspace: returns sizing result
- Sizing workspace → Report endpoints: requests report
- Report endpoints → Database sessions: loads calculation
- Report endpoints → JSON PDF XLSX: formats report
- JSON PDF XLSX → Sizing workspace: serves download
- User → Catalog admin: administers catalogs
- Catalog admin → Catalog API: reads and creates items
- Catalog API → JWT and RBAC: requires admin
- Catalog API → Database sessions: reads and writes
- Database sessions → Calculation runs: loads saved runs
