# hoangnhatlongg/store_mannger architecture

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

- Interactive diagram: https://gitdiagram.com/hoangnhatlongg/store_mannger
- Repository: https://github.com/hoangnhatlongg/store_mannger

## Overview

Store Manager is a grocery-store operations app. Staff manage reference data, capture supplier invoices with OCR, register sales, and review stock and revenue. The central workflows are invoice image → OCR extraction → invoice entry/stock update, and POS sale → sale record/stock update → analytics. README documents broader catalog, customer, settings, and audit capabilities; their detailed wiring is not visible in the sampled source. Page-to-API links below reflect the documented product workflows and route responsibilities, not inspected page implementations.

Main entry points: [`src/lib/prisma.ts`](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/prisma.ts) (Prisma client), [`src/app/api/ocr/process/route.ts`](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/ocr/process/route.ts) (OCR processing), [`src/lib/auth.ts`](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/auth.ts) (Session configuration), [`src/app/products/page.tsx`](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/products/page.tsx) (Catalog management)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["Store interface"]
  node_imports_ui["Invoice entry<br/>[page.tsx]"]
  node_ocr_ui["OCR workspace<br/>[page.tsx]"]
  node_sales_ui["POS sales<br/>[page.tsx]"]
  node_inventory_ui["Inventory view<br/>[page.tsx]"]
  node_revenue_ui["Revenue view<br/>[page.tsx]"]
  node_dashboard_ui["Dashboard<br/>[page.tsx]"]
  node_catalog_ui["Catalog management<br/>[page.tsx]"]
  node_master_ui["Store reference data<br/>[page.tsx]"]
end

subgraph group_operations["Store operations"]
  node_ocr_api["OCR processing<br/>[route.ts]"]
  node_import_api["Import invoices<br/>[route.ts]"]
  node_import_detail_api["Import adjustments<br/>[route.ts]"]
  node_sales_api["Sales invoices<br/>[route.ts]"]
  node_products_api["Product catalog<br/>[route.ts]"]
  node_categories_api["Categories<br/>[route.ts]"]
  node_suppliers_api["Suppliers<br/>[route.ts]"]
  node_units_api["Units<br/>[route.ts]"]
  node_product_units_api["Product units<br/>[route.ts]"]
end

subgraph group_insights["Reporting"]
  node_analytics_api["Revenue analytics<br/>[route.ts]"]
  node_daily_api["Daily sales detail<br/>[route.ts]"]
  node_dashboard_api["Dashboard metrics<br/>[route.ts]"]
end

subgraph group_platform["Identity and data"]
  node_auth_api["Authentication routes<br/>[route.ts]"]
  node_auth_lib["Session configuration<br/>[auth.ts]"]
  node_prisma_lib["Prisma client<br/>[prisma.ts]"]
end

node_staff(("Store staff"))
node_openrouter{{"OpenRouter models"}}
node_postgres[("PostgreSQL")]

node_staff -->|"enters invoice"| node_imports_ui
node_staff -->|"scans receipt"| node_ocr_ui
node_staff -->|"records sale"| node_sales_ui
node_staff -->|"reviews stock"| node_inventory_ui
node_staff -->|"reviews revenue"| node_revenue_ui
node_staff -->|"checks overview"| node_dashboard_ui
node_staff -->|"manages products"| node_catalog_ui
node_staff -->|"manages suppliers"| node_master_ui
node_ocr_ui -->|"submits image"| node_ocr_api
node_ocr_api -.->|"requests extraction"| node_openrouter
node_openrouter -.->|"returns JSON"| node_ocr_api
node_ocr_api -->|"returns items"| node_imports_ui
node_imports_ui -->|"submits invoice"| node_import_api
node_import_api -->|"creates invoice"| node_prisma_lib
node_import_api -->|"updates stock"| node_prisma_lib
node_imports_ui -->|"edits invoice"| node_import_detail_api
node_import_detail_api -->|"reads and revises"| node_prisma_lib
node_sales_ui -->|"submits sale"| node_sales_api
node_sales_api -->|"checks stock"| node_prisma_lib
node_sales_api -->|"records sale"| node_prisma_lib
node_catalog_ui -->|"manages products"| node_products_api
node_catalog_ui -->|"manages categories"| node_categories_api
node_master_ui -->|"manages suppliers"| node_suppliers_api
node_master_ui -->|"manages units"| node_units_api
node_catalog_ui -->|"manages product units"| node_product_units_api
node_products_api -->|"reads and writes"| node_prisma_lib
node_categories_api -->|"reads and writes"| node_prisma_lib
node_suppliers_api -->|"reads and writes"| node_prisma_lib
node_units_api -->|"reads and writes"| node_prisma_lib
node_product_units_api -->|"reads and writes"| node_prisma_lib
node_revenue_ui -->|"requests trends"| node_analytics_api
node_revenue_ui -->|"requests daily detail"| node_daily_api
node_dashboard_ui -->|"requests metrics"| node_dashboard_api
node_analytics_api -->|"queries sales"| node_prisma_lib
node_daily_api -->|"queries sales"| node_prisma_lib
node_dashboard_api -->|"queries metrics"| node_prisma_lib
node_auth_api -->|"uses options"| node_auth_lib
node_import_api -->|"checks session"| node_auth_lib
node_sales_api -->|"checks session"| node_auth_lib
node_products_api -->|"checks session"| node_auth_lib
node_ocr_api -->|"checks session"| node_auth_lib
node_prisma_lib -->|"queries and persists"| node_postgres

