# daiki0918/assets-inventory architecture

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

- Interactive diagram: https://gitdiagram.com/daiki0918/assets-inventory
- Repository: https://github.com/daiki0918/assets-inventory

## Overview

Cosmopolitan Asset Register is a web application for tracking physical assets across branches. Staff sign in, register or import individually tracked assets, manage operational workflows, and review reports; QR scanning supports monthly physical inventory. The React client routes users to these workflows and calls the Express service, which uses MongoDB models for persistent records. The README also documents quantity-based registration/import and email password recovery. Server internals were not excerpted, so service-to-model wiring is supported by the source index, while client-to-server routing is documented only at a high level.

Main entry points: [`client/src/App.jsx`](https://github.com/daiki0918/assets-inventory/blob/main/client/src/App.jsx) (Route shell), [`client/src/lib/api.js`](https://github.com/daiki0918/assets-inventory/blob/main/client/src/lib/api.js) (API client), [`client/src/pages/Assets.jsx`](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Assets.jsx) (Asset register), [`client/src/pages/Login.jsx`](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Login.jsx) (Sign-in)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client application"]
  node_app["Route shell<br/>[App.jsx]"]
  node_login["Sign-in<br/>[Login.jsx]"]
  node_auth["Auth context<br/>[AuthContext.jsx]"]
  node_api["API client<br/>[api.js]"]
end

subgraph group_operations["Asset operations"]
  node_assets["Asset register<br/>[Assets.jsx]"]
  node_assetform["Asset form<br/>[AssetModal.jsx]"]
  node_import["Excel import<br/>[ImportModal.jsx]"]
  node_inventory["Physical inventory<br/>[Inventory.jsx]"]
  node_qr["QR labels<br/>[QrLabelsModal.jsx]"]
  node_transfers["Transfers<br/>[Transfers.jsx]"]
  node_maintenance["Maintenance<br/>[Maintenance.jsx]"]
  node_alerts["Alerts<br/>[Alerts.jsx]"]
end

subgraph group_oversight["Administration and insight"]
  node_dashboard["Dashboard<br/>[Dashboard.jsx]"]
  node_reports["Reports<br/>[Reports.jsx]"]
  node_audit["Audit history<br/>[Audit.jsx]"]
  node_admin["Branch and user admin<br/>[Branches.jsx]"]
  node_profile["Asset profile<br/>[Profile.jsx]"]
end

subgraph group_backend["API and persistence"]
  node_service["API service<br/>[server.js]"]
  node_models["Domain models<br/>[models.js]"]
  node_database[("MongoDB")]
end

node_user(("Staff user"))

node_user -->|"uses"| node_app
node_app -->|"routes"| node_login
node_app -->|"routes"| node_assets
node_app -->|"routes"| node_inventory
node_app -->|"routes"| node_transfers
node_app -->|"routes"| node_maintenance
node_app -->|"routes"| node_alerts
node_app -->|"routes"| node_dashboard
node_app -->|"routes"| node_reports
node_app -->|"routes"| node_audit
node_app -->|"routes"| node_admin
node_app -->|"routes"| node_profile
node_login -->|"requests"| node_api
node_app -->|"loads metadata"| node_api
node_app -->|"provides session"| node_auth
node_assets -->|"loads and exports"| node_api
node_assets -->|"opens form"| node_assetform
node_assetform -->|"saves asset"| node_api
node_assets -->|"opens import"| node_import
node_import -->|"submits rows"| node_api
node_inventory -->|"manages sessions"| node_api
node_assets -->|"opens labels"| node_qr
node_transfers -->|"requests operations"| node_api
node_maintenance -->|"requests operations"| node_api
node_alerts -->|"loads alerts"| node_api
node_dashboard -->|"loads metrics"| node_api
node_reports -->|"loads reports"| node_api
node_audit -->|"loads history"| node_api
node_admin -->|"manages records"| node_api
node_profile -->|"loads asset"| node_api
node_api -.->|"HTTP requests"| node_service
node_service -->|"uses models"| node_models
node_models -.->|"persists records"| node_database

click node_app "https://github.com/daiki0918/assets-inventory/blob/main/client/src/App.jsx"
click node_login "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Login.jsx"
click node_auth "https://github.com/daiki0918/assets-inventory/blob/main/client/src/context/AuthContext.jsx"
click node_api "https://github.com/daiki0918/assets-inventory/blob/main/client/src/lib/api.js"
click node_assets "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Assets.jsx"
click node_assetform "https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/AssetModal.jsx"
click node_import "https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/ImportModal.jsx"
click node_inventory "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Inventory.jsx"
click node_qr "https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/QrLabelsModal.jsx"
click node_transfers "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Transfers.jsx"
click node_maintenance "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Maintenance.jsx"
click node_alerts "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Alerts.jsx"
click node_dashboard "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Dashboard.jsx"
click node_reports "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Reports.jsx"
click node_audit "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Audit.jsx"
click node_admin "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Branches.jsx"
click node_profile "https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Profile.jsx"
click node_service "https://github.com/daiki0918/assets-inventory/blob/main/server/server.js"
click node_models "https://github.com/daiki0918/assets-inventory/blob/main/server/models.js"

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_login,node_auth,node_api,node_user toneBlue
class node_assets,node_assetform,node_import,node_inventory,node_qr,node_transfers,node_maintenance,node_alerts toneAmber
class node_dashboard,node_reports,node_audit,node_admin,node_profile toneMint
class node_service,node_models,node_database toneRose
```

## Components

### Client application

- [Route shell](https://github.com/daiki0918/assets-inventory/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Sign-in](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Login.jsx): `client/src/pages/Login.jsx`
- [Auth context](https://github.com/daiki0918/assets-inventory/blob/main/client/src/context/AuthContext.jsx): `client/src/context/AuthContext.jsx`
- [API client](https://github.com/daiki0918/assets-inventory/blob/main/client/src/lib/api.js): `client/src/lib/api.js`

### Asset operations

- [Asset register](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Assets.jsx): `client/src/pages/Assets.jsx`
- [Asset form](https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/AssetModal.jsx): `client/src/components/AssetModal.jsx`
- [Excel import](https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/ImportModal.jsx): `client/src/components/ImportModal.jsx`
- [Physical inventory](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Inventory.jsx): `client/src/pages/Inventory.jsx`
- [QR labels](https://github.com/daiki0918/assets-inventory/blob/main/client/src/components/QrLabelsModal.jsx): `client/src/components/QrLabelsModal.jsx`
- [Transfers](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Transfers.jsx): `client/src/pages/Transfers.jsx`
- [Maintenance](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Maintenance.jsx): `client/src/pages/Maintenance.jsx`
- [Alerts](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Alerts.jsx): `client/src/pages/Alerts.jsx`

### Administration and insight

- [Dashboard](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Dashboard.jsx): `client/src/pages/Dashboard.jsx`
- [Reports](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Reports.jsx): `client/src/pages/Reports.jsx`
- [Audit history](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Audit.jsx): `client/src/pages/Audit.jsx`
- [Branch and user admin](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Branches.jsx): `client/src/pages/Branches.jsx`
- [Asset profile](https://github.com/daiki0918/assets-inventory/blob/main/client/src/pages/Profile.jsx): `client/src/pages/Profile.jsx`

### API and persistence

- [API service](https://github.com/daiki0918/assets-inventory/blob/main/server/server.js): `server/server.js`
- [Domain models](https://github.com/daiki0918/assets-inventory/blob/main/server/models.js): `server/models.js`
- **MongoDB**

### Other components

- **Staff user**

## Connections

- Staff user → Route shell: uses (evidence: `client/src/App.jsx`)
- Route shell → Sign-in: routes (evidence: `client/src/App.jsx`)
- Route shell → Asset register: routes (evidence: `client/src/App.jsx`)
- Route shell → Physical inventory: routes (evidence: `client/src/App.jsx`)
- Route shell → Transfers: routes (evidence: `client/src/App.jsx`)
- Route shell → Maintenance: routes (evidence: `client/src/App.jsx`)
- Route shell → Alerts: routes (evidence: `client/src/App.jsx`)
- Route shell → Dashboard: routes (evidence: `client/src/App.jsx`)
- Route shell → Reports: routes (evidence: `client/src/App.jsx`)
- Route shell → Audit history: routes (evidence: `client/src/App.jsx`)
- Route shell → Branch and user admin: routes (evidence: `client/src/App.jsx`)
- Route shell → Asset profile: routes (evidence: `client/src/App.jsx`)
- Sign-in → API client: requests (evidence: `client/src/pages/Login.jsx`)
- Route shell → API client: loads metadata (evidence: `client/src/App.jsx`)
- Route shell → Auth context: provides session (evidence: `client/src/App.jsx`)
- Asset register → API client: loads and exports (evidence: `client/src/pages/Assets.jsx`)
- Asset register → Asset form: opens form (evidence: `client/src/pages/Assets.jsx`)
- Asset form → API client: saves asset (evidence: `client/src/components/AssetModal.jsx`)
- Asset register → Excel import: opens import (evidence: `client/src/pages/Assets.jsx`)
- Excel import → API client: submits rows (evidence: `client/src/components/ImportModal.jsx`)
- Physical inventory → API client: manages sessions (evidence: `client/src/pages/Inventory.jsx`)
- Asset register → QR labels: opens labels (evidence: `client/src/pages/Assets.jsx`)
- Transfers → API client: requests operations (evidence: `client/src/pages/Transfers.jsx`)
- Maintenance → API client: requests operations (evidence: `client/src/pages/Maintenance.jsx`)
- Alerts → API client: loads alerts (evidence: `client/src/pages/Alerts.jsx`)
- Dashboard → API client: loads metrics (evidence: `client/src/pages/Dashboard.jsx`)
- Reports → API client: loads reports (evidence: `client/src/pages/Reports.jsx`)
- Audit history → API client: loads history (evidence: `client/src/pages/Audit.jsx`)
- Branch and user admin → API client: manages records (evidence: `client/src/pages/Branches.jsx`)
- Asset profile → API client: loads asset (evidence: `client/src/pages/Profile.jsx`)
- API client → API service: HTTP requests
- API service → Domain models: uses models (evidence: `server/server.js`)
- Domain models → MongoDB: persists records
