# aynaynayn/thesis architecture

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

## Overview

Pawfit is a dog-apparel ecommerce application: shoppers browse products, use pet measurements and breed/size information, manage a cart, and place cash-on-delivery orders; administrators manage products, inventory, models, and orders. The frontend is a React app with context-managed routing, authentication, and cart state, backed by Express controllers and MongoDB models. The excerpts show key controller/model and context/API relationships; frontend-to-backend HTTP wiring is inferred from matching endpoints and is marked unverified.

Main entry points: [`frontend/src/app/App.tsx`](https://github.com/aynaynayn/thesis/blob/main/frontend/src/app/App.tsx) (App and Page Renderer), [`frontend/src/context/CartContext.tsx`](https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/CartContext.tsx) (Cart State), [`frontend/src/pages`](https://github.com/aynaynayn/thesis/tree/main/frontend/src/pages) (Shopper Pages), [`backend/src/server.js`](https://github.com/aynaynayn/thesis/blob/main/backend/src/server.js) (Express Server)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_storefront["Storefront"]
  node_app["App and Page Renderer<br/>[App.tsx]"]
  node_router["Route State<br/>[RouterContext.tsx]"]
  node_pages["Shopper Pages"]
  node_navbar["Navigation<br/>[Navbar.tsx]"]
end

subgraph group_identity["Accounts"]
  node_authui["Auth State<br/>[AuthContext.tsx]"]
  node_authroutes["Auth Routes<br/>[authRoutes.js]"]
  node_authcontroller["Account Operations<br/>[authController.js]"]
  node_authmiddleware["Auth Guard<br/>[authMiddleware.js]"]
  node_users[("User Records<br/>[User.js]")]
  node_email["Account Email Service<br/>[emailService.js]"]
end

subgraph group_commerce["Cart and Orders"]
  node_cartui["Cart State<br/>[CartContext.tsx]"]
  node_cartsidebar["Cart Sidebar<br/>[CartSidebar.tsx]"]
  node_cartroutes["Cart Routes<br/>[cartRoutes.js]"]
  node_orderroutes["Order Routes<br/>[orderRoutes.js]"]
  node_cartcontroller["Cart Operations<br/>[cartController.js]"]
  node_ordercontroller["Order Operations<br/>[orderController.js]"]
  node_carts[("Cart Records<br/>[Cart.js]")]
  node_orders[("Order Records<br/>[Order.js]")]
end

subgraph group_catalog["Catalog and Admin"]
  node_adminpage["Admin Console<br/>[AdminPage.tsx]"]
  node_producttypes["Product Data Types<br/>[products.ts]"]
  node_productroutes["Product Routes<br/>[productRoutes.js]"]
  node_productcontroller["Product Operations"]
  node_products[("Product Records<br/>[Product.js]")]
end

subgraph group_backend["Backend Services"]
  node_api["API Client<br/>[api.ts]"]
  node_server["Express Server<br/>[server.js]"]
  node_assets["Media Asset Service"]
end

node_shopper(("Shopper"))
node_cloudinary["Cloudinary"]

node_shopper -->|"uses"| node_app
node_app -->|"provides routing"| node_router
node_app -->|"provides auth"| node_authui
node_app -->|"provides cart"| node_cartui
node_app -->|"renders"| node_pages
node_app -->|"renders"| node_adminpage
node_pages -->|"uses"| node_router
node_pages -->|"uses"| node_authui
node_pages -->|"uses"| node_cartui
node_pages -->|"requests data"| node_api
node_adminpage -->|"manages catalog"| node_api
node_cartui -->|"checks user"| node_authui
node_cartui -->|"requests cart"| node_api
node_api -->|"maps products"| node_producttypes
node_navbar -->|"navigates"| node_router
node_navbar -->|"reads cart"| node_cartui
node_navbar -->|"reads account"| node_authui
node_cartsidebar -->|"updates cart"| node_cartui
node_cartsidebar -->|"navigates"| node_router
node_api -.->|"HTTP requests"| node_server
node_server -->|"mounts routes"| node_authroutes
node_server -->|"mounts routes"| node_productroutes
node_server -->|"mounts routes"| node_cartroutes
node_server -->|"mounts routes"| node_orderroutes
node_authroutes -->|"dispatches"| node_authcontroller
node_authroutes -->|"protects routes"| node_authmiddleware
node_productroutes -->|"dispatches"| node_productcontroller
node_productroutes -->|"protects admin"| node_authmiddleware
node_cartroutes -->|"dispatches"| node_cartcontroller
node_cartroutes -->|"protects routes"| node_authmiddleware
node_orderroutes -->|"dispatches"| node_ordercontroller
node_orderroutes -->|"protects routes"| node_authmiddleware
node_authmiddleware -->|"loads user"| node_users
node_authcontroller -->|"reads and writes"| node_users
node_authcontroller -->|"sends account email"| node_email
node_productcontroller -->|"manages products"| node_products
node_productcontroller -->|"uploads assets"| node_assets
node_assets -.->|"stores media"| node_cloudinary
node_cartcontroller -->|"manages cart"| node_carts
node_cartcontroller -->|"checks products"| node_products
node_ordercontroller -->|"loads cart"| node_carts
node_ordercontroller -->|"creates and queries"| node_orders
node_ordercontroller -->|"adjusts inventory"| node_products

click node_app "https://github.com/aynaynayn/thesis/blob/main/frontend/src/app/App.tsx"
click node_router "https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/RouterContext.tsx"
click node_pages "https://github.com/aynaynayn/thesis/tree/main/frontend/src/pages"
click node_adminpage "https://github.com/aynaynayn/thesis/blob/main/frontend/src/pages/AdminPage.tsx"
click node_authui "https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/AuthContext.tsx"
click node_cartui "https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/CartContext.tsx"
click node_api "https://github.com/aynaynayn/thesis/blob/main/frontend/src/lib/api.ts"
click node_producttypes "https://github.com/aynaynayn/thesis/blob/main/frontend/src/data/products.ts"
click node_navbar "https://github.com/aynaynayn/thesis/blob/main/frontend/src/components/Navbar.tsx"
click node_cartsidebar "https://github.com/aynaynayn/thesis/blob/main/frontend/src/components/CartSidebar.tsx"
click node_server "https://github.com/aynaynayn/thesis/blob/main/backend/src/server.js"
click node_authroutes "https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/authRoutes.js"
click node_productroutes "https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/productRoutes.js"
click node_cartroutes "https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/cartRoutes.js"
click node_orderroutes "https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/orderRoutes.js"
click node_authcontroller "https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/authController.js"
click node_authmiddleware "https://github.com/aynaynayn/thesis/blob/main/backend/src/middleware/authMiddleware.js"
click node_productcontroller "https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/productController.js"
click node_cartcontroller "https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/cartController.js"
click node_ordercontroller "https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/orderController.js"
click node_users "https://github.com/aynaynayn/thesis/blob/main/backend/src/models/User.js"
click node_products "https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Product.js"
click node_carts "https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Cart.js"
click node_orders "https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Order.js"
click node_assets "https://github.com/aynaynayn/thesis/blob/main/backend/src/utils/cloudinaryAssets.js"
click node_email "https://github.com/aynaynayn/thesis/blob/main/backend/src/utils/emailService.js"

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_app,node_router,node_pages,node_navbar toneBlue
class node_authui,node_authroutes,node_authcontroller,node_authmiddleware,node_users,node_email toneAmber
class node_cartui,node_cartsidebar,node_cartroutes,node_orderroutes,node_cartcontroller,node_ordercontroller,node_carts,node_orders toneMint
class node_adminpage,node_producttypes,node_productroutes,node_productcontroller,node_products toneRose
class node_api,node_server,node_assets,node_shopper,node_cloudinary toneIndigo
```

## Components

### Storefront

- [App and Page Renderer](https://github.com/aynaynayn/thesis/blob/main/frontend/src/app/App.tsx): `frontend/src/app/App.tsx`
- [Route State](https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/RouterContext.tsx): `frontend/src/context/RouterContext.tsx`
- [Shopper Pages](https://github.com/aynaynayn/thesis/tree/main/frontend/src/pages): `frontend/src/pages`
- [Navigation](https://github.com/aynaynayn/thesis/blob/main/frontend/src/components/Navbar.tsx): `frontend/src/components/Navbar.tsx`

### Accounts

- [Auth State](https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/AuthContext.tsx): `frontend/src/context/AuthContext.tsx`
- [Auth Routes](https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/authRoutes.js): `backend/src/routes/authRoutes.js`
- [Account Operations](https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/authController.js): `backend/src/controllers/authController.js`
- [Auth Guard](https://github.com/aynaynayn/thesis/blob/main/backend/src/middleware/authMiddleware.js): `backend/src/middleware/authMiddleware.js`
- [User Records](https://github.com/aynaynayn/thesis/blob/main/backend/src/models/User.js): `backend/src/models/User.js`
- [Account Email Service](https://github.com/aynaynayn/thesis/blob/main/backend/src/utils/emailService.js): `backend/src/utils/emailService.js`

### Cart and Orders

- [Cart State](https://github.com/aynaynayn/thesis/blob/main/frontend/src/context/CartContext.tsx): `frontend/src/context/CartContext.tsx`
- [Cart Sidebar](https://github.com/aynaynayn/thesis/blob/main/frontend/src/components/CartSidebar.tsx): `frontend/src/components/CartSidebar.tsx`
- [Cart Routes](https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/cartRoutes.js): `backend/src/routes/cartRoutes.js`
- [Order Routes](https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/orderRoutes.js): `backend/src/routes/orderRoutes.js`
- [Cart Operations](https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/cartController.js): `backend/src/controllers/cartController.js`
- [Order Operations](https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/orderController.js): `backend/src/controllers/orderController.js`
- [Cart Records](https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Cart.js): `backend/src/models/Cart.js`
- [Order Records](https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Order.js): `backend/src/models/Order.js`

### Catalog and Admin

- [Admin Console](https://github.com/aynaynayn/thesis/blob/main/frontend/src/pages/AdminPage.tsx): `frontend/src/pages/AdminPage.tsx`
- [Product Data Types](https://github.com/aynaynayn/thesis/blob/main/frontend/src/data/products.ts): `frontend/src/data/products.ts`
- [Product Routes](https://github.com/aynaynayn/thesis/blob/main/backend/src/routes/productRoutes.js): `backend/src/routes/productRoutes.js`
- [Product Operations](https://github.com/aynaynayn/thesis/blob/main/backend/src/controllers/productController.js): `backend/src/controllers/productController.js`
- [Product Records](https://github.com/aynaynayn/thesis/blob/main/backend/src/models/Product.js): `backend/src/models/Product.js`

### Backend Services

- [API Client](https://github.com/aynaynayn/thesis/blob/main/frontend/src/lib/api.ts): `frontend/src/lib/api.ts`
- [Express Server](https://github.com/aynaynayn/thesis/blob/main/backend/src/server.js): `backend/src/server.js`
- [Media Asset Service](https://github.com/aynaynayn/thesis/blob/main/backend/src/utils/cloudinaryAssets.js): `backend/src/utils/cloudinaryAssets.js`

### Other components

- **Shopper**
- **Cloudinary**

## Connections

- Shopper → App and Page Renderer: uses
- App and Page Renderer → Route State: provides routing (evidence: `frontend/src/app/App.tsx`)
- App and Page Renderer → Auth State: provides auth (evidence: `frontend/src/app/App.tsx`)
- App and Page Renderer → Cart State: provides cart (evidence: `frontend/src/app/App.tsx`)
- App and Page Renderer → Shopper Pages: renders (evidence: `frontend/src/app/App.tsx`)
- App and Page Renderer → Admin Console: renders (evidence: `frontend/src/app/App.tsx`)
- Shopper Pages → Route State: uses (evidence: `frontend/src/pages/CheckoutPage.tsx`)
- Shopper Pages → Auth State: uses (evidence: `frontend/src/pages/CheckoutPage.tsx`)
- Shopper Pages → Cart State: uses (evidence: `frontend/src/pages/CheckoutPage.tsx`)
- Shopper Pages → API Client: requests data (evidence: `frontend/src/pages/CheckoutPage.tsx`)
- Admin Console → API Client: manages catalog (evidence: `frontend/src/pages/AdminPage.tsx`)
- Cart State → Auth State: checks user (evidence: `frontend/src/context/CartContext.tsx`)
- Cart State → API Client: requests cart (evidence: `frontend/src/context/CartContext.tsx`)
- API Client → Product Data Types: maps products (evidence: `frontend/src/lib/api.ts`)
- Navigation → Route State: navigates (evidence: `frontend/src/components/Navbar.tsx`)
- Navigation → Cart State: reads cart (evidence: `frontend/src/components/Navbar.tsx`)
- Navigation → Auth State: reads account (evidence: `frontend/src/components/Navbar.tsx`)
- Cart Sidebar → Cart State: updates cart (evidence: `frontend/src/components/CartSidebar.tsx`)
- Cart Sidebar → Route State: navigates (evidence: `frontend/src/components/CartSidebar.tsx`)
- API Client → Express Server: HTTP requests
- Express Server → Auth Routes: mounts routes (evidence: `backend/src/server.js`)
- Express Server → Product Routes: mounts routes (evidence: `backend/src/server.js`)
- Express Server → Cart Routes: mounts routes (evidence: `backend/src/server.js`)
- Express Server → Order Routes: mounts routes (evidence: `backend/src/server.js`)
- Auth Routes → Account Operations: dispatches (evidence: `backend/src/routes/authRoutes.js`)
- Auth Routes → Auth Guard: protects routes (evidence: `backend/src/routes/authRoutes.js`)
- Product Routes → Product Operations: dispatches (evidence: `backend/src/routes/productRoutes.js`)
- Product Routes → Auth Guard: protects admin (evidence: `backend/src/routes/productRoutes.js`)
- Cart Routes → Cart Operations: dispatches (evidence: `backend/src/routes/cartRoutes.js`)
- Cart Routes → Auth Guard: protects routes (evidence: `backend/src/routes/cartRoutes.js`)
- Order Routes → Order Operations: dispatches (evidence: `backend/src/routes/orderRoutes.js`)
- Order Routes → Auth Guard: protects routes (evidence: `backend/src/routes/orderRoutes.js`)
- Auth Guard → User Records: loads user (evidence: `backend/src/middleware/authMiddleware.js`)
- Account Operations → User Records: reads and writes (evidence: `backend/src/controllers/authController.js`)
- Account Operations → Account Email Service: sends account email (evidence: `backend/src/controllers/authController.js`)
- Product Operations → Product Records: manages products (evidence: `backend/src/controllers/productController.js`)
- Product Operations → Media Asset Service: uploads assets (evidence: `backend/src/controllers/productController.js`)
- Media Asset Service → Cloudinary: stores media
- Cart Operations → Cart Records: manages cart (evidence: `backend/src/controllers/cartController.js`)
- Cart Operations → Product Records: checks products (evidence: `backend/src/controllers/cartController.js`)
- Order Operations → Cart Records: loads cart (evidence: `backend/src/controllers/orderController.js`)
- Order Operations → Order Records: creates and queries (evidence: `backend/src/controllers/orderController.js`)
- Order Operations → Product Records: adjusts inventory (evidence: `backend/src/controllers/orderController.js`)
