# goswami2021vaibhav/yt-mern-blog architecture

> Architecture diagram of the GitHub repository goswami2021vaibhav/yt-mern-blog, 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/goswami2021vaibhav/yt-mern-blog
- Repository: https://github.com/goswami2021vaibhav/yt-mern-blog

## Overview

This is a MERN blogging application: the React client provides public blog discovery and search, sign-in and profile management, and authenticated blog/comment plus admin category/user workflows. The Express API handles authentication and domain operations, persisting users, blogs, categories, comments, and likes in MongoDB; blog and profile images use Cloudinary. Client-to-API request details are not shown in the excerpts or README, so those links are omitted. Dashed edges indicate framework dispatch inferred from route registration where handler wiring was not excerpted.

Main entry points: [`client/src/App.jsx`](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/App.jsx) (Page router), [`api/index.js`](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/index.js) (Express API), [`api/routes/Blog.route.js`](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Blog.route.js) (Blog routes), [`api/controllers/Blog.controller.js`](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Blog.controller.js) (Blog operations)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React client"]
  node_entry["Client entry<br/>[main.jsx]"]
  node_router["Page router<br/>[App.jsx]"]
  node_authpages["Sign-in and signup<br/>[SignIn.jsx]"]
  node_home["Blog discovery<br/>[Index.jsx]"]
  node_search["Search results<br/>[SearchResult.jsx]"]
  node_blogpages["Blog management<br/>[AddBlog.jsx]"]
  node_blogview["Blog reading"]
  node_categorypages["Category management<br/>[AddCategory.jsx]"]
  node_profile["Profile<br/>[Profile.jsx]"]
  node_commentsui["Comment moderation<br/>[Comments.jsx]"]
end

subgraph group_api["API and access"]
  node_apiapp["Express API<br/>[index.js]"]
  node_authroutes["Auth routes<br/>[Auth.route.js]"]
  node_auth["Authentication<br/>[Auth.controller.js]"]
  node_authmw["JWT authentication<br/>[authenticate.js]"]
  node_blogroutes["Blog routes<br/>[Blog.route.js]"]
  node_categories["Category routes<br/>[Category.route.js]"]
  node_commentroutes["Comment routes<br/>[Comment.route.js]"]
  node_likeroutes["Like routes<br/>[Bloglike.route.js]"]
  node_userroutes["User routes<br/>[User.route.js]"]
  node_upload["Image upload<br/>[multer.js]"]
end

subgraph group_content["Content domains"]
  node_blog["Blog operations<br/>[Blog.controller.js]"]
  node_category["Category operations"]
  node_comments["Comment operations"]
  node_likes["Blog likes"]
  node_users["User operations<br/>[User.controller.js]"]
end

subgraph group_state["Persistence and media"]
  node_blogmodel[("Blog records<br/>[blog.model.js]")]
  node_categorymodel[("Category records<br/>[category.model.js]")]
  node_commentmodel[("Comment records<br/>[comment.model.js]")]
  node_likemodel[("Like records<br/>[bloglike.model.js]")]
  node_usermodel[("User records<br/>[user.model.js]")]
end

node_browser(("Browser user"))
node_mongo[("MongoDB")]
node_cloudinary[("Cloudinary media")]

node_browser -.->|"uses"| node_entry
node_entry -->|"renders"| node_router
node_router -->|"routes to"| node_authpages
node_router -->|"routes to"| node_home
node_router -->|"routes to"| node_search
node_router -->|"routes to"| node_blogpages
node_router -->|"routes to"| node_blogview
node_router -->|"routes to"| node_categorypages
node_router -->|"routes to"| node_profile
node_router -->|"routes to"| node_commentsui
node_apiapp -->|"mounts"| node_authroutes
node_apiapp -->|"mounts"| node_blogroutes
node_apiapp -->|"mounts"| node_categories
node_apiapp -->|"mounts"| node_commentroutes
node_apiapp -->|"mounts"| node_likeroutes
node_apiapp -->|"mounts"| node_userroutes
node_authroutes -->|"dispatches"| node_auth
node_authroutes -->|"uses"| node_authmw
node_blogroutes -->|"dispatches"| node_blog
node_blogroutes -->|"uses"| node_authmw
node_categories -->|"dispatches"| node_category
node_commentroutes -->|"dispatches"| node_comments
node_likeroutes -->|"dispatches"| node_likes
node_userroutes -->|"dispatches"| node_users
node_auth -->|"reads/writes"| node_usermodel
node_blog -->|"reads/writes"| node_blogmodel
node_blog -->|"reads"| node_categorymodel
node_blog -->|"uploads media"| node_cloudinary
node_users -->|"reads/writes"| node_usermodel
node_users -->|"uploads media"| node_cloudinary
node_comments -->|"reads/writes"| node_commentmodel
node_category -->|"reads/writes"| node_categorymodel
node_likes -->|"reads/writes"| node_likemodel
node_blogroutes -->|"configures upload"| node_upload
node_userroutes -->|"configures upload"| node_upload
node_apiapp -->|"connects"| node_mongo

