# vaishnavimd/ai-meet-summerizer-using-rag- architecture

> Architecture diagram of the GitHub repository vaishnavimd/ai-meet-summerizer-using-rag-, 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/vaishnavimd/ai-meet-summerizer-using-rag-
- Repository: https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-

## Overview

AI Meeting Summarizer turns uploaded recordings into searchable transcripts, meeting Q&A, and structured minutes. The principal workflow runs from browser upload through Flask job orchestration, video/audio conversion, Whisper transcription, transcript chunking and embedding, then persists meeting data for results. Separate request paths retrieve relevant chunks for Q&A or generate MOM documents; the React results view presents the minutes and supports follow-up questions. The README documents these capabilities; several backend and UI excerpts are partial, so uncertain internal wiring is omitted.

Main entry points: [`app.py`](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/app.py) (Flask API), [`pipeline.py`](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/pipeline.py) (Pipeline orchestrator), [`qa_engine.py`](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/qa_engine.py) (Retrieval and MOM), [`frontend/meeting-summarizer-integrated/src/App.jsx`](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/App.jsx) (App state flow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Meeting Interface"]
  node_react["React entry<br/>[main.jsx]"]
  node_app_ui["App state flow<br/>[App.jsx]"]
  node_upload["Video upload<br/>[FileUpload.jsx]"]
  node_processing["Job progress"]
  node_dashboard["Results dashboard<br/>[Dashboard.jsx]"]
  node_mom_display["Minutes display<br/>[MomDisplay.jsx]"]
  node_chat["Meeting Q&amp;A chat<br/>[ChatBox.jsx]"]
end

subgraph group_backend["API and Jobs"]
  node_flask["Flask API<br/>[app.py]"]
  node_jobs[("Job registry<br/>[app.py]")]
  node_pipeline["Pipeline orchestrator<br/>[pipeline.py]"]
end

subgraph group_ingestion["Recording Ingestion"]
  node_convert["Video conversion<br/>[video_to_audio.py]"]
  node_transcribe["Speech transcription<br/>[transcriber.py]"]
  node_chunking["Chunk and embed<br/>[chunk_embedder.py]"]
end

subgraph group_analysis["Meeting Analysis"]
  node_qa["Retrieval and MOM<br/>[qa_engine.py]"]
end

node_user(("Meeting user"))
node_ffmpeg{{"FFmpeg"}}
node_whisper{{"Whisper"}}
node_ollama{{"Ollama service"}}
node_chunks["Embedded chunks"]
node_transcript["Transcript data"]
node_mom["MOM document"]

node_user -->|"uses"| node_react
node_react -->|"renders"| node_app_ui
node_app_ui -->|"shows upload"| node_upload
node_upload -->|"uploads video"| node_flask
node_flask -->|"tracks job"| node_jobs
node_flask -->|"starts ingestion"| node_pipeline
node_pipeline -->|"converts video"| node_convert
node_convert -->|"uses"| node_ffmpeg
node_pipeline -->|"transcribes audio"| node_transcribe
node_transcribe -->|"transcribes with"| node_whisper
node_pipeline -->|"builds and embeds"| node_chunking
node_chunking -->|"requests embeddings"| node_ollama
node_chunking -->|"persists chunks"| node_chunks
node_transcribe -->|"writes transcript"| node_transcript
node_flask -->|"generates MOM"| node_qa
node_pipeline -->|"answers or generates"| node_qa
node_qa -->|"retrieves chunks"| node_chunks
node_qa -->|"requests generation"| node_ollama
node_qa -->|"writes MOM"| node_mom
node_flask -->|"serves job status"| node_processing
node_processing -->|"polls status"| node_flask
node_flask -->|"returns results"| node_app_ui
node_app_ui -->|"shows results"| node_dashboard
node_dashboard -->|"displays minutes"| node_mom_display
node_dashboard -->|"shows Q&amp;A"| node_chat
node_chat -->|"asks question"| node_flask
node_flask -->|"resolves meeting"| node_jobs
node_flask -->|"requests answer"| node_pipeline
node_flask -->|"serves download"| node_mom

click node_react "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/main.jsx"
click node_app_ui "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/App.jsx"
click node_upload "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/FileUpload.jsx"
click node_processing "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/ProcessingLoader.jsx"
click node_dashboard "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/pages/Dashboard.jsx"
click node_mom_display "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/MomDisplay.jsx"
click node_chat "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/ChatBox.jsx"
click node_flask "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/app.py"
click node_jobs "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/app.py"
click node_pipeline "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/pipeline.py"
click node_convert "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/video_to_audio.py"
click node_transcribe "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/transcriber.py"
click node_chunking "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/chunk_embedder.py"
click node_qa "https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/qa_engine.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_react,node_app_ui,node_upload,node_processing,node_dashboard,node_mom_display,node_chat,node_user toneBlue
class node_flask,node_jobs,node_pipeline toneAmber
class node_convert,node_transcribe,node_chunking toneMint
class node_qa toneRose
class node_ffmpeg,node_whisper,node_ollama,node_chunks,node_transcript,node_mom toneIndigo
```

## Components

### Meeting Interface

- [React entry](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/main.jsx): `frontend/meeting-summarizer-integrated/src/main.jsx`
- [App state flow](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/App.jsx): `frontend/meeting-summarizer-integrated/src/App.jsx`
- [Video upload](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/FileUpload.jsx): `frontend/meeting-summarizer-integrated/src/components/FileUpload.jsx`
- [Job progress](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/ProcessingLoader.jsx): `frontend/meeting-summarizer-integrated/src/components/ProcessingLoader.jsx`
- [Results dashboard](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/pages/Dashboard.jsx): `frontend/meeting-summarizer-integrated/src/pages/Dashboard.jsx`
- [Minutes display](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/MomDisplay.jsx): `frontend/meeting-summarizer-integrated/src/components/MomDisplay.jsx`
- [Meeting Q&A chat](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/frontend/meeting-summarizer-integrated/src/components/ChatBox.jsx): `frontend/meeting-summarizer-integrated/src/components/ChatBox.jsx`

### API and Jobs

- [Flask API](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/app.py): `app.py`
- [Job registry](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/app.py): `app.py`
- [Pipeline orchestrator](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/pipeline.py): `pipeline.py`

### Recording Ingestion

- [Video conversion](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/video_to_audio.py): `video_to_audio.py`
- [Speech transcription](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/transcriber.py): `transcriber.py`
- [Chunk and embed](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/chunk_embedder.py): `chunk_embedder.py`

### Meeting Analysis

- [Retrieval and MOM](https://github.com/vaishnavimd/ai-meet-summerizer-using-rag-/blob/main/qa_engine.py): `qa_engine.py`

### Other components

- **Meeting user**
- **FFmpeg**
- **Whisper**
- **Ollama service**
- **Embedded chunks**
- **Transcript data**
- **MOM document**

## Connections

- Meeting user → React entry: uses
- React entry → App state flow: renders
- App state flow → Video upload: shows upload
- Video upload → Flask API: uploads video
- Flask API → Job registry: tracks job
- Flask API → Pipeline orchestrator: starts ingestion
- Pipeline orchestrator → Video conversion: converts video
- Video conversion → FFmpeg: uses
- Pipeline orchestrator → Speech transcription: transcribes audio
- Speech transcription → Whisper: transcribes with
- Pipeline orchestrator → Chunk and embed: builds and embeds
- Chunk and embed → Ollama service: requests embeddings
- Chunk and embed → Embedded chunks: persists chunks
- Speech transcription → Transcript data: writes transcript
- Flask API → Retrieval and MOM: generates MOM
- Pipeline orchestrator → Retrieval and MOM: answers or generates
- Retrieval and MOM → Embedded chunks: retrieves chunks
- Retrieval and MOM → Ollama service: requests generation
- Retrieval and MOM → MOM document: writes MOM
- Flask API → Job progress: serves job status
- Job progress → Flask API: polls status
- Flask API → App state flow: returns results
- App state flow → Results dashboard: shows results
- Results dashboard → Minutes display: displays minutes
- Results dashboard → Meeting Q&A chat: shows Q&A
- Meeting Q&A chat → Flask API: asks question
- Flask API → Job registry: resolves meeting
- Flask API → Pipeline orchestrator: requests answer
- Flask API → MOM document: serves download
