This app transforms meeting audio into summaries, key decisions, and actionable tasks — saving time and improving team productivity.
Meetings often end without clear notes or follow-ups. This app automates the process by converting meeting audio files into structured summaries and action items, ready to share or export.
- 🎧 Upload Meeting Audio (MP3 / MP4)
- 🗣️ Whisper API → Transcription
- 🧠 AI Summary Generation — captures key points and decisions
- ✅ Assign Action Items — automatically or manually
- 📤 Export — to Notion, Slack, Markdown, or JSON
- 🔍 Search & Filter — find meetings quickly
- 🏷️ Tags & Categories — organize meetings
- 👥 Participants Tracking — track who attended
- 🌐 Browser Extension — quick capture from anywhere
- 📱 Modern UI/UX — clean, responsive design
- Backend: Ruby on Rails 7.1
- Frontend: React 18 with JSX
- AI & Speech: OpenAI Whisper API + GPT-4
- Background Jobs: Solid Queue
- File Handling: Cloudinary (optional) / Active Storage
- Styling: Bootstrap 5 + Custom SCSS
- Database: PostgreSQL
The main dashboard showing the Meeting Assistant interface with upload form, search functionality, and meeting list. Clean, modern design with status badges and quick access to meeting details.
- Ruby 3.3.5
- PostgreSQL
- Node.js (for React)
- OpenAI API key
- Clone and install dependencies:
bundle install- Set up environment variables:
cp .env.example .env
# Edit .env and add your OPENAI_API_KEY- Set up database:
bin/rails db:create
bin/rails db:migrate- Start the server:
bin/rails server- In another terminal, start background jobs:
bin/rails solid_queue:start- Visit: http://localhost:3000
- Open Chrome/Edge and go to
chrome://extensions/ - Enable "Developer mode"
- Click "Load unpacked"
- Select the
browser-extensionfolder - Click the extension icon to capture meetings quickly!
├── app/
│ ├── controllers/api/ # API endpoints
│ ├── jobs/ # Background jobs (transcription, summarization)
│ ├── models/ # ActiveRecord models
│ ├── javascript/components/ # React components
│ └── views/ # ERB templates
├── browser-extension/ # Chrome extension for quick capture
├── config/ # Rails configuration
└── db/migrate/ # Database migrations
OPENAI_API_KEY- Your OpenAI API key for Whisper and GPT-4
CLOUDINARY_URL- For cloud file storage (otherwise uses Active Storage)
- Click "Upload Meeting" card on the left side
- Enter meeting title (required) and optional description
- Choose meeting date/time
- Option A: Drag & drop audio file or click to browse
- Option B: Use browser extension to record directly
- Click "Upload & Process" button
- Watch the status change from "pending" → "processing" → "transcribed" → "summarized"
- Meetings appear in the dashboard immediately
- Status badges show current processing stage:
- 🔵 Pending - Waiting to start
- 🔵 Processing - Transcription in progress
- 🔵 Transcribed - Audio converted to text
- 🟢 Summarized - AI analysis complete
- 🟢 Completed - Ready to use
- Click any meeting card to view full details
- See complete transcription with timestamps
- Review AI-generated summary
- Check key points and decisions
- View automatically extracted action items
- Action items are automatically extracted with:
- Description
- Assignee (if mentioned)
- Due date (if mentioned)
- Priority level (high/medium/low)
- Filter by status: pending, in progress, completed
- Export action items separately if needed
- Navigate to meeting detail page
- Scroll to "Export" section
- Choose your format:
- JSON - For developers/APIs
- Markdown - For documentation
- Notion - Ready for Notion import
- Slack - Formatted for Slack messages
- Click "Export" to download
- Use search bar to find meetings by title or description
- Filter by status using dropdown
- View meetings sorted by most recent first
- Tags help organize related meetings
- Click extension icon in browser toolbar
- Fill in meeting details
- Record: Click microphone button to record directly
- Upload: Or select an audio file
- Click "Upload & Process"
- Automatically redirected to app dashboard
┌─────────────────┐
│ Upload Audio │
│ (MP3/MP4) │
└────────┬────────┘
│
▼
┌─────────────────┐
│ Store File │
│ (Cloudinary/ │
│ ActiveStorage) │
└────────┬────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ Background Job │─────▶│ Whisper API │
│ TranscribeAudio │ │ (Transcription) │
└────────┬────────┘ └──────────────────┘
│
▼
┌─────────────────┐ ┌──────────────────┐
│ Transcription │─────▶│ GPT-4 Analysis │
│ Complete │ │ (Summary & Items) │
└────────┬────────┘ └──────────────────┘
│
▼
┌─────────────────┐
│ Summary & │
│ Action Items │
│ Ready │
└─────────────────┘
- Uses OpenAI's Whisper API for accurate speech-to-text
- Supports multiple languages
- Handles various audio qualities and formats
- Processes in background for non-blocking experience
- GPT-4 analyzes transcription content
- Extracts key discussion points
- Identifies decisions made
- Creates structured summaries
- AI identifies tasks mentioned in meeting
- Extracts assignees from conversation
- Infers due dates when mentioned
- Assigns priority levels automatically
- JSON: Structured data for APIs and integrations
- Markdown: Documentation-ready format
- Notion: Direct import format
- Slack: Formatted for team communication
bin/rails testbin/rails solid_queue:startComponents are in app/javascript/components/ and use JSX syntax.
MIT