# tanzeeldevai/ai-meeting-assistant-copilot architecture

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

- Interactive diagram: https://gitdiagram.com/tanzeeldevai/ai-meeting-assistant-copilot
- Repository: https://github.com/tanzeeldevai/ai-meeting-assistant-copilot

## Overview

Meeting Copilot is a desktop meeting assistant: users prepare a brief and script, start listening to call audio, review suggested answers on a private overlay, and can use a phone companion or export post-call notes. Electron’s main process coordinates the audio sidecar, answer generation, persistence, and UI surfaces. The graph preserves documented preparation, live-call, privacy, and follow-up capabilities; some domain links rely on README descriptions because their implementation was not sampled.

Main entry points: [`src/main/main.js`](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/main.js) (Electron coordinator), [`audio/engine.py`](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/engine.py) (Audio engine), [`src/main/brain.js`](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/brain.js) (Answer orchestration), [`src/main/store.js`](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/store.js) (Brief and script)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_prepare["Meeting preparation"]
  node_brief["Brief and script<br/>[store.js]"]
  node_knowledge["Brief context<br/>[brain.js]"]
  node_speechterms["Speech vocabulary<br/>[engine.py]"]
end

subgraph group_audio["Audio and transcription"]
  node_audioengine["Audio engine<br/>[engine.py]"]
  node_capture["Audio capture<br/>[capture.py]"]
  node_platformaudio["Platform audio<br/>[mac_pa.py]"]
  node_resampler["Audio resampling<br/>[resampler.py]"]
  node_speech["Speech recognition<br/>[stt.py]"]
  node_streamstt["Streaming recognition<br/>[stt_stream.py]"]
  node_cloudstt["Cloud recognition<br/>[stt_cloud.py]"]
end

subgraph group_live["Live assistance"]
  node_turnbuffer["Turn buffering<br/>[turnbuffer.js]"]
  node_brain["Answer orchestration<br/>[brain.js]"]
  node_claude["Claude provider<br/>[ai.js]"]
  node_codex["ChatGPT provider<br/>[codex.js]"]
  node_openai["OpenAI provider<br/>[openai.js]"]
end

subgraph group_app["Desktop application"]
  node_dashboard["Dashboard<br/>[dashboard.js]"]
  node_main["Electron coordinator<br/>[main.js]"]
  node_bridge["Audio bridge<br/>[bridge.js]"]
  node_overlay["Private overlay<br/>[overlay.js]"]
  node_persistence[("Local meeting store<br/>[store.js]")]
end

subgraph group_followup["Privacy and follow-up"]
  node_companion["Phone companion<br/>[companion.js]"]
  node_shareprivacy["Capture privacy<br/>[win-capture.js]"]
  node_postcall["Summary and actions<br/>[main.js]"]
  node_docx["Word export<br/>[docx.js]"]
end

node_user(("Meeting user"))
node_meeting(("Call participants"))

node_user -->|"prepares in"| node_dashboard
node_dashboard -->|"saves brief"| node_brief
node_brief -->|"grounds answers"| node_knowledge
node_brief -->|"teaches terms"| node_speechterms
node_user -->|"starts listening"| node_main
node_main -->|"starts sidecar"| node_bridge
node_bridge -->|"launches over WebSocket"| node_audioengine
node_audioengine -->|"captures sources"| node_capture
node_capture -->|"opens streams"| node_platformaudio
node_capture -->|"resamples audio"| node_resampler
node_audioengine -->|"transcribes locally"| node_speech
node_audioengine -->|"streams recognition"| node_streamstt
node_audioengine -.->|"offers cloud option"| node_cloudstt
node_bridge -->|"emits transcript events"| node_main
node_main -->|"buffers turns"| node_turnbuffer
node_main -->|"requests answers"| node_brain
node_brain -->|"uses provider"| node_claude
node_brain -->|"uses provider"| node_codex
node_brain -->|"uses fallback"| node_openai
node_main -->|"routes live answers"| node_overlay
node_user -->|"reads suggestions"| node_overlay
node_main -->|"saves meeting data"| node_persistence
node_main -->|"serves phone view"| node_companion
node_main -->|"hides overlay"| node_shareprivacy
node_user -->|"requests follow-up"| node_postcall
node_postcall -->|"loads meeting"| node_persistence
node_postcall -->|"exports document"| node_docx
node_meeting -->|"speaks on call"| node_audioengine

