# saeetarde/soullines_quotes architecture

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

## Overview

SoulLines is a quote-sharing social platform. Users register or sign in, create image-backed quotes, then discover quotes through a personalized feed or text/tag search; they can like and save quotes, and manage profiles and dashboards. React routes expose these workflows, while Express routes dispatch requests through authentication where required to user controllers. Controllers use MongoDB models and Cloudinary for image uploads. The README documents capabilities beyond the sampled client pages and controller excerpts, so those are represented at subsystem level without guessing their internal wiring.

Main entry points: [`server/controllers/user.controllers.js`](https://github.com/saeetarde/soullines_quotes/blob/main/server/controllers/user.controllers.js) (User workflows), [`server/app.js`](https://github.com/saeetarde/soullines_quotes/blob/main/server/app.js) (HTTP server), [`client/src/App.js`](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/App.js) (Client routes), [`client/src/pages/SearchResultsPage.js`](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/SearchResultsPage.js) (Quote search)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["React experience"]
  node_app["Client routes<br/>[App.js]"]
  node_search["Quote search"]
  node_quote_ui["Quote cards<br/>[quoteCard.js]"]
  node_user_routes["Account pages<br/>[loginPage.js]"]
  node_dashboard["User dashboards<br/>[UserDashboard.js]"]
  node_post_page["Quote posting<br/>[AddPost.js]"]
end

subgraph group_api["HTTP API"]
  node_server["HTTP server<br/>[app.js]"]
  node_routes["User endpoints<br/>[user.routes.js]"]
  node_auth["JWT verification"]
  node_controller["User workflows"]
  node_health["Health endpoint"]
end

subgraph group_domain["Quote domain"]
  node_user_model[("User records<br/>[user.models.js]")]
  node_quote_model[("Quote posts")]
  node_saved_model[("Saved quotes")]
  node_like_model[("Quote likes<br/>[like.models.js]")]
  node_tag_model[("Interest tags<br/>[tag.models.js]")]
end

subgraph group_infra["Persistence and media"]
  node_mongo[("MongoDB")]
  node_cloudinary_util["Media uploader<br/>[cloudinary.js]"]
  node_cloudinary[("Cloudinary")]
  node_db_connect["Database connection<br/>[index.js]"]
end

node_person(("User"))

node_person -->|"uses"| node_app
node_app -->|"routes to"| node_search
node_app -->|"routes to"| node_user_routes
node_app -->|"routes to"| node_dashboard
node_app -->|"routes to"| node_post_page
node_search -->|"requests search"| node_server
node_search -->|"renders results"| node_quote_ui
node_post_page -->|"submits quote"| node_server
node_dashboard -.->|"requests dashboard"| node_server
node_user_routes -.->|"requests account"| node_server
node_server -->|"mounts endpoints"| node_routes
node_server -->|"mounts health"| node_health
node_routes -->|"guards requests"| node_auth
node_routes -->|"dispatches"| node_controller
node_db_connect -->|"connects"| node_mongo
node_controller -->|"reads and writes"| node_user_model
node_controller -->|"reads and writes"| node_quote_model
node_controller -->|"reads and writes"| node_saved_model
node_controller -->|"reads and writes"| node_like_model
node_controller -->|"reads and writes"| node_tag_model
node_auth -->|"loads user"| node_user_model
node_controller -->|"uploads images"| node_cloudinary_util
node_cloudinary_util -->|"stores media"| node_cloudinary

click node_app "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/App.js"
click node_search "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/SearchResultsPage.js"
click node_quote_ui "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/components/quoteCard.js"
click node_user_routes "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/loginPage.js"
click node_dashboard "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/UserDashboard.js"
click node_post_page "https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/AddPost.js"
click node_server "https://github.com/saeetarde/soullines_quotes/blob/main/server/app.js"
click node_routes "https://github.com/saeetarde/soullines_quotes/blob/main/server/routes/user.routes.js"
click node_auth "https://github.com/saeetarde/soullines_quotes/blob/main/server/middlewares/auth.middlewares.js"
click node_controller "https://github.com/saeetarde/soullines_quotes/blob/main/server/controllers/user.controllers.js"
click node_health "https://github.com/saeetarde/soullines_quotes/blob/main/server/controllers/healthCheck.controller.js"
click node_user_model "https://github.com/saeetarde/soullines_quotes/blob/main/server/models/user.models.js"
click node_quote_model "https://github.com/saeetarde/soullines_quotes/blob/main/server/models/quotePost.models.js"
click node_saved_model "https://github.com/saeetarde/soullines_quotes/blob/main/server/models/savedQuote.models.js"
click node_like_model "https://github.com/saeetarde/soullines_quotes/blob/main/server/models/like.models.js"
click node_tag_model "https://github.com/saeetarde/soullines_quotes/blob/main/server/models/tag.models.js"
click node_cloudinary_util "https://github.com/saeetarde/soullines_quotes/blob/main/server/utils/cloudinary.js"
click node_db_connect "https://github.com/saeetarde/soullines_quotes/blob/main/server/db/index.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_search,node_quote_ui,node_user_routes,node_dashboard,node_post_page,node_person toneBlue
class node_server,node_routes,node_auth,node_controller,node_health toneAmber
class node_user_model,node_quote_model,node_saved_model,node_like_model,node_tag_model toneMint
class node_mongo,node_cloudinary_util,node_cloudinary,node_db_connect toneRose
```

## Components

### React experience

- [Client routes](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/App.js): `client/src/App.js`
- [Quote search](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/SearchResultsPage.js): `client/src/pages/SearchResultsPage.js`
- [Quote cards](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/components/quoteCard.js): `client/src/components/quoteCard.js`
- [Account pages](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/loginPage.js): `client/src/pages/loginPage.js`
- [User dashboards](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/UserDashboard.js): `client/src/pages/UserDashboard.js`
- [Quote posting](https://github.com/saeetarde/soullines_quotes/blob/main/client/src/pages/AddPost.js): `client/src/pages/AddPost.js`

### HTTP API

- [HTTP server](https://github.com/saeetarde/soullines_quotes/blob/main/server/app.js): `server/app.js`
- [User endpoints](https://github.com/saeetarde/soullines_quotes/blob/main/server/routes/user.routes.js): `server/routes/user.routes.js`
- [JWT verification](https://github.com/saeetarde/soullines_quotes/blob/main/server/middlewares/auth.middlewares.js): `server/middlewares/auth.middlewares.js`
- [User workflows](https://github.com/saeetarde/soullines_quotes/blob/main/server/controllers/user.controllers.js): `server/controllers/user.controllers.js`
- [Health endpoint](https://github.com/saeetarde/soullines_quotes/blob/main/server/controllers/healthCheck.controller.js): `server/controllers/healthCheck.controller.js`

### Quote domain

- [User records](https://github.com/saeetarde/soullines_quotes/blob/main/server/models/user.models.js): `server/models/user.models.js`
- [Quote posts](https://github.com/saeetarde/soullines_quotes/blob/main/server/models/quotePost.models.js): `server/models/quotePost.models.js`
- [Saved quotes](https://github.com/saeetarde/soullines_quotes/blob/main/server/models/savedQuote.models.js): `server/models/savedQuote.models.js`
- [Quote likes](https://github.com/saeetarde/soullines_quotes/blob/main/server/models/like.models.js): `server/models/like.models.js`
- [Interest tags](https://github.com/saeetarde/soullines_quotes/blob/main/server/models/tag.models.js): `server/models/tag.models.js`

### Persistence and media

- **MongoDB**
- [Media uploader](https://github.com/saeetarde/soullines_quotes/blob/main/server/utils/cloudinary.js): `server/utils/cloudinary.js`
- **Cloudinary**
- [Database connection](https://github.com/saeetarde/soullines_quotes/blob/main/server/db/index.js): `server/db/index.js`

### Other components

- **User**

## Connections

- User → Client routes: uses
- Client routes → Quote search: routes to
- Client routes → Account pages: routes to
- Client routes → User dashboards: routes to
- Client routes → Quote posting: routes to
- Quote search → HTTP server: requests search
- Quote search → Quote cards: renders results
- Quote posting → HTTP server: submits quote
- User dashboards → HTTP server: requests dashboard
- Account pages → HTTP server: requests account
- HTTP server → User endpoints: mounts endpoints
- HTTP server → Health endpoint: mounts health
- User endpoints → JWT verification: guards requests
- User endpoints → User workflows: dispatches
- Database connection → MongoDB: connects
- User workflows → User records: reads and writes
- User workflows → Quote posts: reads and writes
- User workflows → Saved quotes: reads and writes
- User workflows → Quote likes: reads and writes
- User workflows → Interest tags: reads and writes
- JWT verification → User records: loads user
- User workflows → Media uploader: uploads images
- Media uploader → Cloudinary: stores media
