# sopet-co-ltd/new-sopet-admin architecture

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

- Interactive diagram: https://gitdiagram.com/sopet-co-ltd/new-sopet-admin
- Repository: https://github.com/sopet-co-ltd/new-sopet-admin

## Overview

SOPET Admin is a Next.js dashboard for platform administrators and marketplace vendors. The documented flow is a portal page calling TanStack Query hooks, which use the API service layer to send GraphQL requests through the same-origin /graphql route to the backend. Admin routes cover platform operations, taxonomy, promotions, search and analytics; vendor capabilities are documented, but vendor page files are absent from this tree. Relationships below follow the README’s data-layer description; sampled source additionally confirms the BFF’s auth refresh and cookie handling.

Main entry points: [`src/hooks`](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/hooks) (Query hooks), [`src/app/graphql/route.ts`](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/graphql/route.ts) (GraphQL BFF), [`src/app/admin`](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/app/admin) (Admin portal), [`src/lib/api`](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/lib/api) (API services)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portals["Portals"]
  node_admin["Admin portal"]
  node_vendor["Vendor portal"]
  node_auth_pages["Auth routes<br/>[page.tsx]"]
end

subgraph group_operations["Marketplace operations"]
  node_stores_vendors["Stores and vendors<br/>[page.tsx]"]
  node_customers_reviews["Customers and reviews<br/>[page.tsx]"]
  node_orders_payouts["Orders and payouts<br/>[usePayouts.ts]"]
  node_analytics["Analytics<br/>[page.tsx]"]
  node_settings_email["Settings and email<br/>[page.tsx]"]
end

subgraph group_catalog["Catalog and growth"]
  node_taxonomy["Taxonomy<br/>[page.tsx]"]
  node_promotions["Promotions<br/>[page.tsx]"]
  node_search["Search tuning<br/>[page.tsx]"]
end

subgraph group_data["Data access"]
  node_hooks["Query hooks"]
  node_api["API services"]
  node_graphql_client["GraphQL client<br/>[client.ts]"]
  node_backend["SOPET backend"]
end

subgraph group_identity["Identity"]
  node_graphql_route["GraphQL BFF<br/>[route.ts]"]
  node_auth_bff["Auth BFF<br/>[bff-upstream.ts]"]
  node_auth_routes["Session endpoints<br/>[route.ts]"]
end

node_user(("Admin or vendor"))

node_user -->|"uses"| node_admin
node_user -.->|"uses"| node_vendor
node_user -->|"authenticates"| node_auth_pages
node_admin -->|"queries via"| node_hooks
node_vendor -.->|"queries via"| node_hooks
node_stores_vendors -->|"queries via"| node_hooks
node_customers_reviews -->|"queries via"| node_hooks
node_orders_payouts -->|"queries via"| node_hooks
node_taxonomy -->|"queries via"| node_hooks
node_promotions -->|"queries via"| node_hooks
node_search -->|"queries via"| node_hooks
node_analytics -->|"queries via"| node_hooks
node_settings_email -->|"queries via"| node_hooks
node_hooks -->|"calls"| node_api
node_api -->|"sends operations"| node_graphql_client
node_graphql_client -->|"posts GraphQL"| node_graphql_route
node_graphql_route -->|"forwards requests"| node_backend
node_auth_routes -->|"refreshes tokens"| node_auth_bff
node_graphql_route -->|"refreshes on expiry"| node_auth_bff

click node_admin "https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/app/admin"
click node_auth_pages "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/login/page.tsx"
click node_stores_vendors "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/stores/page.tsx"
click node_customers_reviews "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/customers/page.tsx"
click node_orders_payouts "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/hooks/usePayouts.ts"
click node_taxonomy "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/taxonomy/page.tsx"
click node_promotions "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/promotions/page.tsx"
click node_search "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/search/tuning/page.tsx"
click node_analytics "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/analytics/page.tsx"
click node_settings_email "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/settings/page.tsx"
click node_hooks "https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/hooks"
click node_api "https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/lib/api"
click node_graphql_client "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/lib/graphql/client.ts"
click node_graphql_route "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/graphql/route.ts"
click node_auth_bff "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/lib/auth/bff-upstream.ts"
click node_auth_routes "https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/api/auth/session/route.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_admin,node_vendor,node_auth_pages toneBlue
class node_stores_vendors,node_customers_reviews,node_orders_payouts,node_analytics,node_settings_email toneAmber
class node_taxonomy,node_promotions,node_search toneMint
class node_hooks,node_api,node_graphql_client,node_backend toneRose
class node_graphql_route,node_auth_bff,node_auth_routes,node_user toneIndigo
```

## Components

### Portals

- [Admin portal](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/app/admin): `src/app/admin`
- **Vendor portal**
- [Auth routes](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/login/page.tsx): `src/app/login/page.tsx`

### Marketplace operations

- [Stores and vendors](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/stores/page.tsx): `src/app/admin/stores/page.tsx`
- [Customers and reviews](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/customers/page.tsx): `src/app/admin/customers/page.tsx`
- [Orders and payouts](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/hooks/usePayouts.ts): `src/hooks/usePayouts.ts`
- [Analytics](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/analytics/page.tsx): `src/app/admin/analytics/page.tsx`
- [Settings and email](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/settings/page.tsx): `src/app/admin/settings/page.tsx`

### Catalog and growth

- [Taxonomy](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/taxonomy/page.tsx): `src/app/admin/taxonomy/page.tsx`
- [Promotions](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/promotions/page.tsx): `src/app/admin/promotions/page.tsx`
- [Search tuning](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/admin/search/tuning/page.tsx): `src/app/admin/search/tuning/page.tsx`

### Data access

- [Query hooks](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/hooks): `src/hooks`
- [API services](https://github.com/sopet-co-ltd/new-sopet-admin/tree/main/src/lib/api): `src/lib/api`
- [GraphQL client](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/lib/graphql/client.ts): `src/lib/graphql/client.ts`
- **SOPET backend**

### Identity

- [GraphQL BFF](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/graphql/route.ts): `src/app/graphql/route.ts`
- [Auth BFF](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/lib/auth/bff-upstream.ts): `src/lib/auth/bff-upstream.ts`
- [Session endpoints](https://github.com/sopet-co-ltd/new-sopet-admin/blob/main/src/app/api/auth/session/route.ts): `src/app/api/auth/session/route.ts`

### Other components

- **Admin or vendor**

## Connections

- Admin or vendor → Admin portal: uses
- Admin or vendor → Vendor portal: uses
- Admin or vendor → Auth routes: authenticates
- Admin portal → Query hooks: queries via
- Vendor portal → Query hooks: queries via
- Stores and vendors → Query hooks: queries via
- Customers and reviews → Query hooks: queries via
- Orders and payouts → Query hooks: queries via
- Taxonomy → Query hooks: queries via
- Promotions → Query hooks: queries via
- Search tuning → Query hooks: queries via
- Analytics → Query hooks: queries via
- Settings and email → Query hooks: queries via
- Query hooks → API services: calls
- API services → GraphQL client: sends operations
- GraphQL client → GraphQL BFF: posts GraphQL
- GraphQL BFF → SOPET backend: forwards requests
- Session endpoints → Auth BFF: refreshes tokens
- GraphQL BFF → Auth BFF: refreshes on expiry