click node_imports_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/import/page.tsx"
click node_ocr_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/ai-ocr/page.tsx"
click node_sales_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/sales/page.tsx"
click node_inventory_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/inventory/page.tsx"
click node_revenue_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/revenue/page.tsx"
click node_dashboard_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/page.tsx"
click node_catalog_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/products/page.tsx"
click node_master_ui "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/suppliers/page.tsx"
click node_ocr_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/ocr/process/route.ts"
click node_import_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/imports/route.ts"
click node_import_detail_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/imports/%5Bid%5D/route.ts"
click node_sales_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/sales/route.ts"
click node_products_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/products/route.ts"
click node_categories_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/categories/route.ts"
click node_suppliers_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/suppliers/route.ts"
click node_units_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/units/route.ts"
click node_product_units_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/product-units/route.ts"
click node_analytics_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/revenue/route.ts"
click node_daily_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/revenue-daily/route.ts"
click node_dashboard_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/dashboard/route.ts"
click node_auth_api "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts"
click node_auth_lib "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/auth.ts"
click node_prisma_lib "https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/prisma.ts"

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_imports_ui,node_ocr_ui,node_sales_ui,node_inventory_ui,node_revenue_ui,node_dashboard_ui,node_catalog_ui,node_master_ui toneBlue
class node_ocr_api,node_import_api,node_import_detail_api,node_sales_api,node_products_api,node_categories_api,node_suppliers_api,node_units_api,node_product_units_api,node_postgres toneAmber
class node_analytics_api,node_daily_api,node_dashboard_api,node_openrouter toneMint
class node_auth_api,node_auth_lib,node_prisma_lib toneRose
class node_staff toneIndigo
```

## Components

### Store interface

- [Invoice entry](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/import/page.tsx): `src/app/import/page.tsx`
- [OCR workspace](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/ai-ocr/page.tsx): `src/app/ai-ocr/page.tsx`
- [POS sales](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/sales/page.tsx): `src/app/sales/page.tsx`
- [Inventory view](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/inventory/page.tsx): `src/app/inventory/page.tsx`
- [Revenue view](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/revenue/page.tsx): `src/app/revenue/page.tsx`
- [Dashboard](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/page.tsx): `src/app/page.tsx`
- [Catalog management](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/products/page.tsx): `src/app/products/page.tsx`
- [Store reference data](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/suppliers/page.tsx): `src/app/suppliers/page.tsx`

### Store operations

- [OCR processing](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/ocr/process/route.ts): `src/app/api/ocr/process/route.ts`
- [Import invoices](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/imports/route.ts): `src/app/api/imports/route.ts`
- [Import adjustments](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/imports/%5Bid%5D/route.ts): `src/app/api/imports/[id]/route.ts`
- [Sales invoices](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/sales/route.ts): `src/app/api/sales/route.ts`
- [Product catalog](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/products/route.ts): `src/app/api/products/route.ts`
- [Categories](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/categories/route.ts): `src/app/api/categories/route.ts`
- [Suppliers](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/suppliers/route.ts): `src/app/api/suppliers/route.ts`
- [Units](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/units/route.ts): `src/app/api/units/route.ts`
- [Product units](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/product-units/route.ts): `src/app/api/product-units/route.ts`

### Reporting

- [Revenue analytics](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/revenue/route.ts): `src/app/api/analytics/revenue/route.ts`
- [Daily sales detail](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/revenue-daily/route.ts): `src/app/api/analytics/revenue-daily/route.ts`
- [Dashboard metrics](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/analytics/dashboard/route.ts): `src/app/api/analytics/dashboard/route.ts`

### Identity and data

- [Authentication routes](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/app/api/auth/%5B...nextauth%5D/route.ts): `src/app/api/auth/[...nextauth]/route.ts`
- [Session configuration](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/auth.ts): `src/lib/auth.ts`
- [Prisma client](https://github.com/hoangnhatlongg/store_mannger/blob/main/src/lib/prisma.ts): `src/lib/prisma.ts`

### Other components

- **Store staff**
- **OpenRouter models**
- **PostgreSQL**

## Connections

- Store staff → Invoice entry: enters invoice
- Store staff → OCR workspace: scans receipt
- Store staff → POS sales: records sale
- Store staff → Inventory view: reviews stock
- Store staff → Revenue view: reviews revenue
- Store staff → Dashboard: checks overview
- Store staff → Catalog management: manages products
- Store staff → Store reference data: manages suppliers
- OCR workspace → OCR processing: submits image
- OCR processing → OpenRouter models: requests extraction
- OpenRouter models → OCR processing: returns JSON
- OCR processing → Invoice entry: returns items
- Invoice entry → Import invoices: submits invoice
- Import invoices → Prisma client: creates invoice
- Import invoices → Prisma client: updates stock
- Invoice entry → Import adjustments: edits invoice
- Import adjustments → Prisma client: reads and revises
- POS sales → Sales invoices: submits sale
- Sales invoices → Prisma client: checks stock
- Sales invoices → Prisma client: records sale
- Catalog management → Product catalog: manages products
- Catalog management → Categories: manages categories
- Store reference data → Suppliers: manages suppliers
- Store reference data → Units: manages units
- Catalog management → Product units: manages product units
- Product catalog → Prisma client: reads and writes
- Categories → Prisma client: reads and writes
- Suppliers → Prisma client: reads and writes
- Units → Prisma client: reads and writes
- Product units → Prisma client: reads and writes
- Revenue view → Revenue analytics: requests trends
- Revenue view → Daily sales detail: requests daily detail
- Dashboard → Dashboard metrics: requests metrics
- Revenue analytics → Prisma client: queries sales
- Daily sales detail → Prisma client: queries sales
- Dashboard metrics → Prisma client: queries metrics
- Authentication routes → Session configuration: uses options
- Import invoices → Session configuration: checks session
- Sales invoices → Session configuration: checks session
- Product catalog → Session configuration: checks session
- OCR processing → Session configuration: checks session
- Prisma client → PostgreSQL: queries and persists
