# lordverton/danemo-website architecture

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

- Interactive diagram: https://gitdiagram.com/lordverton/danemo-website
- Repository: https://github.com/lordverton/danemo-website

## Overview

DANEMO is a logistics operations and customer-service platform for freight and related services connecting Europe and Africa. Its principal customer workflow is public shipment registration: the customer submits shipment and tariff details, the API creates customer and order records, and a confirmation email is sent. Staff then manage orders, containers, inventory, and tracking through admin tools, while customers can check shipment status. The graph also includes the documented blog, analytics, and public-service branches. Several route implementations were not sampled, so their internal wiring is intentionally not inferred.

Main entry points: [`lib/database.ts`](https://github.com/lordverton/danemo-website/blob/main/lib/database.ts) (Database access layer), [`lib/supabase.ts`](https://github.com/lordverton/danemo-website/blob/main/lib/supabase.ts) (Supabase), [`app/api/public/self-register/route.ts`](https://github.com/lordverton/danemo-website/blob/main/app/api/public/self-register/route.ts) (Self-register API), [`app/admin/blogs/page.tsx`](https://github.com/lordverton/danemo-website/blob/main/app/admin/blogs/page.tsx) (Blog administration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_public["Public services"]
  node_registration["Shipment registration<br/>[page.tsx]"]
  node_publicapi["Self-register API<br/>[route.ts]"]
  node_tariffs["Tariff catalog<br/>[tariff-items.ts]"]
  node_publictracking["Public tracking<br/>[page.tsx]"]
end

subgraph group_operations["Shipment operations"]
  node_trackingapi["Tracking API<br/>[route.ts]"]
  node_adminorders["Order management<br/>[page.tsx]"]
  node_ordersapi["Order API<br/>[route.ts]"]
  node_orderdetail["Order updates<br/>[route.ts]"]
  node_containers["Container operations<br/>[route.ts]"]
  node_inventory["Inventory management<br/>[page.tsx]"]
  node_inventoryapi["Inventory API<br/>[route.ts]"]
  node_qr["QR scanning<br/>[qr-scanner.tsx]"]
end

subgraph group_customer["Customer management"]
  node_clients["Client management<br/>[page.tsx]"]
  node_customersapi["Customer API<br/>[route.ts]"]
end

subgraph group_content["Content and insights"]
  node_blog["Public blog<br/>[page.tsx]"]
  node_blogadmin["Blog administration<br/>[page.tsx]"]
  node_blogapi["Blog API<br/>[route.ts]"]
  node_mediaapi["Blog media upload<br/>[route.ts]"]
  node_analytics["Analytics dashboard<br/>[page.tsx]"]
end

subgraph group_platform["Shared platform"]
  node_database["Database access layer<br/>[database.ts]"]
  node_supabase[("Supabase<br/>[supabase.ts]")]
  node_email["Email notifications<br/>[notify.ts]"]
end

node_visitor(("Customer"))
node_staff(("Staff user"))
node_emailservice["Email provider"]

node_visitor -->|"enters details"| node_registration
node_registration -->|"submits shipment"| node_publicapi
node_publicapi -->|"resolves tariff"| node_tariffs
node_publicapi -->|"creates records"| node_database
node_database -->|"reads and writes"| node_supabase
node_publicapi -->|"requests confirmation"| node_email
node_email -->|"sends email"| node_emailservice
node_visitor -->|"checks shipment"| node_publictracking
node_publictracking -->|"requests status"| node_trackingapi
node_trackingapi -->|"reads tracking"| node_database
node_staff -->|"manages orders"| node_adminorders
node_adminorders -->|"requests orders"| node_ordersapi
node_staff -->|"updates order"| node_orderdetail
node_ordersapi -->|"manages orders"| node_database
node_orderdetail -->|"updates order"| node_database
node_staff -->|"manages containers"| node_containers
node_containers -->|"reads and writes"| node_supabase
node_staff -->|"manages stock"| node_inventory
node_inventory -->|"requests inventory"| node_inventoryapi
node_inventoryapi -->|"reads and writes"| node_supabase
node_staff -->|"scans package"| node_qr
node_staff -->|"manages clients"| node_clients
node_clients -->|"requests customers"| node_customersapi
node_customersapi -->|"manages customers"| node_database
node_visitor -->|"reads articles"| node_blog
node_blog -->|"loads posts"| node_blogapi
node_staff -->|"manages articles"| node_blogadmin
node_blogadmin -->|"edits posts"| node_blogapi
node_blogadmin -->|"uploads media"| node_mediaapi
node_blogapi -->|"reads and writes"| node_database
node_mediaapi -->|"stores media"| node_supabase
node_staff -->|"views metrics"| node_analytics
node_analytics -->|"loads metrics"| node_supabase

click node_registration "https://github.com/lordverton/danemo-website/blob/main/app/new-client-form/page.tsx"
click node_publicapi "https://github.com/lordverton/danemo-website/blob/main/app/api/public/self-register/route.ts"
click node_tariffs "https://github.com/lordverton/danemo-website/blob/main/lib/tariff-items.ts"
click node_publictracking "https://github.com/lordverton/danemo-website/blob/main/app/tracking/page.tsx"
click node_trackingapi "https://github.com/lordverton/danemo-website/blob/main/app/api/orders/%5Bid%5D/tracking/route.ts"
click node_adminorders "https://github.com/lordverton/danemo-website/blob/main/app/admin/tracking/page.tsx"
click node_ordersapi "https://github.com/lordverton/danemo-website/blob/main/app/api/orders/route.ts"
click node_orderdetail "https://github.com/lordverton/danemo-website/blob/main/app/api/orders/%5Bid%5D/route.ts"
click node_containers "https://github.com/lordverton/danemo-website/blob/main/app/api/containers/route.ts"
click node_inventory "https://github.com/lordverton/danemo-website/blob/main/app/admin/inventory/page.tsx"
click node_inventoryapi "https://github.com/lordverton/danemo-website/blob/main/app/api/inventory/route.ts"
click node_qr "https://github.com/lordverton/danemo-website/blob/main/components/qr-scanner.tsx"
click node_clients "https://github.com/lordverton/danemo-website/blob/main/app/admin/clients/page.tsx"
click node_customersapi "https://github.com/lordverton/danemo-website/blob/main/app/api/customers/route.ts"
click node_blog "https://github.com/lordverton/danemo-website/blob/main/app/blog/page.tsx"
click node_blogadmin "https://github.com/lordverton/danemo-website/blob/main/app/admin/blogs/page.tsx"
click node_blogapi "https://github.com/lordverton/danemo-website/blob/main/app/api/blog-posts/route.ts"
click node_mediaapi "https://github.com/lordverton/danemo-website/blob/main/app/api/blog-media/route.ts"
click node_analytics "https://github.com/lordverton/danemo-website/blob/main/app/admin/analytics/page.tsx"
click node_database "https://github.com/lordverton/danemo-website/blob/main/lib/database.ts"
click node_supabase "https://github.com/lordverton/danemo-website/blob/main/lib/supabase.ts"
click node_email "https://github.com/lordverton/danemo-website/blob/main/lib/notify.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_registration,node_publicapi,node_tariffs,node_publictracking,node_staff toneBlue
class node_trackingapi,node_adminorders,node_ordersapi,node_orderdetail,node_containers,node_inventory,node_inventoryapi,node_qr toneAmber
class node_clients,node_customersapi toneMint
class node_blog,node_blogadmin,node_blogapi,node_mediaapi,node_analytics toneRose
class node_database,node_supabase,node_email,node_visitor,node_emailservice toneIndigo
```

## Components

### Public services

- [Shipment registration](https://github.com/lordverton/danemo-website/blob/main/app/new-client-form/page.tsx): `app/new-client-form/page.tsx`
- [Self-register API](https://github.com/lordverton/danemo-website/blob/main/app/api/public/self-register/route.ts): `app/api/public/self-register/route.ts`
- [Tariff catalog](https://github.com/lordverton/danemo-website/blob/main/lib/tariff-items.ts): `lib/tariff-items.ts`
- [Public tracking](https://github.com/lordverton/danemo-website/blob/main/app/tracking/page.tsx): `app/tracking/page.tsx`

### Shipment operations

- [Tracking API](https://github.com/lordverton/danemo-website/blob/main/app/api/orders/%5Bid%5D/tracking/route.ts): `app/api/orders/[id]/tracking/route.ts`
- [Order management](https://github.com/lordverton/danemo-website/blob/main/app/admin/tracking/page.tsx): `app/admin/tracking/page.tsx`
- [Order API](https://github.com/lordverton/danemo-website/blob/main/app/api/orders/route.ts): `app/api/orders/route.ts`
- [Order updates](https://github.com/lordverton/danemo-website/blob/main/app/api/orders/%5Bid%5D/route.ts): `app/api/orders/[id]/route.ts`
- [Container operations](https://github.com/lordverton/danemo-website/blob/main/app/api/containers/route.ts): `app/api/containers/route.ts`
- [Inventory management](https://github.com/lordverton/danemo-website/blob/main/app/admin/inventory/page.tsx): `app/admin/inventory/page.tsx`
- [Inventory API](https://github.com/lordverton/danemo-website/blob/main/app/api/inventory/route.ts): `app/api/inventory/route.ts`
- [QR scanning](https://github.com/lordverton/danemo-website/blob/main/components/qr-scanner.tsx): `components/qr-scanner.tsx`

### Customer management

- [Client management](https://github.com/lordverton/danemo-website/blob/main/app/admin/clients/page.tsx): `app/admin/clients/page.tsx`
- [Customer API](https://github.com/lordverton/danemo-website/blob/main/app/api/customers/route.ts): `app/api/customers/route.ts`

### Content and insights

- [Public blog](https://github.com/lordverton/danemo-website/blob/main/app/blog/page.tsx): `app/blog/page.tsx`
- [Blog administration](https://github.com/lordverton/danemo-website/blob/main/app/admin/blogs/page.tsx): `app/admin/blogs/page.tsx`
- [Blog API](https://github.com/lordverton/danemo-website/blob/main/app/api/blog-posts/route.ts): `app/api/blog-posts/route.ts`
- [Blog media upload](https://github.com/lordverton/danemo-website/blob/main/app/api/blog-media/route.ts): `app/api/blog-media/route.ts`
- [Analytics dashboard](https://github.com/lordverton/danemo-website/blob/main/app/admin/analytics/page.tsx): `app/admin/analytics/page.tsx`

### Shared platform

- [Database access layer](https://github.com/lordverton/danemo-website/blob/main/lib/database.ts): `lib/database.ts`
- [Supabase](https://github.com/lordverton/danemo-website/blob/main/lib/supabase.ts): `lib/supabase.ts`
- [Email notifications](https://github.com/lordverton/danemo-website/blob/main/lib/notify.ts): `lib/notify.ts`

### Other components

- **Customer**
- **Staff user**
- **Email provider**

## Connections

- Customer → Shipment registration: enters details
- Shipment registration → Self-register API: submits shipment
- Self-register API → Tariff catalog: resolves tariff
- Self-register API → Database access layer: creates records
- Database access layer → Supabase: reads and writes
- Self-register API → Email notifications: requests confirmation
- Email notifications → Email provider: sends email
- Customer → Public tracking: checks shipment
- Public tracking → Tracking API: requests status
- Tracking API → Database access layer: reads tracking
- Staff user → Order management: manages orders
- Order management → Order API: requests orders
- Staff user → Order updates: updates order
- Order API → Database access layer: manages orders
- Order updates → Database access layer: updates order
- Staff user → Container operations: manages containers
- Container operations → Supabase: reads and writes
- Staff user → Inventory management: manages stock
- Inventory management → Inventory API: requests inventory
- Inventory API → Supabase: reads and writes
- Staff user → QR scanning: scans package
- Staff user → Client management: manages clients
- Client management → Customer API: requests customers
- Customer API → Database access layer: manages customers
- Customer → Public blog: reads articles
- Public blog → Blog API: loads posts
- Staff user → Blog administration: manages articles
- Blog administration → Blog API: edits posts
- Blog administration → Blog media upload: uploads media
- Blog API → Database access layer: reads and writes
- Blog media upload → Supabase: stores media
- Staff user → Analytics dashboard: views metrics
- Analytics dashboard → Supabase: loads metrics
