# vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce architecture

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

- Interactive diagram: https://gitdiagram.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce
- Repository: https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce

## Overview

This is an Express/EJS MVC starter for a small website with home/about pages and a user-management screen, backed optionally by MongoDB. The intended request flow is browser → routes → controllers → rendered views; user requests also read or create users. Source shows two separate entry points: `server.js` serves the home page and static files, while `src/app.js` configures the MVC routes but is not imported by `server.js`. The database connector is likewise not invoked by either sampled entry point, so those links are not implied.

Main entry points: [`server.js`](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/server.js) (Standalone server), [`src/app.js`](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/app.js) (Express app), [`src/routes/index.js`](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/index.js) (Route index), [`src/controllers/home.controller.js`](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/controllers/home.controller.js) (Page controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Server Runtime"]
  node_server["Standalone server<br/>[server.js]"]
  node_app["Express app<br/>[app.js]"]
end

subgraph group_mvc["MVC Website"]
  node_router["Route index<br/>[index.js]"]
  node_home_routes["Home routes<br/>[home.route.js]"]
  node_user_routes["User routes<br/>[user.route.js]"]
  node_home_controller["Page controller<br/>[home.controller.js]"]
  node_user_controller["User controller<br/>[user.controller.js]"]
  node_home_views["Home and about<br/>[home.ejs]"]
  node_users_view["Users page<br/>[users.ejs]"]
  node_about_view["About page<br/>[about.ejs]"]
  node_partials["Shared page partials<br/>[navbar.ejs]"]
end

subgraph group_persistence["User Persistence"]
  node_user_model["User model<br/>[user.model.js]"]
  node_db_config["Mongo connector<br/>[db.js]"]
end

subgraph group_assets["Browser Assets"]
  node_static_files["Static assets<br/>[style.css]"]
  node_client_js["Browser script<br/>[main.js]"]
end

node_browser(("Browser"))
node_mongo[("MongoDB")]

node_browser -->|"requests pages"| node_server
node_server -->|"renders home"| node_home_views
node_server -->|"serves files"| node_static_files
node_browser -.->|"requests pages"| node_app
node_app -->|"mounts routes"| node_router
node_router -->|"dispatches"| node_home_routes
node_router -->|"dispatches"| node_user_routes
node_home_routes -->|"dispatches"| node_home_controller
node_user_routes -->|"dispatches"| node_user_controller
node_home_controller -->|"renders home"| node_home_views
node_home_controller -->|"renders about"| node_about_view
node_user_controller -->|"reads and creates"| node_user_model
node_user_model -->|"persists users"| node_mongo
node_user_controller -->|"renders users"| node_users_view
node_app -->|"serves files"| node_static_files
node_browser -->|"loads script"| node_client_js
node_db_config -.->|"connects optionally"| node_mongo

click node_server "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/server.js"
click node_app "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/app.js"
click node_router "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/index.js"
click node_home_routes "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/home.route.js"
click node_user_routes "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/user.route.js"
click node_home_controller "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/controllers/home.controller.js"
click node_user_controller "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/controllers/user.controller.js"
click node_home_views "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/home.ejs"
click node_users_view "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/users.ejs"
click node_about_view "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/about.ejs"
click node_partials "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/partials/navbar.ejs"
click node_user_model "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/models/user.model.js"
click node_db_config "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/config/db.js"
click node_static_files "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/public/css/style.css"
click node_client_js "https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/public/js/main.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_server,node_app,node_browser toneBlue
class node_router,node_home_routes,node_user_routes,node_home_controller,node_user_controller,node_home_views,node_users_view,node_about_view,node_partials,node_mongo toneAmber
class node_user_model,node_db_config toneMint
class node_static_files,node_client_js toneRose
```

## Components

### Server Runtime

- [Standalone server](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/server.js): `server.js`
- [Express app](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/app.js): `src/app.js`

### MVC Website

- [Route index](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/index.js): `src/routes/index.js`
- [Home routes](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/home.route.js): `src/routes/home.route.js`
- [User routes](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/routes/user.route.js): `src/routes/user.route.js`
- [Page controller](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/controllers/home.controller.js): `src/controllers/home.controller.js`
- [User controller](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/controllers/user.controller.js): `src/controllers/user.controller.js`
- [Home and about](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/home.ejs): `src/views/pages/home.ejs`
- [Users page](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/users.ejs): `src/views/pages/users.ejs`
- [About page](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/pages/about.ejs): `src/views/pages/about.ejs`
- [Shared page partials](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/views/partials/navbar.ejs): `src/views/partials/navbar.ejs`

### User Persistence

- [User model](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/models/user.model.js): `src/models/user.model.js`
- [Mongo connector](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/src/config/db.js): `src/config/db.js`

### Browser Assets

- [Static assets](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/public/css/style.css): `public/css/style.css`
- [Browser script](https://github.com/vuongnguyenviethoa1111-a11y/24ct1-cnpm-soulcandle-ecommerce/blob/main/public/js/main.js): `public/js/main.js`

### Other components

- **Browser**
- **MongoDB**

## Connections

- Browser → Standalone server: requests pages
- Standalone server → Home and about: renders home
- Standalone server → Static assets: serves files
- Browser → Express app: requests pages
- Express app → Route index: mounts routes
- Route index → Home routes: dispatches
- Route index → User routes: dispatches
- Home routes → Page controller: dispatches
- User routes → User controller: dispatches
- Page controller → Home and about: renders home
- Page controller → About page: renders about
- User controller → User model: reads and creates
- User model → MongoDB: persists users
- User controller → Users page: renders users
- Express app → Static assets: serves files
- Browser → Browser script: loads script
- Mongo connector → MongoDB: connects optionally
