# mani-navi/duta architecture

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

- Interactive diagram: https://gitdiagram.com/mani-navi/duta
- Repository: https://github.com/mani-navi/duta

## Overview

Duta is a Persian-language news aggregation and credibility platform. News sources are polled, articles are classified and clustered, and event credibility is scored before representative stories are served through REST APIs to the web app; users can also personalize feeds and inspect coverage. The README documents market prices, SEO metadata and Telegram delivery as additional capabilities. The graph follows shown imports and calls where available; some capability links rely on README statements because their implementation was not sampled.

Main entry points: [`Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java) (RSS ingestion), [`Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java`](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java) (Article API), [`Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java`](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java) (Article services), [`Frontend/V.1.0/newsgrid-frontend/src/api/axiosConfig.js`](https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/api/axiosConfig.js) (REST client)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Ingestion and analysis"]
  node_ingest_rss["RSS ingestion"]
  node_classifier["Category classifier"]
  node_clustering["Article clustering"]
  node_scoring["Credibility scoring"]
end

subgraph group_api["Backend services"]
  node_article_api["Article API"]
  node_article_service["Article services"]
  node_personalization["Personalized feeds"]
  node_auth_api["Auth and users"]
  node_user_service["User service<br/>[UserService.java]"]
  node_jwt["JWT service<br/>[JwtService.java]"]
  node_prices["Market prices<br/>[PriceService.java]"]
  node_article_repo["Article repository"]
  node_article_store[("Article and cluster data<br/>[Article.java]")]
end

subgraph group_web["Web experience"]
  node_web_app["Web application<br/>[App.jsx]"]
  node_user_context["User preferences<br/>[UserContext.jsx]"]
  node_api_client["REST client<br/>[axiosConfig.js]"]
end

subgraph group_telegram["Telegram bot"]
  node_telegram_engine["Fetch and cluster engine"]
  node_telegram_db[("Bot data store<br/>[db.js]")]
  node_telegram_tablo["Tablo service<br/>[tabloService.js]"]
end

node_reader(("News reader"))
node_news_sources["News sources"]

node_reader -->|"opens"| node_web_app
node_web_app -->|"requests"| node_api_client
node_api_client -->|"calls REST"| node_article_api
node_ingest_rss -->|"fetches feeds"| node_news_sources
node_ingest_rss -->|"classifies stories"| node_classifier
node_ingest_rss -->|"clusters stories"| node_clustering
node_ingest_rss -->|"persists articles"| node_article_service
node_clustering -.->|"scores coverage"| node_scoring
node_article_api -->|"delegates"| node_article_service
node_article_api -->|"gets feed"| node_personalization
node_article_service -->|"queries"| node_article_repo
node_article_repo -->|"reads articles"| node_article_store
node_auth_api -->|"delegates"| node_user_service
node_user_service -->|"uses tokens"| node_jwt
node_user_context -->|"loads profile"| node_api_client
node_article_api -.->|"serves prices"| node_prices
node_telegram_engine -->|"reads and writes"| node_telegram_db
node_news_sources -.->|"supplies sources"| node_telegram_engine

click node_web_app "https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/App.jsx"
click node_user_context "https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/context/UserContext.jsx"
click node_api_client "https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/api/axiosConfig.js"
click node_ingest_rss "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java"
click node_classifier "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/CategoryClassifierService.java"
click node_clustering "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ClusteringService.java"
click node_scoring "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ScoringService.java"
click node_article_api "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java"
click node_article_service "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java"
click node_personalization "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PersonalizationService.java"
click node_auth_api "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/AuthAndUserController.java"
click node_user_service "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/UserService.java"
click node_jwt "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/JwtService.java"
click node_prices "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PriceService.java"
click node_article_repo "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/repository/ArticleRepository.java"
click node_article_store "https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/entity/Article.java"
click node_telegram_engine "https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/fetcherAndClusterEngine.js"
click node_telegram_db "https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/db.js"
click node_telegram_tablo "https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/tabloService.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_ingest_rss,node_classifier,node_clustering,node_scoring toneBlue
class node_article_api,node_article_service,node_personalization,node_auth_api,node_user_service,node_jwt,node_prices,node_article_repo,node_article_store toneAmber
class node_web_app,node_user_context,node_api_client toneMint
class node_telegram_engine,node_telegram_db,node_telegram_tablo toneRose
class node_reader,node_news_sources toneIndigo
```

## Components

### Ingestion and analysis

- [RSS ingestion](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`
- [Category classifier](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/CategoryClassifierService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/CategoryClassifierService.java`
- [Article clustering](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ClusteringService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ClusteringService.java`
- [Credibility scoring](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ScoringService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ScoringService.java`

### Backend services

- [Article API](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java`
- [Article services](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java`
- [Personalized feeds](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PersonalizationService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PersonalizationService.java`
- [Auth and users](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/AuthAndUserController.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/AuthAndUserController.java`
- [User service](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/UserService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/UserService.java`
- [JWT service](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/JwtService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/JwtService.java`
- [Market prices](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PriceService.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/PriceService.java`
- [Article repository](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/repository/ArticleRepository.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/repository/ArticleRepository.java`
- [Article and cluster data](https://github.com/mani-navi/duta/blob/main/Backend/V.1.0/src/main/java/com/NewsGrid/V10/entity/Article.java): `Backend/V.1.0/src/main/java/com/NewsGrid/V10/entity/Article.java`

### Web experience

- [Web application](https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/App.jsx): `Frontend/V.1.0/newsgrid-frontend/src/App.jsx`
- [User preferences](https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/context/UserContext.jsx): `Frontend/V.1.0/newsgrid-frontend/src/context/UserContext.jsx`
- [REST client](https://github.com/mani-navi/duta/blob/main/Frontend/V.1.0/newsgrid-frontend/src/api/axiosConfig.js): `Frontend/V.1.0/newsgrid-frontend/src/api/axiosConfig.js`

### Telegram bot

- [Fetch and cluster engine](https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/fetcherAndClusterEngine.js): `TelegramBot/duta-bot/src/fetcherAndClusterEngine.js`
- [Bot data store](https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/db.js): `TelegramBot/duta-bot/src/db.js`
- [Tablo service](https://github.com/mani-navi/duta/blob/main/TelegramBot/duta-bot/src/tabloService.js): `TelegramBot/duta-bot/src/tabloService.js`

### Other components

- **News reader**
- **News sources**

## Connections

- News reader → Web application: opens
- Web application → REST client: requests (evidence: `Frontend/V.1.0/newsgrid-frontend/src/App.jsx`)
- REST client → Article API: calls REST
- RSS ingestion → News sources: fetches feeds (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`)
- RSS ingestion → Category classifier: classifies stories (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`)
- RSS ingestion → Article clustering: clusters stories (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`)
- RSS ingestion → Article services: persists articles (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/RssFetcherService.java`)
- Article clustering → Credibility scoring: scores coverage
- Article API → Article services: delegates (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java`)
- Article API → Personalized feeds: gets feed (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/ArticleController.java`)
- Article services → Article repository: queries (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/ArticleService.java`)
- Article repository → Article and cluster data: reads articles (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/repository/ArticleRepository.java`)
- Auth and users → User service: delegates (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/controller/AuthAndUserController.java`)
- User service → JWT service: uses tokens (evidence: `Backend/V.1.0/src/main/java/com/NewsGrid/V10/service/UserService.java`)
- User preferences → REST client: loads profile (evidence: `Frontend/V.1.0/newsgrid-frontend/src/context/UserContext.jsx`)
- Article API → Market prices: serves prices
- Fetch and cluster engine → Bot data store: reads and writes (evidence: `TelegramBot/duta-bot/src/fetcherAndClusterEngine.js`)
- News sources → Fetch and cluster engine: supplies sources