click node_entry "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/main.jsx"
click node_router "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/App.jsx"
click node_authpages "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SignIn.jsx"
click node_home "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Index.jsx"
click node_search "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SearchResult.jsx"
click node_blogpages "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Blog/AddBlog.jsx"
click node_blogview "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SingleBlogDetails.jsx"
click node_categorypages "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Category/AddCategory.jsx"
click node_profile "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Profile.jsx"
click node_commentsui "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Comments.jsx"
click node_apiapp "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/index.js"
click node_authroutes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Auth.route.js"
click node_auth "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Auth.controller.js"
click node_authmw "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/middleware/authenticate.js"
click node_blogroutes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Blog.route.js"
click node_blog "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Blog.controller.js"
click node_category "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Category.controller.js"
click node_comments "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Comment.controller.js"
click node_likes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/BlogLike.controller.js"
click node_users "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/User.controller.js"
click node_categories "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Category.route.js"
click node_commentroutes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Comment.route.js"
click node_likeroutes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Bloglike.route.js"
click node_userroutes "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/User.route.js"
click node_blogmodel "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/blog.model.js"
click node_categorymodel "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/category.model.js"
click node_commentmodel "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/comment.model.js"
click node_likemodel "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/bloglike.model.js"
click node_usermodel "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/user.model.js"
click node_upload "https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/config/multer.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_entry,node_router,node_authpages,node_home,node_search,node_blogpages,node_blogview,node_categorypages,node_profile,node_commentsui,node_browser toneBlue
class node_apiapp,node_authroutes,node_auth,node_authmw,node_blogroutes,node_categories,node_commentroutes,node_likeroutes,node_userroutes,node_upload,node_mongo,node_cloudinary toneAmber
class node_blog,node_category,node_comments,node_likes,node_users toneMint
class node_blogmodel,node_categorymodel,node_commentmodel,node_likemodel,node_usermodel toneRose
```

## Components

### React client

- [Client entry](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/main.jsx): `client/src/main.jsx`
- [Page router](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/App.jsx): `client/src/App.jsx`
- [Sign-in and signup](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SignIn.jsx): `client/src/pages/SignIn.jsx`
- [Blog discovery](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Index.jsx): `client/src/pages/Index.jsx`
- [Search results](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SearchResult.jsx): `client/src/pages/SearchResult.jsx`
- [Blog management](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Blog/AddBlog.jsx): `client/src/pages/Blog/AddBlog.jsx`
- [Blog reading](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/SingleBlogDetails.jsx): `client/src/pages/SingleBlogDetails.jsx`
- [Category management](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Category/AddCategory.jsx): `client/src/pages/Category/AddCategory.jsx`
- [Profile](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Profile.jsx): `client/src/pages/Profile.jsx`
- [Comment moderation](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/client/src/pages/Comments.jsx): `client/src/pages/Comments.jsx`

### API and access

- [Express API](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/index.js): `api/index.js`
- [Auth routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Auth.route.js): `api/routes/Auth.route.js`
- [Authentication](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Auth.controller.js): `api/controllers/Auth.controller.js`
- [JWT authentication](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/middleware/authenticate.js): `api/middleware/authenticate.js`
- [Blog routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Blog.route.js): `api/routes/Blog.route.js`
- [Category routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Category.route.js): `api/routes/Category.route.js`
- [Comment routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Comment.route.js): `api/routes/Comment.route.js`
- [Like routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/Bloglike.route.js): `api/routes/Bloglike.route.js`
- [User routes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/routes/User.route.js): `api/routes/User.route.js`
- [Image upload](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/config/multer.js): `api/config/multer.js`

### Content domains

- [Blog operations](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Blog.controller.js): `api/controllers/Blog.controller.js`
- [Category operations](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Category.controller.js): `api/controllers/Category.controller.js`
- [Comment operations](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/Comment.controller.js): `api/controllers/Comment.controller.js`
- [Blog likes](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/BlogLike.controller.js): `api/controllers/BlogLike.controller.js`
- [User operations](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/controllers/User.controller.js): `api/controllers/User.controller.js`

### Persistence and media

- [Blog records](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/blog.model.js): `api/models/blog.model.js`
- [Category records](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/category.model.js): `api/models/category.model.js`
- [Comment records](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/comment.model.js): `api/models/comment.model.js`
- [Like records](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/bloglike.model.js): `api/models/bloglike.model.js`
- [User records](https://github.com/goswami2021vaibhav/yt-mern-blog/blob/main/api/models/user.model.js): `api/models/user.model.js`

### Other components

- **Browser user**
- **MongoDB**
- **Cloudinary media**

## Connections

- Browser user → Client entry: uses
- Client entry → Page router: renders (evidence: `client/src/main.jsx`)
- Page router → Sign-in and signup: routes to (evidence: `client/src/App.jsx`)
- Page router → Blog discovery: routes to (evidence: `client/src/App.jsx`)
- Page router → Search results: routes to (evidence: `client/src/App.jsx`)
- Page router → Blog management: routes to (evidence: `client/src/App.jsx`)
- Page router → Blog reading: routes to (evidence: `client/src/App.jsx`)
- Page router → Category management: routes to (evidence: `client/src/App.jsx`)
- Page router → Profile: routes to (evidence: `client/src/App.jsx`)
- Page router → Comment moderation: routes to (evidence: `client/src/App.jsx`)
- Express API → Auth routes: mounts (evidence: `api/index.js`)
- Express API → Blog routes: mounts (evidence: `api/index.js`)
- Express API → Category routes: mounts (evidence: `api/index.js`)
- Express API → Comment routes: mounts (evidence: `api/index.js`)
- Express API → Like routes: mounts (evidence: `api/index.js`)
- Express API → User routes: mounts (evidence: `api/index.js`)
- Auth routes → Authentication: dispatches (evidence: `api/routes/Auth.route.js`)
- Auth routes → JWT authentication: uses (evidence: `api/routes/Auth.route.js`)
- Blog routes → Blog operations: dispatches (evidence: `api/routes/Blog.route.js`)
- Blog routes → JWT authentication: uses (evidence: `api/routes/Blog.route.js`)
- Category routes → Category operations: dispatches (evidence: `api/routes/Category.route.js`)
- Comment routes → Comment operations: dispatches (evidence: `api/routes/Comment.route.js`)
- Like routes → Blog likes: dispatches (evidence: `api/routes/Bloglike.route.js`)
- User routes → User operations: dispatches (evidence: `api/routes/User.route.js`)
- Authentication → User records: reads/writes (evidence: `api/controllers/Auth.controller.js`)
- Blog operations → Blog records: reads/writes (evidence: `api/controllers/Blog.controller.js`)
- Blog operations → Category records: reads (evidence: `api/controllers/Blog.controller.js`)
- Blog operations → Cloudinary media: uploads media (evidence: `api/controllers/Blog.controller.js`)
- User operations → User records: reads/writes (evidence: `api/controllers/User.controller.js`)
- User operations → Cloudinary media: uploads media (evidence: `api/controllers/User.controller.js`)
- Comment operations → Comment records: reads/writes (evidence: `api/controllers/Comment.controller.js`)
- Category operations → Category records: reads/writes (evidence: `api/controllers/Category.controller.js`)
- Blog likes → Like records: reads/writes (evidence: `api/controllers/BlogLike.controller.js`)
- Blog routes → Image upload: configures upload (evidence: `api/routes/Blog.route.js`)
- User routes → Image upload: configures upload (evidence: `api/routes/User.route.js`)
- Express API → MongoDB: connects (evidence: `api/index.js`)
