# hrmaulana/mih-ai-platform architecture

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

- Interactive diagram: https://gitdiagram.com/hrmaulana/mih-ai-platform
- Repository: https://github.com/hrmaulana/mih-ai-platform

## Overview

MVP MIH combines a public planning portal with an internal document-ingestion and RAG question-answering platform, plus a news-monitoring workflow. The documented user path is to add documents, let the worker ingest them, then ask questions through the playground or token-authenticated API; admins also manage access and documents. Source excerpts establish the RAG, ingestion, sentiment-analysis, and RSS-crawl calls shown here. Other frontend features are retained from the README and tree, but their unsampled wiring is not expanded.

Main entry points: [`frontend/src/App.tsx`](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/App.tsx) (Web application), [`backend/src/app.ts`](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/app.ts) (HTTP application), [`worker/ingest.py`](https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/ingest.py) (Ingestion worker), [`backend/src/services/rag.ts`](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/services/rag.ts) (RAG retrieval)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_portal["Portal and UI"]
  node_frontend["Web application<br/>[App.tsx]"]
  node_portal_pages["Public portal"]
  node_playground["RAG playground<br/>[Playground.tsx]"]
  node_document_ui["Document admin<br/>[Documents.tsx]"]
  node_admin_ui["Admin console<br/>[Admin.tsx]"]
  node_warning_ui["News dashboards<br/>[EarlyWarning.tsx]"]
end

subgraph group_api["Application API"]
  node_http_api["HTTP application<br/>[app.ts]"]
  node_ask_route["Ask and chat<br/>[ask.ts]"]
  node_document_routes["Document routes<br/>[documents.ts]"]
  node_admin_routes["Admin routes<br/>[admin.ts]"]
  node_rag["RAG retrieval<br/>[rag.ts]"]
  node_llm["Answer generation<br/>[llm.ts]"]
end

subgraph group_ingest["Document pipeline"]
  node_worker["Ingestion worker<br/>[ingest.py]"]
  node_parsers["File parsers"]
  node_chunking["Text chunking<br/>[chunking.py]"]
  node_embeddings["Vector embeddings<br/>[embedding.py]"]
  node_vector_store[("Document store<br/>[db.py]")]
end

subgraph group_news["News monitoring"]
  node_crawler["RSS crawler<br/>[routes.ts]"]
  node_sentiment["Sentiment analysis<br/>[routes.ts]"]
  node_article_views["Article analytics<br/>[routes.ts]"]
end

subgraph group_external["External systems"]
  node_rss_feeds["RSS feeds"]
  node_model_service["LLM provider"]
  node_document_sources["Document sources"]
end

node_visitor(("Portal visitor"))
node_api_user(("API user"))

node_visitor -->|"uses portal"| node_frontend
node_api_user -->|"posts question"| node_ask_route
node_frontend -->|"renders pages"| node_portal_pages
node_frontend -->|"opens"| node_playground
node_frontend -->|"opens"| node_document_ui
node_frontend -->|"opens"| node_admin_ui
node_frontend -->|"opens"| node_warning_ui
node_playground -->|"sends requests"| node_http_api
node_document_ui -->|"manages documents"| node_http_api
node_admin_ui -->|"manages access"| node_http_api
node_http_api -->|"dispatches"| node_ask_route
node_http_api -->|"dispatches"| node_document_routes
node_http_api -->|"dispatches"| node_admin_routes
node_ask_route -->|"requests answers"| node_rag
node_rag -->|"embeds query"| node_embeddings
node_rag -->|"searches chunks"| node_vector_store
node_rag -->|"generates answer"| node_llm
node_llm -.->|"calls model"| node_model_service
node_document_sources -->|"supplies files"| node_worker
node_worker -->|"extracts text"| node_parsers
node_worker -->|"chunks segments"| node_chunking
node_worker -->|"embeds chunks"| node_embeddings
node_worker -->|"stores chunks"| node_vector_store
node_crawler -->|"fetches feeds"| node_rss_feeds
node_crawler -.->|"scores articles"| node_sentiment
node_crawler -->|"stores alerts"| node_vector_store
node_article_views -->|"reads articles"| node_vector_store
node_sentiment -.->|"analyzes ambiguous text"| node_model_service

