# laakmus/planning architecture

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

## Overview

Planning is an internal transport-order planning and warehouse-reporting web application. The principal workflow is planner authentication, order-list browsing, opening and editing an order (including route stops), then saving changes or changing status; users can also generate order PDFs and prepare email drafts. Separate branches cover weekly warehouse operations and reports, administration, and ERP dictionary synchronization. The README documents these capabilities; sampled source confirms selected client/API, authentication, order-update, and PDF behavior, but not every route-to-service connection.

Main entry points: [`src/lib/api-client.ts`](https://github.com/laakmus/planning/blob/main/src/lib/api-client.ts) (HTTP client), [`src/hooks/useOrderDrawer.ts`](https://github.com/laakmus/planning/blob/main/src/hooks/useOrderDrawer.ts) (Order editor), [`src/components/orders/OrdersPage.tsx`](https://github.com/laakmus/planning/blob/main/src/components/orders/OrdersPage.tsx) (Order list), [`src/hooks/useOrderActions.ts`](https://github.com/laakmus/planning/blob/main/src/hooks/useOrderActions.ts) (Order actions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_orders["Order planning"]
  node_orders_ui["Orders workspace<br/>[OrdersApp.tsx]"]
  node_orders_page["Order list<br/>[OrdersPage.tsx]"]
  node_order_actions["Order actions<br/>[useOrderActions.ts]"]
  node_order_drawer["Order editor<br/>[useOrderDrawer.ts]"]
  node_route_editor["Route editor<br/>[RouteSection.tsx]"]
  node_order_history["Order history<br/>[HistoryPanel.tsx]"]
  node_order_pdf["Order PDF"]
end

subgraph group_warehouse["Warehouse reporting"]
  node_warehouse_ui["Warehouse workspace<br/>[WarehouseApp.tsx]"]
  node_warehouse_week["Weekly operations"]
  node_warehouse_report["Report actions<br/>[ReportActions.tsx]"]
  node_warehouse_pdf["Warehouse PDF"]
end

subgraph group_identity["Identity and admin"]
  node_login_ui["Login<br/>[LoginCard.tsx]"]
  node_auth_context["Auth context<br/>[AuthContext.tsx]"]
  node_admin_ui["User administration<br/>[AdminUsersApp.tsx]"]
  node_admin_api["Admin API<br/>[index.ts]"]
end

subgraph group_integrations["Integrations"]
  node_dictionary_sync["Dictionary sync"]
  node_dictionary_api["Dictionary API<br/>[run.ts]"]
end

subgraph group_backend["API and services"]
  node_api_client["HTTP client<br/>[api-client.ts]"]
  node_orders_api["Orders API<br/>[index.ts]"]
  node_order_detail_api["Order detail API<br/>[index.ts]"]
  node_warehouse_api["Warehouse API<br/>[orders.ts]"]
  node_auth_api["Auth API<br/>[me.ts]"]
  node_auth_service["Auth service<br/>[auth.service.ts]"]
  node_order_update["Order update service"]
  node_warehouse_service["Warehouse service"]
  node_supabase[("PostgreSQL / Supabase<br/>[supabase.client.ts]")]
  node_email_prepare["Email preparation<br/>[prepare-email.ts]"]
end

node_planner(("Planner"))
node_erp{{"Company ERP"}}
node_ms_graph{{"Microsoft Graph"}}

node_planner -->|"signs in"| node_login_ui
node_planner -->|"plans orders"| node_orders_ui
node_orders_ui -->|"shows list"| node_orders_page
node_orders_page -->|"dispatches actions"| node_order_actions
node_orders_page -->|"opens order"| node_order_drawer
node_order_drawer -->|"edits stops"| node_route_editor
node_order_actions -->|"sends requests"| node_api_client
node_order_drawer -->|"loads and saves"| node_api_client
node_api_client -->|"requests list"| node_orders_api
node_api_client -->|"requests detail"| node_order_detail_api
node_order_detail_api -->|"updates order"| node_order_update
node_order_update -->|"reads and writes"| node_supabase
node_order_actions -->|"opens history"| node_order_history
node_order_drawer -->|"requests PDF"| node_order_pdf
node_order_drawer -->|"prepares email"| node_email_prepare
node_planner -->|"reviews operations"| node_warehouse_ui
node_warehouse_ui -->|"loads week"| node_warehouse_week
node_warehouse_ui -->|"requests report"| node_warehouse_report
node_warehouse_week -->|"fetches operations"| node_api_client
node_api_client -->|"requests week"| node_warehouse_api
node_warehouse_api -->|"serves operations"| node_warehouse_service
node_warehouse_service -->|"reads data"| node_supabase
node_warehouse_report -->|"generates report"| node_warehouse_pdf
node_login_ui -->|"submits credentials"| node_api_client
node_auth_context -->|"checks session"| node_api_client
node_api_client -->|"requests identity"| node_auth_api
node_auth_api -->|"gets current user"| node_auth_service
node_auth_service -->|"checks session and profile"| node_supabase
node_planner -->|"manages users"| node_admin_ui
node_admin_ui -->|"sends requests"| node_admin_api
node_dictionary_sync -->|"starts sync"| node_api_client
node_api_client -->|"starts job"| node_dictionary_api
node_dictionary_api -.->|"synchronizes dictionaries"| node_erp
node_email_prepare -.->|"uses Graph option"| node_ms_graph

click node_orders_ui "https://github.com/laakmus/planning/blob/main/src/components/orders/OrdersApp.tsx"
click node_orders_page "https://github.com/laakmus/planning/blob/main/src/components/orders/OrdersPage.tsx"
click node_order_actions "https://github.com/laakmus/planning/blob/main/src/hooks/useOrderActions.ts"
click node_order_drawer "https://github.com/laakmus/planning/blob/main/src/hooks/useOrderDrawer.ts"
click node_route_editor "https://github.com/laakmus/planning/blob/main/src/components/orders/drawer/RouteSection.tsx"
click node_order_history "https://github.com/laakmus/planning/blob/main/src/components/orders/history/HistoryPanel.tsx"
click node_order_pdf "https://github.com/laakmus/planning/blob/main/src/lib/services/pdf/pdf-generator.service.ts"
click node_warehouse_ui "https://github.com/laakmus/planning/blob/main/src/components/warehouse/WarehouseApp.tsx"
click node_warehouse_week "https://github.com/laakmus/planning/blob/main/src/hooks/useWarehouseWeek.ts"
click node_warehouse_report "https://github.com/laakmus/planning/blob/main/src/components/warehouse/ReportActions.tsx"
click node_warehouse_pdf "https://github.com/laakmus/planning/blob/main/src/lib/services/pdf/warehouse-pdf-generator.service.ts"
click node_login_ui "https://github.com/laakmus/planning/blob/main/src/components/auth/LoginCard.tsx"
click node_auth_context "https://github.com/laakmus/planning/blob/main/src/contexts/AuthContext.tsx"
click node_admin_ui "https://github.com/laakmus/planning/blob/main/src/components/admin/AdminUsersApp.tsx"
click node_admin_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/admin/users/index.ts"
click node_dictionary_sync "https://github.com/laakmus/planning/blob/main/src/hooks/useDictionarySync.ts"
click node_dictionary_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/dictionary-sync/run.ts"
click node_api_client "https://github.com/laakmus/planning/blob/main/src/lib/api-client.ts"
click node_orders_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/index.ts"
click node_order_detail_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/%5BorderId%5D/index.ts"
click node_warehouse_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/warehouse/orders.ts"
click node_auth_api "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/auth/me.ts"
click node_auth_service "https://github.com/laakmus/planning/blob/main/src/lib/services/auth.service.ts"
click node_order_update "https://github.com/laakmus/planning/blob/main/src/lib/services/order-update.service.ts"
click node_warehouse_service "https://github.com/laakmus/planning/blob/main/src/lib/services/warehouse.service.ts"
click node_supabase "https://github.com/laakmus/planning/blob/main/src/db/supabase.client.ts"
click node_email_prepare "https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/%5BorderId%5D/prepare-email.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_orders_ui,node_orders_page,node_order_actions,node_order_drawer,node_route_editor,node_order_history,node_order_pdf toneBlue
class node_warehouse_ui,node_warehouse_week,node_warehouse_report,node_warehouse_pdf toneAmber
class node_login_ui,node_auth_context,node_admin_ui,node_admin_api toneMint
class node_dictionary_sync,node_dictionary_api toneRose
class node_api_client,node_orders_api,node_order_detail_api,node_warehouse_api,node_auth_api,node_auth_service,node_order_update,node_warehouse_service,node_supabase,node_email_prepare,node_planner,node_erp,node_ms_graph toneIndigo
```

## Components

### Order planning

- [Orders workspace](https://github.com/laakmus/planning/blob/main/src/components/orders/OrdersApp.tsx): `src/components/orders/OrdersApp.tsx`
- [Order list](https://github.com/laakmus/planning/blob/main/src/components/orders/OrdersPage.tsx): `src/components/orders/OrdersPage.tsx`
- [Order actions](https://github.com/laakmus/planning/blob/main/src/hooks/useOrderActions.ts): `src/hooks/useOrderActions.ts`
- [Order editor](https://github.com/laakmus/planning/blob/main/src/hooks/useOrderDrawer.ts): `src/hooks/useOrderDrawer.ts`
- [Route editor](https://github.com/laakmus/planning/blob/main/src/components/orders/drawer/RouteSection.tsx): `src/components/orders/drawer/RouteSection.tsx`
- [Order history](https://github.com/laakmus/planning/blob/main/src/components/orders/history/HistoryPanel.tsx): `src/components/orders/history/HistoryPanel.tsx`
- [Order PDF](https://github.com/laakmus/planning/blob/main/src/lib/services/pdf/pdf-generator.service.ts): `src/lib/services/pdf/pdf-generator.service.ts`

### Warehouse reporting

- [Warehouse workspace](https://github.com/laakmus/planning/blob/main/src/components/warehouse/WarehouseApp.tsx): `src/components/warehouse/WarehouseApp.tsx`
- [Weekly operations](https://github.com/laakmus/planning/blob/main/src/hooks/useWarehouseWeek.ts): `src/hooks/useWarehouseWeek.ts`
- [Report actions](https://github.com/laakmus/planning/blob/main/src/components/warehouse/ReportActions.tsx): `src/components/warehouse/ReportActions.tsx`
- [Warehouse PDF](https://github.com/laakmus/planning/blob/main/src/lib/services/pdf/warehouse-pdf-generator.service.ts): `src/lib/services/pdf/warehouse-pdf-generator.service.ts`

### Identity and admin

- [Login](https://github.com/laakmus/planning/blob/main/src/components/auth/LoginCard.tsx): `src/components/auth/LoginCard.tsx`
- [Auth context](https://github.com/laakmus/planning/blob/main/src/contexts/AuthContext.tsx): `src/contexts/AuthContext.tsx`
- [User administration](https://github.com/laakmus/planning/blob/main/src/components/admin/AdminUsersApp.tsx): `src/components/admin/AdminUsersApp.tsx`
- [Admin API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/admin/users/index.ts): `src/pages/api/v1/admin/users/index.ts`

### Integrations

- [Dictionary sync](https://github.com/laakmus/planning/blob/main/src/hooks/useDictionarySync.ts): `src/hooks/useDictionarySync.ts`
- [Dictionary API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/dictionary-sync/run.ts): `src/pages/api/v1/dictionary-sync/run.ts`

### API and services

- [HTTP client](https://github.com/laakmus/planning/blob/main/src/lib/api-client.ts): `src/lib/api-client.ts`
- [Orders API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/index.ts): `src/pages/api/v1/orders/index.ts`
- [Order detail API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/%5BorderId%5D/index.ts): `src/pages/api/v1/orders/[orderId]/index.ts`
- [Warehouse API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/warehouse/orders.ts): `src/pages/api/v1/warehouse/orders.ts`
- [Auth API](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/auth/me.ts): `src/pages/api/v1/auth/me.ts`
- [Auth service](https://github.com/laakmus/planning/blob/main/src/lib/services/auth.service.ts): `src/lib/services/auth.service.ts`
- [Order update service](https://github.com/laakmus/planning/blob/main/src/lib/services/order-update.service.ts): `src/lib/services/order-update.service.ts`
- [Warehouse service](https://github.com/laakmus/planning/blob/main/src/lib/services/warehouse.service.ts): `src/lib/services/warehouse.service.ts`
- [PostgreSQL / Supabase](https://github.com/laakmus/planning/blob/main/src/db/supabase.client.ts): `src/db/supabase.client.ts`
- [Email preparation](https://github.com/laakmus/planning/blob/main/src/pages/api/v1/orders/%5BorderId%5D/prepare-email.ts): `src/pages/api/v1/orders/[orderId]/prepare-email.ts`

### Other components

- **Planner**
- **Company ERP**
- **Microsoft Graph**

## Connections

- Planner → Login: signs in
- Planner → Orders workspace: plans orders
- Orders workspace → Order list: shows list
- Order list → Order actions: dispatches actions
- Order list → Order editor: opens order
- Order editor → Route editor: edits stops
- Order actions → HTTP client: sends requests
- Order editor → HTTP client: loads and saves
- HTTP client → Orders API: requests list
- HTTP client → Order detail API: requests detail
- Order detail API → Order update service: updates order
- Order update service → PostgreSQL / Supabase: reads and writes
- Order actions → Order history: opens history
- Order editor → Order PDF: requests PDF
- Order editor → Email preparation: prepares email
- Planner → Warehouse workspace: reviews operations
- Warehouse workspace → Weekly operations: loads week
- Warehouse workspace → Report actions: requests report
- Weekly operations → HTTP client: fetches operations
- HTTP client → Warehouse API: requests week
- Warehouse API → Warehouse service: serves operations
- Warehouse service → PostgreSQL / Supabase: reads data
- Report actions → Warehouse PDF: generates report
- Login → HTTP client: submits credentials
- Auth context → HTTP client: checks session
- HTTP client → Auth API: requests identity
- Auth API → Auth service: gets current user
- Auth service → PostgreSQL / Supabase: checks session and profile
- Planner → User administration: manages users
- User administration → Admin API: sends requests
- Dictionary sync → HTTP client: starts sync
- HTTP client → Dictionary API: starts job
- Dictionary API → Company ERP: synchronizes dictionaries
- Email preparation → Microsoft Graph: uses Graph option