click node_dashboard "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/dashboard/dashboard.js"
click node_brief "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/store.js"
click node_knowledge "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/brain.js"
click node_speechterms "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/engine.py"
click node_audioengine "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/engine.py"
click node_capture "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/capture.py"
click node_platformaudio "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/mac_pa.py"
click node_resampler "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/resampler.py"
click node_speech "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt.py"
click node_streamstt "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt_stream.py"
click node_cloudstt "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt_cloud.py"
click node_turnbuffer "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/turnbuffer.js"
click node_main "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/main.js"
click node_bridge "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/bridge.js"
click node_brain "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/brain.js"
click node_claude "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/ai.js"
click node_codex "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/codex.js"
click node_openai "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/openai.js"
click node_overlay "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/overlay/overlay.js"
click node_companion "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/companion.js"
click node_shareprivacy "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/win-capture.js"
click node_persistence "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/store.js"
click node_postcall "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/main.js"
click node_docx "https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/docx.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_brief,node_knowledge,node_speechterms,node_user toneBlue
class node_audioengine,node_capture,node_platformaudio,node_resampler,node_speech,node_streamstt,node_cloudstt toneAmber
class node_turnbuffer,node_brain,node_claude,node_codex,node_openai toneMint
class node_dashboard,node_main,node_bridge,node_overlay,node_persistence toneRose
class node_companion,node_shareprivacy,node_postcall,node_docx,node_meeting toneIndigo
```

## Components

### Meeting preparation

- [Brief and script](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/store.js): `src/main/store.js`
- [Brief context](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/brain.js): `src/main/brain.js`
- [Speech vocabulary](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/engine.py): `audio/engine.py`

### Audio and transcription

- [Audio engine](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/engine.py): `audio/engine.py`
- [Audio capture](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/capture.py): `audio/capture.py`
- [Platform audio](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/mac_pa.py): `audio/mac_pa.py`
- [Audio resampling](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/resampler.py): `audio/resampler.py`
- [Speech recognition](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt.py): `audio/stt.py`
- [Streaming recognition](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt_stream.py): `audio/stt_stream.py`
- [Cloud recognition](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/audio/stt_cloud.py): `audio/stt_cloud.py`

### Live assistance

- [Turn buffering](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/turnbuffer.js): `src/main/turnbuffer.js`
- [Answer orchestration](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/brain.js): `src/main/brain.js`
- [Claude provider](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/ai.js): `src/main/ai.js`
- [ChatGPT provider](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/codex.js): `src/main/codex.js`
- [OpenAI provider](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/openai.js): `src/main/openai.js`

### Desktop application

- [Dashboard](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/dashboard/dashboard.js): `src/dashboard/dashboard.js`
- [Electron coordinator](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/main.js): `src/main/main.js`
- [Audio bridge](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/bridge.js): `src/main/bridge.js`
- [Private overlay](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/overlay/overlay.js): `src/overlay/overlay.js`
- [Local meeting store](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/store.js): `src/main/store.js`

### Privacy and follow-up

- [Phone companion](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/companion.js): `src/main/companion.js`
- [Capture privacy](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/win-capture.js): `src/main/win-capture.js`
- [Summary and actions](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/main.js): `src/main/main.js`
- [Word export](https://github.com/tanzeeldevai/ai-meeting-assistant-copilot/blob/main/src/main/docx.js): `src/main/docx.js`

### Other components

- **Meeting user**
- **Call participants**

## Connections

- Meeting user → Dashboard: prepares in
- Dashboard → Brief and script: saves brief
- Brief and script → Brief context: grounds answers
- Brief and script → Speech vocabulary: teaches terms
- Meeting user → Electron coordinator: starts listening
- Electron coordinator → Audio bridge: starts sidecar (evidence: `src/main/main.js`)
- Audio bridge → Audio engine: launches over WebSocket (evidence: `src/main/bridge.js`)
- Audio engine → Audio capture: captures sources (evidence: `audio/engine.py`)
- Audio capture → Platform audio: opens streams (evidence: `audio/capture.py`)
- Audio capture → Audio resampling: resamples audio (evidence: `audio/capture.py`)
- Audio engine → Speech recognition: transcribes locally (evidence: `audio/engine.py`)
- Audio engine → Streaming recognition: streams recognition (evidence: `audio/engine.py`)
- Audio engine → Cloud recognition: offers cloud option
- Audio bridge → Electron coordinator: emits transcript events (evidence: `src/main/bridge.js`)
- Electron coordinator → Turn buffering: buffers turns (evidence: `src/main/main.js`)
- Electron coordinator → Answer orchestration: requests answers (evidence: `src/main/main.js`)
- Answer orchestration → Claude provider: uses provider (evidence: `src/main/ai.js`)
- Answer orchestration → ChatGPT provider: uses provider (evidence: `src/main/brain.js`)
- Answer orchestration → OpenAI provider: uses fallback (evidence: `src/main/brain.js`)
- Electron coordinator → Private overlay: routes live answers
- Meeting user → Private overlay: reads suggestions
- Electron coordinator → Local meeting store: saves meeting data (evidence: `src/main/main.js`)
- Electron coordinator → Phone companion: serves phone view (evidence: `src/main/main.js`)
- Electron coordinator → Capture privacy: hides overlay (evidence: `src/main/main.js`)
- Meeting user → Summary and actions: requests follow-up
- Summary and actions → Local meeting store: loads meeting (evidence: `src/main/main.js`)
- Summary and actions → Word export: exports document (evidence: `src/main/main.js`)
- Call participants → Audio engine: speaks on call