click node_frontend "https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/App.tsx"
click node_portal_pages "https://github.com/hrmaulana/mih-ai-platform/tree/master/frontend/src/pages/portal"
click node_playground "https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Playground.tsx"
click node_document_ui "https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Documents.tsx"
click node_admin_ui "https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Admin.tsx"
click node_warning_ui "https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/portal/EarlyWarning.tsx"
click node_http_api "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/app.ts"
click node_ask_route "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/ask.ts"
click node_document_routes "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/documents.ts"
click node_admin_routes "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/admin.ts"
click node_rag "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/services/rag.ts"
click node_llm "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/services/llm.ts"
click node_worker "https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/ingest.py"
click node_parsers "https://github.com/hrmaulana/mih-ai-platform/tree/master/worker/parsers"
click node_chunking "https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/chunking.py"
click node_embeddings "https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/embedding.py"
click node_vector_store "https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/db.py"
click node_crawler "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/crawler/src/routes.ts"
click node_sentiment "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/analisis/src/routes.ts"
click node_article_views "https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/artikel/src/routes.ts"

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_frontend,node_portal_pages,node_playground,node_document_ui,node_admin_ui,node_warning_ui,node_api_user toneBlue
class node_http_api,node_ask_route,node_document_routes,node_admin_routes,node_rag,node_llm toneAmber
class node_worker,node_parsers,node_chunking,node_embeddings,node_vector_store toneMint
class node_crawler,node_sentiment,node_article_views toneRose
class node_rss_feeds,node_model_service,node_document_sources,node_visitor toneIndigo
```

## Components

### Portal and UI

- [Web application](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/App.tsx): `frontend/src/App.tsx`
- [Public portal](https://github.com/hrmaulana/mih-ai-platform/tree/master/frontend/src/pages/portal): `frontend/src/pages/portal`
- [RAG playground](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Playground.tsx): `frontend/src/pages/Playground.tsx`
- [Document admin](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Documents.tsx): `frontend/src/pages/Documents.tsx`
- [Admin console](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/Admin.tsx): `frontend/src/pages/Admin.tsx`
- [News dashboards](https://github.com/hrmaulana/mih-ai-platform/blob/master/frontend/src/pages/portal/EarlyWarning.tsx): `frontend/src/pages/portal/EarlyWarning.tsx`

### Application API

- [HTTP application](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/app.ts): `backend/src/app.ts`
- [Ask and chat](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/ask.ts): `backend/src/routes/ask.ts`
- [Document routes](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/documents.ts): `backend/src/routes/documents.ts`
- [Admin routes](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/routes/admin.ts): `backend/src/routes/admin.ts`
- [RAG retrieval](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/services/rag.ts): `backend/src/services/rag.ts`
- [Answer generation](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/src/services/llm.ts): `backend/src/services/llm.ts`

### Document pipeline

- [Ingestion worker](https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/ingest.py): `worker/ingest.py`
- [File parsers](https://github.com/hrmaulana/mih-ai-platform/tree/master/worker/parsers): `worker/parsers`
- [Text chunking](https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/chunking.py): `worker/chunking.py`
- [Vector embeddings](https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/embedding.py): `worker/embedding.py`
- [Document store](https://github.com/hrmaulana/mih-ai-platform/blob/master/worker/db.py): `worker/db.py`

### News monitoring

- [RSS crawler](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/crawler/src/routes.ts): `backend/services/crawler/src/routes.ts`
- [Sentiment analysis](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/analisis/src/routes.ts): `backend/services/analisis/src/routes.ts`
- [Article analytics](https://github.com/hrmaulana/mih-ai-platform/blob/master/backend/services/artikel/src/routes.ts): `backend/services/artikel/src/routes.ts`

### External systems

- **RSS feeds**
- **LLM provider**
- **Document sources**

### Other components

- **Portal visitor**
- **API user**

## Connections

- Portal visitor → Web application: uses portal
- API user → Ask and chat: posts question
- Web application → Public portal: renders pages
- Web application → RAG playground: opens
- Web application → Document admin: opens
- Web application → Admin console: opens
- Web application → News dashboards: opens
- RAG playground → HTTP application: sends requests
- Document admin → HTTP application: manages documents
- Admin console → HTTP application: manages access
- HTTP application → Ask and chat: dispatches
- HTTP application → Document routes: dispatches
- HTTP application → Admin routes: dispatches
- Ask and chat → RAG retrieval: requests answers
- RAG retrieval → Vector embeddings: embeds query
- RAG retrieval → Document store: searches chunks
- RAG retrieval → Answer generation: generates answer
- Answer generation → LLM provider: calls model
- Document sources → Ingestion worker: supplies files
- Ingestion worker → File parsers: extracts text
- Ingestion worker → Text chunking: chunks segments
- Ingestion worker → Vector embeddings: embeds chunks
- Ingestion worker → Document store: stores chunks
- RSS crawler → RSS feeds: fetches feeds
- RSS crawler → Sentiment analysis: scores articles
- RSS crawler → Document store: stores alerts
- Article analytics → Document store: reads articles
- Sentiment analysis → LLM provider: analyzes ambiguous text
