# ashishch01/meeting-recorder-bot architecture

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

- Interactive diagram: https://gitdiagram.com/ashishch01/meeting-recorder-bot
- Repository: https://github.com/ashishch01/meeting-recorder-bot

## Overview

MeetIQ records Google Meet and Zoom calls, then turns recordings into searchable transcripts, summaries, action items, and chat. The main workflow runs from a user meeting request through backend dispatch and bot recording, upload, transcription, and frontend review. Calendar scheduling, AI chat, billing, and recorder-pool management are distinct capabilities. The README documents the end-to-end flow; sampled source confirms webhook handoff, transcript indexing, chat tools, and bot recording details, but not every connection shown for unsampled subsystems.

Main entry points: [`backend/app/db/models.py`](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/db/models.py) (Meeting and chunk data), [`frontend/src/App.jsx`](https://github.com/ashishch01/meeting-recorder-bot/blob/main/frontend/src/App.jsx) (MeetIQ frontend), [`backend/app/api/webhooks.py`](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/webhooks.py) (Recording webhook), [`backend/app/services/transcription_service.py`](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/transcription_service.py) (Transcription and analysis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["User application"]
  node_frontend["MeetIQ frontend<br/>[App.jsx]"]
  node_meeting_view["Transcript and meeting view<br/>[MeetingView.jsx]"]
end

subgraph group_orchestration["Meeting orchestration"]
  node_meeting_api["Meeting API<br/>[meetings.py]"]
  node_dispatch["Bot dispatch<br/>[bot_dispatch.py]"]
  node_scheduler["Calendar scheduler<br/>[scheduler.py]"]
  node_calendar_api["Calendar API<br/>[calendar.py]"]
  node_webhook["Recording webhook<br/>[webhooks.py]"]
  node_worker["Background worker<br/>[worker.py]"]
end

subgraph group_recording["Recorder hosts"]
  node_bot_hosts["Recorder host API<br/>[server.js]"]
  node_lifecycle["Meeting lifecycle"]
  node_platform_bots["Meet and Zoom bots"]
  node_recorder["Audio recorder<br/>[Recorder.js]"]
  node_uploader["Recording uploader"]
end

subgraph group_intelligence["Transcript and AI"]
  node_transcription["Transcription and analysis"]
  node_embedding["Transcript indexing"]
  node_pdf["PDF export<br/>[pdf_service.py]"]
  node_chat_api["Meeting chat API<br/>[chat.py]"]
  node_chat_service["RAG chat agent<br/>[chat_service.py]"]
  node_rag_tools["Transcript search tools<br/>[tools.py]"]
  node_ask_api["Ask AI API<br/>[ask.py]"]
  node_ask_agent["Ask AI agent<br/>[service.py]"]
end

subgraph group_platform["Platform services"]
  node_meeting_store[("Meeting and chunk data<br/>[models.py]")]
  node_billing_api["Billing API<br/>[billing.py]"]
  node_billing_service["Subscription lifecycle<br/>[service.py]"]
  node_storage[("Supabase database and storage")]
end

node_user(("Meeting user"))
node_calendar_service["Google Calendar"]
node_meeting_platforms["Google Meet and Zoom"]
node_gemini["Gemini AI"]
node_razorpay["Razorpay"]

node_user -->|"requests meetings"| node_frontend
node_frontend -->|"creates meetings"| node_meeting_api
node_meeting_api -->|"creates meeting rows"| node_meeting_store
node_meeting_api -->|"dispatches recording"| node_dispatch
node_dispatch -->|"selects and calls host"| node_bot_hosts
node_bot_hosts -->|"runs lifecycle"| node_lifecycle
node_lifecycle -->|"joins platform"| node_platform_bots
node_platform_bots -->|"joins call"| node_meeting_platforms
node_lifecycle -->|"records audio"| node_recorder
node_lifecycle -->|"uploads recording"| node_uploader
node_uploader -->|"stores recording"| node_storage
node_bot_hosts -->|"reports completion"| node_webhook
node_webhook -->|"signs recording URL"| node_storage
node_webhook -->|"updates meeting status"| node_meeting_store
node_webhook -.->|"submits transcription"| node_worker
node_webhook -->|"submits transcription"| node_transcription
node_worker -.->|"runs queued jobs"| node_transcription
node_transcription -->|"transcribes and analyses"| node_gemini
node_transcription -->|"indexes transcript"| node_embedding
node_embedding -->|"embeds text"| node_gemini
node_embedding -->|"writes chunks"| node_meeting_store
node_transcription -->|"saves results"| node_meeting_store
node_frontend -->|"opens meeting"| node_meeting_view
node_meeting_view -->|"loads meeting data"| node_meeting_api
node_meeting_view -->|"requests PDF export"| node_pdf
node_meeting_view -->|"asks meeting questions"| node_chat_api
node_chat_api -->|"starts chat turn"| node_chat_service
node_chat_service -->|"dispatches search tools"| node_rag_tools
node_rag_tools -->|"searches transcript"| node_meeting_store
node_chat_service -->|"runs agent"| node_gemini
node_frontend -->|"uses Ask AI"| node_ask_api
node_ask_api -->|"starts Ask AI turn"| node_ask_agent
node_ask_agent -->|"uses meeting data"| node_meeting_store
node_user -->|"connects calendar"| node_calendar_api
node_calendar_api -->|"reads calendar events"| node_calendar_service
node_scheduler -->|"checks scheduled events"| node_calendar_service
node_scheduler -->|"schedules meetings"| node_meeting_api
node_frontend -->|"manages subscription"| node_billing_api
node_billing_api -->|"handles billing"| node_billing_service
node_billing_service -->|"creates payment orders"| node_razorpay
node_billing_service -->|"updates subscription data"| node_meeting_store

click node_frontend "https://github.com/ashishch01/meeting-recorder-bot/blob/main/frontend/src/App.jsx"
click node_meeting_api "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/meetings.py"
click node_dispatch "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/bot_dispatch.py"
click node_scheduler "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/scheduler.py"
click node_calendar_api "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/calendar.py"
click node_bot_hosts "https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/api/server.js"
click node_lifecycle "https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/core/MeetingLifecycle.js"
click node_platform_bots "https://github.com/ashishch01/meeting-recorder-bot/tree/main/meeting-bot/src/platforms"
click node_recorder "https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/recording/Recorder.js"
click node_uploader "https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/storage/SupabaseUploader.js"
click node_webhook "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/webhooks.py"
click node_transcription "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/transcription_service.py"
click node_embedding "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/embedding_service.py"
click node_meeting_store "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/db/models.py"
click node_worker "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/worker.py"
click node_meeting_view "https://github.com/ashishch01/meeting-recorder-bot/blob/main/frontend/src/pages/MeetingView.jsx"
click node_pdf "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/pdf_service.py"
click node_chat_api "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/chat.py"
click node_chat_service "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/rag/chat_service.py"
click node_rag_tools "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/rag/tools.py"
click node_ask_api "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/ask.py"
click node_ask_agent "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/ask_ai/agent/service.py"
click node_billing_api "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/billing.py"
click node_billing_service "https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/billing/service.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_view,node_user toneBlue
class node_meeting_api,node_dispatch,node_scheduler,node_calendar_api,node_webhook,node_worker toneAmber
class node_bot_hosts,node_lifecycle,node_platform_bots,node_recorder,node_uploader toneMint
class node_transcription,node_embedding,node_pdf,node_chat_api,node_chat_service,node_rag_tools,node_ask_api,node_ask_agent toneRose
class node_meeting_store,node_billing_api,node_billing_service,node_storage,node_calendar_service,node_meeting_platforms,node_gemini,node_razorpay toneIndigo
```

## Components

### User application

- [MeetIQ frontend](https://github.com/ashishch01/meeting-recorder-bot/blob/main/frontend/src/App.jsx): `frontend/src/App.jsx`
- [Transcript and meeting view](https://github.com/ashishch01/meeting-recorder-bot/blob/main/frontend/src/pages/MeetingView.jsx): `frontend/src/pages/MeetingView.jsx`

### Meeting orchestration

- [Meeting API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/meetings.py): `backend/app/api/meetings.py`
- [Bot dispatch](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/bot_dispatch.py): `backend/app/services/bot_dispatch.py`
- [Calendar scheduler](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/scheduler.py): `backend/app/services/scheduler.py`
- [Calendar API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/calendar.py): `backend/app/api/calendar.py`
- [Recording webhook](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/webhooks.py): `backend/app/api/webhooks.py`
- [Background worker](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/worker.py): `backend/app/worker.py`

### Recorder hosts

- [Recorder host API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/api/server.js): `meeting-bot/src/api/server.js`
- [Meeting lifecycle](https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/core/MeetingLifecycle.js): `meeting-bot/src/core/MeetingLifecycle.js`
- [Meet and Zoom bots](https://github.com/ashishch01/meeting-recorder-bot/tree/main/meeting-bot/src/platforms): `meeting-bot/src/platforms`
- [Audio recorder](https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/recording/Recorder.js): `meeting-bot/src/recording/Recorder.js`
- [Recording uploader](https://github.com/ashishch01/meeting-recorder-bot/blob/main/meeting-bot/src/storage/SupabaseUploader.js): `meeting-bot/src/storage/SupabaseUploader.js`

### Transcript and AI

- [Transcription and analysis](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/transcription_service.py): `backend/app/services/transcription_service.py`
- [Transcript indexing](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/embedding_service.py): `backend/app/services/embedding_service.py`
- [PDF export](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/services/pdf_service.py): `backend/app/services/pdf_service.py`
- [Meeting chat API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/chat.py): `backend/app/api/chat.py`
- [RAG chat agent](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/rag/chat_service.py): `backend/app/rag/chat_service.py`
- [Transcript search tools](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/rag/tools.py): `backend/app/rag/tools.py`
- [Ask AI API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/ask.py): `backend/app/api/ask.py`
- [Ask AI agent](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/ask_ai/agent/service.py): `backend/app/ask_ai/agent/service.py`

### Platform services

- [Meeting and chunk data](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/db/models.py): `backend/app/db/models.py`
- [Billing API](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/api/billing.py): `backend/app/api/billing.py`
- [Subscription lifecycle](https://github.com/ashishch01/meeting-recorder-bot/blob/main/backend/app/billing/service.py): `backend/app/billing/service.py`
- **Supabase database and storage**

### Other components

- **Meeting user**
- **Google Calendar**
- **Google Meet and Zoom**
- **Gemini AI**
- **Razorpay**

## Connections

- Meeting user → MeetIQ frontend: requests meetings
- MeetIQ frontend → Meeting API: creates meetings
- Meeting API → Meeting and chunk data: creates meeting rows
- Meeting API → Bot dispatch: dispatches recording
- Bot dispatch → Recorder host API: selects and calls host
- Recorder host API → Meeting lifecycle: runs lifecycle
- Meeting lifecycle → Meet and Zoom bots: joins platform
- Meet and Zoom bots → Google Meet and Zoom: joins call
- Meeting lifecycle → Audio recorder: records audio
- Meeting lifecycle → Recording uploader: uploads recording
- Recording uploader → Supabase database and storage: stores recording
- Recorder host API → Recording webhook: reports completion
- Recording webhook → Supabase database and storage: signs recording URL
- Recording webhook → Meeting and chunk data: updates meeting status
- Recording webhook → Background worker: submits transcription
- Recording webhook → Transcription and analysis: submits transcription
- Background worker → Transcription and analysis: runs queued jobs
- Transcription and analysis → Gemini AI: transcribes and analyses
- Transcription and analysis → Transcript indexing: indexes transcript
- Transcript indexing → Gemini AI: embeds text
- Transcript indexing → Meeting and chunk data: writes chunks
- Transcription and analysis → Meeting and chunk data: saves results
- MeetIQ frontend → Transcript and meeting view: opens meeting
- Transcript and meeting view → Meeting API: loads meeting data
- Transcript and meeting view → PDF export: requests PDF export
- Transcript and meeting view → Meeting chat API: asks meeting questions
- Meeting chat API → RAG chat agent: starts chat turn
- RAG chat agent → Transcript search tools: dispatches search tools
- Transcript search tools → Meeting and chunk data: searches transcript
- RAG chat agent → Gemini AI: runs agent
- MeetIQ frontend → Ask AI API: uses Ask AI
- Ask AI API → Ask AI agent: starts Ask AI turn
- Ask AI agent → Meeting and chunk data: uses meeting data
- Meeting user → Calendar API: connects calendar
- Calendar API → Google Calendar: reads calendar events
- Calendar scheduler → Google Calendar: checks scheduled events
- Calendar scheduler → Meeting API: schedules meetings
- MeetIQ frontend → Billing API: manages subscription
- Billing API → Subscription lifecycle: handles billing
- Subscription lifecycle → Razorpay: creates payment orders
- Subscription lifecycle → Meeting and chunk data: updates subscription data
