Meeting Intelligence Notes & Transcription
A macOS desktop app that captures audio during meetings, transcribes in real time, and generates structured notes with AI.
MINT records meetings with a single click. It captures both your microphone and system audio as separate streams, transcribes them in real time using Deepgram, and lets you generate structured meeting notes powered by OpenAI GPT-4o or a local Ollama model.
Everything is stored locally on your machine as Markdown files — no cloud storage, no subscriptions, your data stays yours.
- Dual audio capture — Records microphone and system audio simultaneously via separate streams
- Real-time transcription — Live transcript feed with speaker labels as the meeting happens
- AI-powered notes — Generate executive summaries, decisions, and action items on demand
- Local-first storage — Meetings saved as Markdown files in a folder you choose
- Cloud or local AI — Use OpenAI GPT-4o or run completely offline with Ollama
- Meeting organization — Auto-sorted by date (Today, Yesterday, This Week…) with custom sections
- Drag-and-drop — Move meetings between sections to organize however you like
- Color tags — Tag meetings with customizable colored labels
- Transcript search — Full-text search across all transcript entries
- Dark theme — Native macOS look with a polished dark interface
┌─────────────┐ ┌──────────────┐ ┌─────────────┐ ┌──────────────┐
│ Microphone │────▶│ │────▶│ Deepgram │────▶│ │
│ (16kHz) │ │ Electron │ │ WebSocket │ │ Live │
│ │ │ Main │ │ (nova-2) │ │ Transcript │
│ System Audio │────▶│ Process │────▶│ WebSocket │────▶│ │
│ (16kHz) │ │ │ │ (nova-2) │ │ │
└─────────────┘ └──────────────┘ └─────────────┘ └──────┬───────┘
│
▼
┌──────────────┐
│ OpenAI / │
│ Ollama │
│ ────────── │
│ Summary │
│ Decisions │
│ Actions │
└──────────────┘
- Start recording — Click the record button in the app
- Audio capture — Mic audio via Web Audio API, system audio via AudioTee, both downsampled to 16kHz linear16 PCM
- Streaming transcription — Two parallel Deepgram WebSocket connections (mic labeled with your name, system audio labeled "Meeting Users")
- Live display — Transcript entries appear in real time with speaker and timestamp
- Stop & save — Transcript saved as Markdown to your chosen storage folder
- Generate notes — Hit the generate button to produce structured notes via GPT-4o or Ollama
Grab the latest .dmg from the Releases page. Open it and drag MINT to your Applications folder.
- macOS (required — uses macOS-specific audio capture)
- Deepgram API key (get one free)
- OpenAI API key (optional — can use Ollama instead)
No .env file or manual configuration needed. Add your API keys directly in the app's Settings panel:
- Open MINT and go to Settings from the sidebar
- Enter your Deepgram API key under Transcription
- Enter your OpenAI API key under Notes Generation (or configure Ollama instead)
# Clone the repository
git clone https://github.com/ChrisWoo0443/MINT.git
cd MINT
# Install dependencies
npm install
# Start with hot reload
npm run devnpm run build:mac # Build macOS DMGThe packaged .dmg will be in the dist/ directory.
On first launch, MINT will ask for your display name (used to label your mic audio in transcripts) and a storage folder (defaults to ~/Documents/MINT).
- Click Start Recording
- Watch the live transcript as people speak
- Click Stop when the meeting ends
- Open the meeting from the sidebar to view the full transcript
Open any completed meeting and click Generate Notes on the Summary tab. MINT will send the transcript to your configured AI provider and produce:
- Executive Summary — 2-4 paragraph overview of the meeting
- Decisions — Key decisions that were made
- Action Items — Tasks with optional assignees and due dates
You can regenerate notes at any time.
- Meetings auto-sort into date sections (Today, Yesterday, This Week, This Month, Older)
- Create custom sections with the + button to organize by project, team, or topic
- Drag meetings between sections using the grip handle on each card
- Tag meetings with colored labels — customize tag names in Settings
- Rename meetings or sections by double-clicking their titles
Access settings from the sidebar to configure:
| Setting | Description |
|---|---|
| Display Name | Your name shown on mic transcripts |
| Microphone | Select audio input device |
| Deepgram Key | API key for transcription |
| AI Provider | Toggle between OpenAI and Ollama |
| OpenAI Key | API key for note generation |
| Ollama URL | Endpoint for local Ollama instance |
| Tags | Rename the four color tag labels |
| Storage | Change where meetings are saved |
MINT stores everything as plain files — no database required:
~/Documents/MINT/
├── meeting-abc123/
│ ├── metadata.json # Title, status, dates, tags
│ ├── transcript.md # Timestamped speaker entries
│ └── notes.md # AI-generated summary & actions
├── meeting-def456/
│ └── ...
└── tags.json # Custom tag definitions
Transcripts and notes are standard Markdown — open them in any text editor, back them up however you want.
| Layer | Technology |
|---|---|
| Desktop | Electron 39 |
| Frontend | React 19 + TypeScript 5.9 |
| Build | electron-vite + Vite 7 |
| Transcription | Deepgram nova-2 (streaming WebSocket) |
| Notes | OpenAI GPT-4o / Ollama |
| System Audio | AudioTee |
| Packaging | electron-builder (DMG) |
src/
├── main/ # Electron main process
│ ├── index.ts # Window creation, app lifecycle
│ ├── ipc-handlers.ts # IPC orchestration for recording lifecycle
│ └── services/
│ ├── audio-capture.ts # Renderer audio coordination
│ ├── audiotee.ts # System audio capture (macOS)
│ ├── deepgram.ts # Streaming WebSocket transcription
│ ├── openai.ts # GPT-4o / Ollama note generation
│ └── local-storage.ts # File-based meeting storage
├── preload/
│ └── index.ts # Context bridge + audio pipeline
└── renderer/src/
├── App.tsx # Root component with sidebar routing
├── components/
│ ├── AudioSetup.tsx # Onboarding flow
│ ├── LiveRecording.tsx # Real-time transcript view
│ ├── MeetingList.tsx # Dashboard with sections
│ ├── MeetingCard.tsx # Meeting preview card
│ ├── MeetingDetail.tsx # Summary + transcript tabs
│ ├── Settings.tsx # Configuration panel
│ └── TagPicker.tsx # Color tag selector
└── styles/global.css # Dark theme
This project is licensed under the MIT License. See LICENSE for details.