# mman7/mini-ecommerce architecture

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

- Interactive diagram: https://gitdiagram.com/mman7/mini-ecommerce
- Repository: https://github.com/mman7/mini-ecommerce

## Overview

Mini Ecommerce is a learning-focused gift-and-stationery storefront: customers browse products, manage carts and accounts, and place orders; administrators manage catalog, customers, inventory, and fulfillment. The Next.js UI fronts an Express API, with Prisma/PostgreSQL persistence and Stripe checkout/webhook support. The graph retains the documented storefront and dashboard capabilities, while grouping unsampled UI areas by their existing route directories. Several backend feature calls are directly evidenced; broader UI-to-API wiring and some persistence details are documented only at the architecture level.

Main entry points: [`backend/src/routes.ts`](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/routes.ts) (API router), [`backend/src/utils/prisma.ts`](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/utils/prisma.ts) (Prisma client), [`backend/src/modules/admin`](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/admin) (Admin operations), [`frontend/src/app`](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app) (Next.js app)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Storefront and dashboard"]
  node_next["Next.js app"]
  node_shop_ui["Shop and checkout screens"]
  node_account_ui["Profile and wishlist screens"]
  node_admin_ui["Admin dashboard"]
  node_api_client["Frontend API clients"]
end

subgraph group_api["API feature modules"]
  node_auth["Authentication"]
  node_users["Users and addresses"]
  node_products["Product catalog"]
  node_categories["Categories"]
  node_cart["Cart"]
  node_favourites["Favourites"]
  node_orders["Orders and fulfillment"]
  node_inventory["Inventory"]
  node_admin["Admin operations"]
  node_payments["Payments"]
end

subgraph group_shared["API shared layers"]
  node_api_entry["API router<br/>[routes.ts]"]
  node_auth_middleware["Authentication middleware<br/>[auth.middleware.ts]"]
  node_jwt["JWT and refresh tokens<br/>[jwt.ts]"]
  node_config["Runtime configuration<br/>[configs.ts]"]
end

subgraph group_data["Persistence and integrations"]
  node_prisma["Prisma client<br/>[prisma.ts]"]
  node_postgres[("PostgreSQL")]
  node_stripe["Stripe"]
  node_uploads["Local image storage<br/>[file.service.ts]"]
end

node_browser(("Customer or admin"))

node_browser -->|"uses"| node_next
node_next -->|"rewrites API requests"| node_api_entry
node_next -->|"rewrites file requests"| node_uploads
node_next -->|"serves storefront"| node_shop_ui
node_next -->|"serves account screens"| node_account_ui
node_next -->|"serves dashboard"| node_admin_ui
node_shop_ui -.->|"uses"| node_api_client
node_account_ui -.->|"uses"| node_api_client
node_admin_ui -.->|"uses"| node_api_client
node_api_client -.->|"requests"| node_api_entry
node_api_entry -->|"mounts routes"| node_auth
node_api_entry -->|"mounts routes"| node_users
node_api_entry -->|"mounts routes"| node_products
node_api_entry -->|"mounts routes"| node_cart
node_api_entry -->|"mounts routes"| node_categories
node_api_entry -->|"mounts routes"| node_inventory
node_api_entry -->|"mounts routes"| node_orders
node_api_entry -->|"mounts routes"| node_admin
node_api_entry -->|"mounts routes"| node_favourites
node_api_entry -->|"mounts routes"| node_payments
node_auth -->|"issues tokens"| node_jwt
node_auth -->|"persists account data"| node_prisma
node_users -.->|"reads and writes"| node_prisma
node_products -->|"reads and writes"| node_prisma
node_products -->|"deletes image files"| node_uploads
node_categories -->|"queries product service"| node_products
node_categories -.->|"reads and writes"| node_prisma
node_cart -->|"checks product and stock"| node_products
node_cart -.->|"reads and writes"| node_prisma
node_favourites -.->|"reads and writes"| node_prisma
node_orders -.->|"checks and fulfills stock"| node_inventory
node_orders -.->|"reads and writes"| node_prisma
node_inventory -.->|"reads and writes"| node_prisma
node_admin -->|"uses order operations"| node_orders
node_admin -->|"uses inventory operations"| node_inventory
node_admin -->|"uses product operations"| node_products
node_admin -->|"uses category operations"| node_categories
node_admin -->|"uses user operations"| node_users
node_admin -->|"uses payment operations"| node_payments
node_payments -->|"processes payments"| node_stripe
node_prisma -->|"persists application data"| node_postgres
node_auth_middleware -.->|"validates tokens"| node_jwt
node_config -.->|"configures connection"| node_prisma

