# deejmags/agapay architecture

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

- Interactive diagram: https://gitdiagram.com/deejmags/agapay
- Repository: https://github.com/deejmags/agapay

## Overview

This is a reuse marketplace with seller tools, messaging, rewards, and administration. Users enter through the React router, browse listings or manage seller activity, and use authenticated API or Firebase services for marketplace data and conversations. The Express backend exposes product, user, message, review, report, appeal, reward, and auth routes backed by Firebase. Admin screens provide operational management. The README documents only the Create React App scaffold, so product capabilities are inferred from the source tree and SOURCE INDEX; unsampled areas are represented by their exact directories, and unsupported internal links are omitted.

Main entry points: [`backend/routes`](https://github.com/deejmags/agapay/tree/master/backend/routes) (API route handlers), [`backend/config/firebaseAdmin.js`](https://github.com/deejmags/agapay/blob/master/backend/config/firebaseAdmin.js) (Firebase Admin), [`src/router.js`](https://github.com/deejmags/agapay/blob/master/src/router.js) (Page routing), [`src/pages/SellerDashboard.js`](https://github.com/deejmags/agapay/blob/master/src/pages/SellerDashboard.js) (Seller dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Marketplace client"]
  node_app["App shell<br/>[App.js]"]
  node_router["Page routing<br/>[router.js]"]
  node_market["Browse marketplace<br/>[Marketplace.js]"]
  node_product["Product details<br/>[ProductDetail.js]"]
  node_profile["User profiles<br/>[Profile.js]"]
  node_messages["Messaging UI<br/>[Messages.js]"]
  node_message_service["Message service"]
  node_firebase_client["Firebase client<br/>[firebase.js]"]
  node_auth_fetch["Authenticated requests<br/>[authFetch.js]"]
end

subgraph group_seller["Seller experience"]
  node_seller_dash["Seller dashboard<br/>[SellerDashboard.js]"]
  node_upload["Product listing<br/>[UploadProduct.js]"]
  node_seller_orders["Seller orders<br/>[OrdersPanel.js]"]
  node_impact["Impact reporting"]
end

subgraph group_backend["API and domain services"]
  node_server["Express server<br/>[server.js]"]
  node_routes["API route handlers"]
  node_products_api["Product operations"]
  node_users_api["User operations<br/>[userController.js]"]
  node_messages_api["Message operations"]
  node_review_api["Reviews"]
  node_firebase_admin[("Firebase Admin<br/>[firebaseAdmin.js]")]
  node_auth_middleware["Token authentication<br/>[authMiddleware.js]"]
  node_other_domains["Reports, appeals, rewards"]
end

subgraph group_admin["Administration"]
  node_admin_ui["Admin console<br/>[AdminDashboard.js]"]
  node_admin_dropoff["Drop-off management"]
end

node_shopper(("Marketplace users"))

node_shopper -->|"opens"| node_app
node_app -->|"routes through"| node_router
node_router -->|"routes to"| node_market
node_router -->|"routes to"| node_product
node_router -->|"routes to"| node_profile
node_router -->|"routes to"| node_messages
node_messages -->|"uses"| node_message_service
node_message_service -->|"sends API requests"| node_auth_fetch
node_message_service -->|"reads and writes"| node_firebase_client
node_auth_fetch -->|"gets auth token"| node_firebase_client
node_shopper -->|"manages selling"| node_seller_dash
node_seller_dash -->|"requests listings"| node_auth_fetch
node_seller_dash -->|"renders"| node_seller_orders
node_seller_dash -->|"embeds"| node_messages
node_seller_dash -.->|"offers listing"| node_upload
node_shopper -.->|"administers"| node_admin_ui
node_admin_ui -->|"renders"| node_admin_dropoff
node_admin_ui -->|"uses"| node_auth_fetch
node_server -->|"initializes"| node_firebase_admin
node_server -->|"mounts"| node_routes
node_routes -->|"routes requests"| node_products_api
node_routes -->|"routes requests"| node_users_api
node_routes -->|"routes requests"| node_messages_api
node_routes -->|"routes requests"| node_review_api
node_routes -->|"protects endpoints"| node_auth_middleware
node_products_api -->|"uses database"| node_firebase_admin
node_users_api -->|"uses database"| node_firebase_admin
node_messages_api -->|"uses database"| node_firebase_admin
node_review_api -->|"uses database"| node_firebase_admin
node_auth_middleware -->|"verifies tokens"| node_firebase_admin
node_shopper -->|"browses and buys"| node_market
node_shopper -->|"communicates"| node_messages
node_shopper -->|"manages account"| node_profile
node_shopper -.->|"uses reports, appeals, rewards"| node_other_domains
node_impact -->|"requests data"| node_auth_fetch

click node_app "https://github.com/deejmags/agapay/blob/master/src/App.js"
click node_router "https://github.com/deejmags/agapay/blob/master/src/router.js"
click node_market "https://github.com/deejmags/agapay/blob/master/src/pages/Marketplace.js"
click node_product "https://github.com/deejmags/agapay/blob/master/src/pages/ProductDetail.js"
click node_profile "https://github.com/deejmags/agapay/blob/master/src/pages/Profile.js"
click node_messages "https://github.com/deejmags/agapay/blob/master/src/pages/Messages.js"
click node_message_service "https://github.com/deejmags/agapay/blob/master/src/firebaseMessageService.js"
click node_firebase_client "https://github.com/deejmags/agapay/blob/master/src/firebase.js"
click node_auth_fetch "https://github.com/deejmags/agapay/blob/master/src/utils/authFetch.js"
click node_seller_dash "https://github.com/deejmags/agapay/blob/master/src/pages/SellerDashboard.js"
click node_upload "https://github.com/deejmags/agapay/blob/master/src/pages/UploadProduct.js"
click node_seller_orders "https://github.com/deejmags/agapay/blob/master/src/seller/OrdersPanel.js"
click node_impact "https://github.com/deejmags/agapay/blob/master/src/seller/ImpactReportPanel.js"
click node_admin_ui "https://github.com/deejmags/agapay/blob/master/src/admin/AdminDashboard.js"
click node_admin_dropoff "https://github.com/deejmags/agapay/blob/master/src/admin/DropOffManagement.js"
click node_server "https://github.com/deejmags/agapay/blob/master/backend/server.js"
click node_routes "https://github.com/deejmags/agapay/tree/master/backend/routes"
click node_products_api "https://github.com/deejmags/agapay/blob/master/backend/controllers/productController.js"
click node_users_api "https://github.com/deejmags/agapay/blob/master/backend/controllers/userController.js"
click node_messages_api "https://github.com/deejmags/agapay/blob/master/backend/controllers/messageController.js"
click node_review_api "https://github.com/deejmags/agapay/blob/master/backend/controllers/reviewController.js"
click node_firebase_admin "https://github.com/deejmags/agapay/blob/master/backend/config/firebaseAdmin.js"
click node_auth_middleware "https://github.com/deejmags/agapay/blob/master/backend/config/authMiddleware.js"
click node_other_domains "https://github.com/deejmags/agapay/tree/master/backend/controllers"

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_market,node_product,node_profile,node_messages,node_message_service,node_firebase_client,node_auth_fetch,node_shopper toneBlue
class node_seller_dash,node_upload,node_seller_orders,node_impact toneAmber
class node_server,node_routes,node_products_api,node_users_api,node_messages_api,node_review_api,node_firebase_admin,node_auth_middleware,node_other_domains toneMint
class node_admin_ui,node_admin_dropoff toneRose
```

## Components

### Marketplace client

- [App shell](https://github.com/deejmags/agapay/blob/master/src/App.js): `src/App.js`
- [Page routing](https://github.com/deejmags/agapay/blob/master/src/router.js): `src/router.js`
- [Browse marketplace](https://github.com/deejmags/agapay/blob/master/src/pages/Marketplace.js): `src/pages/Marketplace.js`
- [Product details](https://github.com/deejmags/agapay/blob/master/src/pages/ProductDetail.js): `src/pages/ProductDetail.js`
- [User profiles](https://github.com/deejmags/agapay/blob/master/src/pages/Profile.js): `src/pages/Profile.js`
- [Messaging UI](https://github.com/deejmags/agapay/blob/master/src/pages/Messages.js): `src/pages/Messages.js`
- [Message service](https://github.com/deejmags/agapay/blob/master/src/firebaseMessageService.js): `src/firebaseMessageService.js`
- [Firebase client](https://github.com/deejmags/agapay/blob/master/src/firebase.js): `src/firebase.js`
- [Authenticated requests](https://github.com/deejmags/agapay/blob/master/src/utils/authFetch.js): `src/utils/authFetch.js`

### Seller experience

- [Seller dashboard](https://github.com/deejmags/agapay/blob/master/src/pages/SellerDashboard.js): `src/pages/SellerDashboard.js`
- [Product listing](https://github.com/deejmags/agapay/blob/master/src/pages/UploadProduct.js): `src/pages/UploadProduct.js`
- [Seller orders](https://github.com/deejmags/agapay/blob/master/src/seller/OrdersPanel.js): `src/seller/OrdersPanel.js`
- [Impact reporting](https://github.com/deejmags/agapay/blob/master/src/seller/ImpactReportPanel.js): `src/seller/ImpactReportPanel.js`

### API and domain services

- [Express server](https://github.com/deejmags/agapay/blob/master/backend/server.js): `backend/server.js`
- [API route handlers](https://github.com/deejmags/agapay/tree/master/backend/routes): `backend/routes`
- [Product operations](https://github.com/deejmags/agapay/blob/master/backend/controllers/productController.js): `backend/controllers/productController.js`
- [User operations](https://github.com/deejmags/agapay/blob/master/backend/controllers/userController.js): `backend/controllers/userController.js`
- [Message operations](https://github.com/deejmags/agapay/blob/master/backend/controllers/messageController.js): `backend/controllers/messageController.js`
- [Reviews](https://github.com/deejmags/agapay/blob/master/backend/controllers/reviewController.js): `backend/controllers/reviewController.js`
- [Firebase Admin](https://github.com/deejmags/agapay/blob/master/backend/config/firebaseAdmin.js): `backend/config/firebaseAdmin.js`
- [Token authentication](https://github.com/deejmags/agapay/blob/master/backend/config/authMiddleware.js): `backend/config/authMiddleware.js`
- [Reports, appeals, rewards](https://github.com/deejmags/agapay/tree/master/backend/controllers): `backend/controllers`

### Administration

- [Admin console](https://github.com/deejmags/agapay/blob/master/src/admin/AdminDashboard.js): `src/admin/AdminDashboard.js`
- [Drop-off management](https://github.com/deejmags/agapay/blob/master/src/admin/DropOffManagement.js): `src/admin/DropOffManagement.js`

### Other components

- **Marketplace users**

## Connections

- Marketplace users → App shell: opens (evidence: `src/App.js`)
- App shell → Page routing: routes through (evidence: `src/router.js`)
- Page routing → Browse marketplace: routes to (evidence: `src/router.js`)
- Page routing → Product details: routes to (evidence: `src/router.js`)
- Page routing → User profiles: routes to (evidence: `src/router.js`)
- Page routing → Messaging UI: routes to (evidence: `src/router.js`)
- Messaging UI → Message service: uses (evidence: `src/pages/Messages.js`)
- Message service → Authenticated requests: sends API requests (evidence: `src/firebaseMessageService.js`)
- Message service → Firebase client: reads and writes (evidence: `src/firebaseMessageService.js`)
- Authenticated requests → Firebase client: gets auth token (evidence: `src/utils/authFetch.js`)
- Marketplace users → Seller dashboard: manages selling (evidence: `src/pages/SellerDashboard.js`)
- Seller dashboard → Authenticated requests: requests listings (evidence: `src/pages/SellerDashboard.js`)
- Seller dashboard → Seller orders: renders (evidence: `src/pages/SellerDashboard.js`)
- Seller dashboard → Messaging UI: embeds (evidence: `src/pages/SellerDashboard.js`)
- Seller dashboard → Product listing: offers listing
- Marketplace users → Admin console: administers
- Admin console → Drop-off management: renders (evidence: `src/admin/AdminDashboard.js`)
- Admin console → Authenticated requests: uses (evidence: `src/admin/AdminDashboard.js`)
- Express server → Firebase Admin: initializes (evidence: `backend/server.js`)
- Express server → API route handlers: mounts (evidence: `backend/server.js`)
- API route handlers → Product operations: routes requests (evidence: `backend/routes/productRoutes.js`)
- API route handlers → User operations: routes requests (evidence: `backend/routes/userRoutes.js`)
- API route handlers → Message operations: routes requests (evidence: `backend/routes/messageRoutes.js`)
- API route handlers → Reviews: routes requests (evidence: `backend/routes/reviewRoutes.js`)
- API route handlers → Token authentication: protects endpoints (evidence: `backend/routes/reviewRoutes.js`)
- Product operations → Firebase Admin: uses database (evidence: `backend/controllers/productController.js`)
- User operations → Firebase Admin: uses database (evidence: `backend/controllers/userController.js`)
- Message operations → Firebase Admin: uses database (evidence: `backend/controllers/messageController.js`)
- Reviews → Firebase Admin: uses database (evidence: `backend/controllers/reviewController.js`)
- Token authentication → Firebase Admin: verifies tokens (evidence: `backend/config/authMiddleware.js`)
- Marketplace users → Browse marketplace: browses and buys
- Marketplace users → Messaging UI: communicates
- Marketplace users → User profiles: manages account
- Marketplace users → Reports, appeals, rewards: uses reports, appeals, rewards
- Impact reporting → Authenticated requests: requests data (evidence: `src/seller/ImpactReportPanel.js`)
