# nick-8149/bom-project-for-extropic architecture

> Architecture diagram of the GitHub repository nick-8149/bom-project-for-extropic, 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/nick-8149/bom-project-for-extropic
- Repository: https://github.com/nick-8149/bom-project-for-extropic

## Overview

BOM Manager is an engineering platform for verifying component lists and monitoring lifecycle, risk, compliance, suppliers, and replacements. Engineers upload a BOM, review matched parts and risks, then explore replacement suggestions and record review decisions. The graph includes the documented dashboard, reporting, alerts, and catalog capabilities. Backend endpoint-to-service wiring is mostly unsampled, so those relationships are omitted or marked unverified rather than inferred.

Main entry points: [`bom-manager/frontend/src/App.tsx`](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/App.tsx) (Application routes), [`bom-manager/frontend/src/api/client.ts`](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/api/client.ts) (API client), [`bom-manager/backend/app/models/models.py`](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/models/models.py) (Catalog and domain records), [`bom-manager/backend/app/services/ai/replacement_service.py`](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/replacement_service.py) (AI replacement analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Web application"]
  node_app["Application routes<br/>[App.tsx]"]
  node_upload["BOM upload<br/>[BOMUploadPage.tsx]"]
  node_results["BOM results<br/>[BOMResultsPage.tsx]"]
  node_dashboard["Portfolio dashboard<br/>[DashboardPage.tsx]"]
  node_alerts["Alerts<br/>[AlertsPage.tsx]"]
  node_reports["Reports<br/>[ReportsPage.tsx]"]
  node_lifecycle["Lifecycle view<br/>[LifecyclePage.tsx]"]
  node_compliance["Compliance view<br/>[CompliancePage.tsx]"]
  node_partsearch["Part search<br/>[PartSearchPage.tsx]"]
  node_partdetail["Part detail<br/>[PartDetailPage.tsx]"]
  node_replacementsui["AI replacements"]
  node_review["Engineer review<br/>[AIReviewModal.tsx]"]
  node_client["API client<br/>[client.ts]"]
  node_partspage["Parts and catalog<br/>[PartSearchPage.tsx]"]
  node_supplierpage["Supplier directory<br/>[SuppliersPage.tsx]"]
  node_manufacturerpage["Manufacturer directory"]
end

subgraph group_api["API and access"]
  node_backend["FastAPI application<br/>[main.py]"]
  node_router["API router<br/>[api.py]"]
  node_auth["Authentication<br/>[auth.py]"]
end

subgraph group_bom["BOM verification"]
  node_bomendpoint["BOM endpoints<br/>[bom.py]"]
  node_parser["BOM parser<br/>[bom_parser.py]"]
  node_processor["BOM processing<br/>[bom_processor.py]"]
  node_normalizer["BOM normalization<br/>[bom_normalizer.py]"]
  node_matcher["Part matching<br/>[matcher.py]"]
end

subgraph group_engineering["Engineering analysis"]
  node_risk["Risk assessment<br/>[risk_engine.py]"]
  node_replacement["Candidate matching"]
  node_aireplacement["AI replacement analysis"]
  node_provider["AI provider<br/>[providers.py]"]
  node_prompts["Analysis prompts<br/>[prompts.py]"]
end

subgraph group_data["Catalog and persistence"]
  node_catalog["Catalog and domain records<br/>[models.py]"]
  node_database[("Database sessions<br/>[database.py]")]
end

node_engineer(("Engineer"))

node_engineer -->|"uses"| node_app
node_app -->|"routes to"| node_upload
node_app -->|"routes to"| node_results
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_alerts
node_app -->|"routes to"| node_reports
node_app -->|"routes to"| node_lifecycle
node_app -->|"routes to"| node_compliance
node_app -->|"routes to"| node_partsearch
node_app -->|"routes to"| node_partdetail
node_app -->|"routes to"| node_replacementsui
node_app -->|"routes to"| node_partspage
node_app -->|"routes to"| node_supplierpage
node_app -->|"routes to"| node_manufacturerpage
node_upload -->|"submits request"| node_client
node_results -->|"fetches results"| node_client
node_dashboard -->|"fetches metrics"| node_client
node_alerts -->|"fetches alerts"| node_client
node_client -->|"HTTP requests"| node_backend
node_backend -->|"mounts routes"| node_router
node_router -->|"registers route"| node_auth
node_router -->|"registers route"| node_bomendpoint
node_bomendpoint -.->|"may invoke"| node_parser
node_parser -.->|"may feed"| node_processor
node_processor -.->|"may use"| node_normalizer
node_processor -.->|"may use"| node_matcher
node_matcher -.->|"queries"| node_catalog
node_risk -->|"reads records"| node_catalog
node_replacement -->|"queries candidates"| node_catalog
node_aireplacement -->|"gets candidates"| node_replacement
node_aireplacement -->|"requests analysis"| node_provider
node_aireplacement -->|"builds prompt"| node_prompts
node_aireplacement -->|"persists analysis"| node_catalog
node_review -->|"submits decision"| node_client
node_database -->|"provides ORM base"| node_catalog

click node_app "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/App.tsx"
click node_upload "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/BOMUploadPage.tsx"
click node_results "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/BOMResultsPage.tsx"
click node_dashboard "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/DashboardPage.tsx"
click node_alerts "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/AlertsPage.tsx"
click node_reports "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/ReportsPage.tsx"
click node_lifecycle "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/LifecyclePage.tsx"
click node_compliance "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/CompliancePage.tsx"
click node_partsearch "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartSearchPage.tsx"
click node_partdetail "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartDetailPage.tsx"
click node_replacementsui "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/AIReplacementsPage.tsx"
click node_review "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/components/AIReviewModal.tsx"
click node_client "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/api/client.ts"
click node_backend "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/main.py"
click node_router "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/api.py"
click node_auth "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/endpoints/auth.py"
click node_bomendpoint "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/endpoints/bom.py"
click node_parser "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_parser.py"
click node_processor "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_processor.py"
click node_normalizer "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_normalizer.py"
click node_matcher "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/matcher.py"
click node_risk "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/risk_engine.py"
click node_replacement "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/replacement_engine.py"
click node_aireplacement "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/replacement_service.py"
click node_provider "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/providers.py"
click node_prompts "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/prompts.py"
click node_catalog "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/models/models.py"
click node_database "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/database.py"
click node_partspage "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartSearchPage.tsx"
click node_supplierpage "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/SuppliersPage.tsx"
click node_manufacturerpage "https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/ManufacturersPage.tsx"

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_app,node_upload,node_results,node_dashboard,node_alerts,node_reports,node_lifecycle,node_compliance,node_partsearch,node_partdetail,node_replacementsui,node_review,node_client,node_partspage,node_supplierpage,node_manufacturerpage toneBlue
class node_backend,node_router,node_auth toneAmber
class node_bomendpoint,node_parser,node_processor,node_normalizer,node_matcher toneMint
class node_risk,node_replacement,node_aireplacement,node_provider,node_prompts toneRose
class node_catalog,node_database,node_engineer toneIndigo
```

## Components

### Web application

- [Application routes](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/App.tsx): `bom-manager/frontend/src/App.tsx`
- [BOM upload](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/BOMUploadPage.tsx): `bom-manager/frontend/src/pages/BOMUploadPage.tsx`
- [BOM results](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/BOMResultsPage.tsx): `bom-manager/frontend/src/pages/BOMResultsPage.tsx`
- [Portfolio dashboard](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/DashboardPage.tsx): `bom-manager/frontend/src/pages/DashboardPage.tsx`
- [Alerts](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/AlertsPage.tsx): `bom-manager/frontend/src/pages/AlertsPage.tsx`
- [Reports](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/ReportsPage.tsx): `bom-manager/frontend/src/pages/ReportsPage.tsx`
- [Lifecycle view](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/LifecyclePage.tsx): `bom-manager/frontend/src/pages/LifecyclePage.tsx`
- [Compliance view](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/CompliancePage.tsx): `bom-manager/frontend/src/pages/CompliancePage.tsx`
- [Part search](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartSearchPage.tsx): `bom-manager/frontend/src/pages/PartSearchPage.tsx`
- [Part detail](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartDetailPage.tsx): `bom-manager/frontend/src/pages/PartDetailPage.tsx`
- [AI replacements](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/AIReplacementsPage.tsx): `bom-manager/frontend/src/pages/AIReplacementsPage.tsx`
- [Engineer review](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/components/AIReviewModal.tsx): `bom-manager/frontend/src/components/AIReviewModal.tsx`
- [API client](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/api/client.ts): `bom-manager/frontend/src/api/client.ts`
- [Parts and catalog](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/PartSearchPage.tsx): `bom-manager/frontend/src/pages/PartSearchPage.tsx`
- [Supplier directory](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/SuppliersPage.tsx): `bom-manager/frontend/src/pages/SuppliersPage.tsx`
- [Manufacturer directory](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/frontend/src/pages/ManufacturersPage.tsx): `bom-manager/frontend/src/pages/ManufacturersPage.tsx`

### API and access

- [FastAPI application](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/main.py): `bom-manager/backend/app/main.py`
- [API router](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/api.py): `bom-manager/backend/app/api/v1/api.py`
- [Authentication](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/endpoints/auth.py): `bom-manager/backend/app/api/v1/endpoints/auth.py`

### BOM verification

- [BOM endpoints](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/api/v1/endpoints/bom.py): `bom-manager/backend/app/api/v1/endpoints/bom.py`
- [BOM parser](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_parser.py): `bom-manager/backend/app/services/bom_parser.py`
- [BOM processing](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_processor.py): `bom-manager/backend/app/services/bom_processor.py`
- [BOM normalization](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/bom_normalizer.py): `bom-manager/backend/app/services/bom_normalizer.py`
- [Part matching](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/matcher.py): `bom-manager/backend/app/services/matcher.py`

### Engineering analysis

- [Risk assessment](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/risk_engine.py): `bom-manager/backend/app/services/risk_engine.py`
- [Candidate matching](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/replacement_engine.py): `bom-manager/backend/app/services/replacement_engine.py`
- [AI replacement analysis](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/replacement_service.py): `bom-manager/backend/app/services/ai/replacement_service.py`
- [AI provider](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/providers.py): `bom-manager/backend/app/services/ai/providers.py`
- [Analysis prompts](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/services/ai/prompts.py): `bom-manager/backend/app/services/ai/prompts.py`

### Catalog and persistence

- [Catalog and domain records](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/models/models.py): `bom-manager/backend/app/models/models.py`
- [Database sessions](https://github.com/nick-8149/bom-project-for-extropic/blob/main/bom-manager/backend/app/database.py): `bom-manager/backend/app/database.py`

### Other components

- **Engineer**

## Connections

- Engineer → Application routes: uses (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → BOM upload: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → BOM results: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Portfolio dashboard: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Alerts: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Reports: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Lifecycle view: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Compliance view: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Part search: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Part detail: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → AI replacements: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Parts and catalog: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Supplier directory: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- Application routes → Manufacturer directory: routes to (evidence: `bom-manager/frontend/src/App.tsx`)
- BOM upload → API client: submits request (evidence: `bom-manager/frontend/src/pages/BOMUploadPage.tsx`)
- BOM results → API client: fetches results (evidence: `bom-manager/frontend/src/pages/BOMResultsPage.tsx`)
- Portfolio dashboard → API client: fetches metrics (evidence: `bom-manager/frontend/src/pages/DashboardPage.tsx`)
- Alerts → API client: fetches alerts (evidence: `bom-manager/frontend/src/pages/AlertsPage.tsx`)
- API client → FastAPI application: HTTP requests (evidence: `bom-manager/frontend/src/api/client.ts`)
- FastAPI application → API router: mounts routes (evidence: `bom-manager/backend/app/main.py`)
- API router → Authentication: registers route (evidence: `bom-manager/backend/app/api/v1/api.py`)
- API router → BOM endpoints: registers route (evidence: `bom-manager/backend/app/api/v1/api.py`)
- BOM endpoints → BOM parser: may invoke
- BOM parser → BOM processing: may feed
- BOM processing → BOM normalization: may use
- BOM processing → Part matching: may use
- Part matching → Catalog and domain records: queries
- Risk assessment → Catalog and domain records: reads records (evidence: `bom-manager/backend/app/services/risk_engine.py`)
- Candidate matching → Catalog and domain records: queries candidates (evidence: `bom-manager/backend/app/services/replacement_engine.py`)
- AI replacement analysis → Candidate matching: gets candidates (evidence: `bom-manager/backend/app/services/ai/replacement_service.py`)
- AI replacement analysis → AI provider: requests analysis (evidence: `bom-manager/backend/app/services/ai/replacement_service.py`)
- AI replacement analysis → Analysis prompts: builds prompt (evidence: `bom-manager/backend/app/services/ai/replacement_service.py`)
- AI replacement analysis → Catalog and domain records: persists analysis (evidence: `bom-manager/backend/app/services/ai/replacement_service.py`)
- Engineer review → API client: submits decision (evidence: `bom-manager/frontend/src/components/AIReviewModal.tsx`)
- Database sessions → Catalog and domain records: provides ORM base (evidence: `bom-manager/backend/app/models/models.py`)