click node_next "https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app"
click node_shop_ui "https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app"
click node_account_ui "https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app/profile"
click node_admin_ui "https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app/dashboard"
click node_api_client "https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/api"
click node_api_entry "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/routes.ts"
click node_auth "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/auth"
click node_users "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/user"
click node_products "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/product"
click node_categories "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/category"
click node_cart "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/cart"
click node_favourites "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/favourite"
click node_orders "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/order"
click node_inventory "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/inventory"
click node_admin "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/admin"
click node_payments "https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/payment"
click node_auth_middleware "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/middleware/auth.middleware.ts"
click node_jwt "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/utils/jwt.ts"
click node_config "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/configs/configs.ts"
click node_prisma "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/utils/prisma.ts"
click node_uploads "https://github.com/mman7/mini-ecommerce/blob/main/backend/src/modules/file/file.service.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_next,node_shop_ui,node_account_ui,node_admin_ui,node_api_client toneBlue
class node_auth,node_users,node_products,node_categories,node_cart,node_favourites,node_orders,node_inventory,node_admin,node_payments toneAmber
class node_api_entry,node_auth_middleware,node_jwt,node_config toneMint
class node_prisma,node_postgres,node_stripe,node_uploads toneRose
class node_browser toneIndigo
```

## Components

### Storefront and dashboard

- [Next.js app](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app): `frontend/src/app`
- [Shop and checkout screens](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app): `frontend/src/app`
- [Profile and wishlist screens](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app/profile): `frontend/src/app/profile`
- [Admin dashboard](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/app/dashboard): `frontend/src/app/dashboard`
- [Frontend API clients](https://github.com/mman7/mini-ecommerce/tree/main/frontend/src/api): `frontend/src/api`

### API feature modules

- [Authentication](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/auth): `backend/src/modules/auth`
- [Users and addresses](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/user): `backend/src/modules/user`
- [Product catalog](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/product): `backend/src/modules/product`
- [Categories](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/category): `backend/src/modules/category`
- [Cart](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/cart): `backend/src/modules/cart`
- [Favourites](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/favourite): `backend/src/modules/favourite`
- [Orders and fulfillment](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/order): `backend/src/modules/order`
- [Inventory](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/inventory): `backend/src/modules/inventory`
- [Admin operations](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/admin): `backend/src/modules/admin`
- [Payments](https://github.com/mman7/mini-ecommerce/tree/main/backend/src/modules/payment): `backend/src/modules/payment`

### API shared layers

- [API router](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/routes.ts): `backend/src/routes.ts`
- [Authentication middleware](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/middleware/auth.middleware.ts): `backend/src/middleware/auth.middleware.ts`
- [JWT and refresh tokens](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/utils/jwt.ts): `backend/src/utils/jwt.ts`
- [Runtime configuration](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/configs/configs.ts): `backend/src/configs/configs.ts`

### Persistence and integrations

- [Prisma client](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/utils/prisma.ts): `backend/src/utils/prisma.ts`
- **PostgreSQL**
- **Stripe**
- [Local image storage](https://github.com/mman7/mini-ecommerce/blob/main/backend/src/modules/file/file.service.ts): `backend/src/modules/file/file.service.ts`

### Other components

- **Customer or admin**

## Connections

- Customer or admin → Next.js app: uses (evidence: `README.md`)
- Next.js app → API router: rewrites API requests (evidence: `README.md`)
- Next.js app → Local image storage: rewrites file requests (evidence: `README.md`)
- Next.js app → Shop and checkout screens: serves storefront (evidence: `README.md`)
- Next.js app → Profile and wishlist screens: serves account screens (evidence: `README.md`)
- Next.js app → Admin dashboard: serves dashboard (evidence: `README.md`)
- Shop and checkout screens → Frontend API clients: uses
- Profile and wishlist screens → Frontend API clients: uses
- Admin dashboard → Frontend API clients: uses
- Frontend API clients → API router: requests
- API router → Authentication: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Users and addresses: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Product catalog: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Cart: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Categories: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Inventory: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Orders and fulfillment: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Admin operations: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Favourites: mounts routes (evidence: `backend/src/routes.ts`)
- API router → Payments: mounts routes (evidence: `backend/src/routes.ts`)
- Authentication → JWT and refresh tokens: issues tokens (evidence: `backend/src/modules/auth/auth.service.ts`)
- Authentication → Prisma client: persists account data (evidence: `backend/src/modules/auth/auth.service.ts`)
- Users and addresses → Prisma client: reads and writes
- Product catalog → Prisma client: reads and writes (evidence: `backend/src/modules/product/product.service.ts`)
- Product catalog → Local image storage: deletes image files (evidence: `backend/src/modules/product/product.service.ts`)
- Categories → Product catalog: queries product service (evidence: `backend/src/modules/category/category.controller.ts`)
- Categories → Prisma client: reads and writes (evidence: `backend/src/modules/category/category.service.ts`)
- Cart → Product catalog: checks product and stock (evidence: `backend/src/modules/cart/cart.controller.ts`)
- Cart → Prisma client: reads and writes (evidence: `backend/src/modules/cart/cart.service.ts`)
- Favourites → Prisma client: reads and writes (evidence: `backend/src/modules/favourite/favourite.service.ts`)
- Orders and fulfillment → Inventory: checks and fulfills stock
- Orders and fulfillment → Prisma client: reads and writes
- Inventory → Prisma client: reads and writes
- Admin operations → Orders and fulfillment: uses order operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Admin operations → Inventory: uses inventory operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Admin operations → Product catalog: uses product operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Admin operations → Categories: uses category operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Admin operations → Users and addresses: uses user operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Admin operations → Payments: uses payment operations (evidence: `backend/src/modules/admin/admin.service.ts`)
- Payments → Stripe: processes payments (evidence: `README.md`)
- Prisma client → PostgreSQL: persists application data (evidence: `README.md`)
- Authentication middleware → JWT and refresh tokens: validates tokens
- Runtime configuration → Prisma client: configures connection
