# dheerajll/meetq architecture

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

## Overview

MeetQ turns LMA transcript chunks into cleaned transcripts, hierarchical summaries with structured meeting insights, and searchable meeting knowledge. The main workflow is LMA streaming through WebSockets, background meeting processing, then user-facing meeting and RAG features in the frontend. PostgreSQL holds meeting, transcript, summary, and embedding data; Ollama supplies local language-model inference and embeddings. The README documents the major processing capabilities; some endpoint and processing internals were not sampled, so uncertain call wiring is omitted.

Main entry points: [`frontend/src/lib/api.js`](https://github.com/dheerajll/meetq/blob/main/frontend/src/lib/api.js) (API client), [`backend/app/ws/lma_handler.py`](https://github.com/dheerajll/meetq/blob/main/backend/app/ws/lma_handler.py) (Chunk receiver), [`backend/app/services/cleaning/pipeline.py`](https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/pipeline.py) (Transcript cleaning), [`backend/app/services/summarization/pipeline.py`](https://github.com/dheerajll/meetq/blob/main/backend/app/services/summarization/pipeline.py) (Summary pipeline)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Web client"]
  node_frontend["MeetQ interface<br/>[page.jsx]"]
  node_meeting_ui["Meeting views<br/>[page.jsx]"]
  node_query_ui["Query view<br/>[page.jsx]"]
  node_api_client["API client<br/>[api.js]"]
end

subgraph group_ingest["LMA ingestion"]
  node_ws_endpoint["LMA WebSocket endpoint<br/>[endpoints.py]"]
  node_lma_handler["Chunk receiver<br/>[lma_handler.py]"]
  node_ws_manager["Connection manager<br/>[manager.py]"]
end

subgraph group_processing["Transcript processing"]
  node_meeting_processing["Processing coordinator"]
  node_cleaning["Transcript cleaning<br/>[pipeline.py]"]
  node_clean_modes["Cleaning methods<br/>[overlap.py]"]
  node_clean_llm["LLM cleaning<br/>[llm_inference.py]"]
  node_summarization["Summary pipeline<br/>[pipeline.py]"]
  node_summary_stages["Summary stages<br/>[hierarchical.py]"]
  node_ollama_client["Ollama client<br/>[ollama_client.py]"]
end

subgraph group_query["Meeting search"]
  node_rag_api["RAG API<br/>[rag.py]"]
  node_query_parser["Time query parser<br/>[query_parser.py]"]
  node_rag_service["RAG service<br/>[rag_service.py]"]
  node_embeddings["Embedding client<br/>[embeddings.py]"]
end

subgraph group_platform["Backend platform"]
  node_meeting_api["Meeting API<br/>[meetings.py]"]
  node_auth_api["Authentication API<br/>[auth.py]"]
end

node_user(("Meeting user"))
node_lma(("Local Meeting Agent"))
node_database[("PostgreSQL")]
node_ollama(("Ollama service"))

node_user -->|"uses"| node_frontend
node_user -->|"views meetings"| node_meeting_ui
node_user -->|"asks questions"| node_query_ui
node_frontend -->|"requests data"| node_api_client
node_meeting_ui -->|"requests meetings"| node_api_client
node_query_ui -->|"submits queries"| node_api_client
node_api_client -->|"calls"| node_meeting_api
node_api_client -->|"calls"| node_auth_api
node_api_client -->|"calls"| node_rag_api
node_lma -->|"streams chunks"| node_ws_endpoint
node_ws_endpoint -->|"dispatches"| node_lma_handler
node_lma_handler -->|"registers connection"| node_ws_manager
node_lma_handler -->|"stores chunks"| node_database
node_lma_handler -->|"starts on disconnect"| node_meeting_processing
node_meeting_processing -->|"runs cleaning"| node_cleaning
node_meeting_processing -->|"runs summarization"| node_summarization
node_cleaning -->|"cleans English"| node_clean_modes
node_cleaning -->|"cleans mixed speech"| node_clean_llm
node_cleaning -->|"reads and writes chunks"| node_database
node_clean_llm -->|"requests inference"| node_ollama_client
node_summarization -->|"summarizes and extracts"| node_summary_stages
node_summarization -->|"reads chunks, saves summary"| node_database
node_summarization -->|"requests generation"| node_ollama_client
node_ollama_client -->|"generates text"| node_ollama
node_rag_api -->|"parses query"| node_query_parser
node_rag_api -->|"searches meetings"| node_rag_service
node_rag_service -->|"embeds query and chunks"| node_embeddings
node_rag_service -->|"stores vectors, retrieves chunks"| node_database
node_embeddings -->|"requests embeddings"| node_ollama

click node_frontend "https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/page.jsx"
click node_meeting_ui "https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/meetings/page.jsx"
click node_query_ui "https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/query/page.jsx"
click node_api_client "https://github.com/dheerajll/meetq/blob/main/frontend/src/lib/api.js"
click node_ws_endpoint "https://github.com/dheerajll/meetq/blob/main/backend/app/ws/endpoints.py"
click node_lma_handler "https://github.com/dheerajll/meetq/blob/main/backend/app/ws/lma_handler.py"
click node_ws_manager "https://github.com/dheerajll/meetq/blob/main/backend/app/ws/manager.py"
click node_meeting_processing "https://github.com/dheerajll/meetq/blob/main/backend/app/services/meeting_processing.py"
click node_cleaning "https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/pipeline.py"
click node_clean_modes "https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/overlap.py"
click node_clean_llm "https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/llm_inference.py"
click node_summarization "https://github.com/dheerajll/meetq/blob/main/backend/app/services/summarization/pipeline.py"
click node_summary_stages "https://github.com/dheerajll/meetq/blob/main/backend/app/services/summarization/hierarchical.py"
click node_meeting_api "https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/meetings.py"
click node_auth_api "https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/auth.py"
click node_rag_api "https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/rag.py"
click node_query_parser "https://github.com/dheerajll/meetq/blob/main/backend/app/services/query_parser.py"
click node_rag_service "https://github.com/dheerajll/meetq/blob/main/backend/app/services/rag_service.py"
click node_embeddings "https://github.com/dheerajll/meetq/blob/main/backend/app/ai/embeddings.py"
click node_ollama_client "https://github.com/dheerajll/meetq/blob/main/backend/app/ai/ollama_client.py"

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_meeting_ui,node_query_ui,node_api_client,node_user toneBlue
class node_ws_endpoint,node_lma_handler,node_ws_manager,node_database toneAmber
class node_meeting_processing,node_cleaning,node_clean_modes,node_clean_llm,node_summarization,node_summary_stages,node_ollama_client toneMint
class node_rag_api,node_query_parser,node_rag_service,node_embeddings toneRose
class node_meeting_api,node_auth_api,node_lma,node_ollama toneIndigo
```

## Components

### Web client

- [MeetQ interface](https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/page.jsx): `frontend/src/app/(dashboard)/page.jsx`
- [Meeting views](https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/meetings/page.jsx): `frontend/src/app/(dashboard)/meetings/page.jsx`
- [Query view](https://github.com/dheerajll/meetq/blob/main/frontend/src/app/(dashboard)/query/page.jsx): `frontend/src/app/(dashboard)/query/page.jsx`
- [API client](https://github.com/dheerajll/meetq/blob/main/frontend/src/lib/api.js): `frontend/src/lib/api.js`

### LMA ingestion

- [LMA WebSocket endpoint](https://github.com/dheerajll/meetq/blob/main/backend/app/ws/endpoints.py): `backend/app/ws/endpoints.py`
- [Chunk receiver](https://github.com/dheerajll/meetq/blob/main/backend/app/ws/lma_handler.py): `backend/app/ws/lma_handler.py`
- [Connection manager](https://github.com/dheerajll/meetq/blob/main/backend/app/ws/manager.py): `backend/app/ws/manager.py`

### Transcript processing

- [Processing coordinator](https://github.com/dheerajll/meetq/blob/main/backend/app/services/meeting_processing.py): `backend/app/services/meeting_processing.py`
- [Transcript cleaning](https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/pipeline.py): `backend/app/services/cleaning/pipeline.py`
- [Cleaning methods](https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/overlap.py): `backend/app/services/cleaning/overlap.py`
- [LLM cleaning](https://github.com/dheerajll/meetq/blob/main/backend/app/services/cleaning/llm_inference.py): `backend/app/services/cleaning/llm_inference.py`
- [Summary pipeline](https://github.com/dheerajll/meetq/blob/main/backend/app/services/summarization/pipeline.py): `backend/app/services/summarization/pipeline.py`
- [Summary stages](https://github.com/dheerajll/meetq/blob/main/backend/app/services/summarization/hierarchical.py): `backend/app/services/summarization/hierarchical.py`
- [Ollama client](https://github.com/dheerajll/meetq/blob/main/backend/app/ai/ollama_client.py): `backend/app/ai/ollama_client.py`

### Meeting search

- [RAG API](https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/rag.py): `backend/app/api/v1/rag.py`
- [Time query parser](https://github.com/dheerajll/meetq/blob/main/backend/app/services/query_parser.py): `backend/app/services/query_parser.py`
- [RAG service](https://github.com/dheerajll/meetq/blob/main/backend/app/services/rag_service.py): `backend/app/services/rag_service.py`
- [Embedding client](https://github.com/dheerajll/meetq/blob/main/backend/app/ai/embeddings.py): `backend/app/ai/embeddings.py`

### Backend platform

- [Meeting API](https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/meetings.py): `backend/app/api/v1/meetings.py`
- [Authentication API](https://github.com/dheerajll/meetq/blob/main/backend/app/api/v1/auth.py): `backend/app/api/v1/auth.py`

### Other components

- **Meeting user**
- **Local Meeting Agent**
- **PostgreSQL**
- **Ollama service**

## Connections

- Meeting user → MeetQ interface: uses
- Meeting user → Meeting views: views meetings
- Meeting user → Query view: asks questions
- MeetQ interface → API client: requests data
- Meeting views → API client: requests meetings
- Query view → API client: submits queries
- API client → Meeting API: calls
- API client → Authentication API: calls
- API client → RAG API: calls
- Local Meeting Agent → LMA WebSocket endpoint: streams chunks
- LMA WebSocket endpoint → Chunk receiver: dispatches
- Chunk receiver → Connection manager: registers connection
- Chunk receiver → PostgreSQL: stores chunks
- Chunk receiver → Processing coordinator: starts on disconnect
- Processing coordinator → Transcript cleaning: runs cleaning
- Processing coordinator → Summary pipeline: runs summarization
- Transcript cleaning → Cleaning methods: cleans English
- Transcript cleaning → LLM cleaning: cleans mixed speech
- Transcript cleaning → PostgreSQL: reads and writes chunks
- LLM cleaning → Ollama client: requests inference
- Summary pipeline → Summary stages: summarizes and extracts
- Summary pipeline → PostgreSQL: reads chunks, saves summary
- Summary pipeline → Ollama client: requests generation
- Ollama client → Ollama service: generates text
- RAG API → Time query parser: parses query
- RAG API → RAG service: searches meetings
- RAG service → Embedding client: embeds query and chunks
- RAG service → PostgreSQL: stores vectors, retrieves chunks
- Embedding client → Ollama service: requests embeddings
