MeetingScribe transforms audio and video recordings into comprehensive meeting notes using AI, making your meetings more productive and accessible.
MeetingScribe is an open-source web application developed for a Next.js Hackathon. The project initially started as a YouTube video analysis tool, but due to copyright and legal concerns (which we realized too late), we pivoted to a meeting analysis application focused on user-uploaded content.
This pivot allowed us to maintain the core AI-based analysis features while creating a useful tool for professionals who need to extract insights from their audio and video recordings - perfect for meetings, lectures, or any spoken content.
- Multiple Media Support: Handles various audio formats (MP3, WAV, OGG, M4A, WEBM) and video formats (MP4, MKV, WEBM, MOV)
- AI-Powered Analysis: Uses Groq API to generate:
- Comprehensive summaries
- Key points extraction
- Video chapter detection
- Action items detection
- User Experience:
- Modern, responsive UI with smooth animations
- Organized results in an intuitive tabbed interface
- Light/dark mode support
- Progress tracking for long analyses
- Practical Outputs:
- PDF export of analysis results
- Interactive transcript navigation
- Historical access to previous analyses
- Security & Privacy:
- User authentication via Clerk
- Secure data storage with Convex
- Temporary file handling
- Frontend: Next.js 15, TypeScript, Tailwind CSS, shadcn/ui, Framer Motion
- Backend: Convex (serverless backend and database)
- Authentication: Clerk
- AI Services: Groq API (Whisper for transcription, LLM for analysis)
- Media Processing: ffmpeg for audio extraction
- Document Generation: pdfkit for PDF exports
The application follows a clean architecture:
src/
├── app/ # Next.js app router
│ ├── api/ # API routes
│ ├── history/ # User history page
│ ├── result/ # Analysis results page
│ └── ...
├── components/ # React components
│ ├── analysis/ # Analysis-related components
│ ├── history/ # History page components
│ ├── media-form/ # Media upload components
│ ├── results/ # Results display components
│ ├── sections/ # Landing page sections
│ └── ui/ # Reusable UI components
├── hooks/ # Custom React hooks
├── lib/ # Core utilities and services
│ ├── audio-utils.js # Audio processing utilities
│ ├── file-utils.js # File handling utilities
│ ├── services/ # Service integrations
│ └── ...
├── types/ # TypeScript type definitions
└── utils/ # Helper utilities
The heart of the application is the media processing and analysis pipeline:
-
Media Upload & Processing (
src/utils/analyze-utils.ts)- Handles file uploads via the
processMediaFile()function - Uses ffmpeg for extracting audio from video files
- Manages temporary file handling and cleanup
- Handles file uploads via the
-
Transcription Engine (
src/lib/audio-utils.ts)- Interfaces with Groq API to transcribe audio using Whisper
- Generates detailed transcriptions with timestamps
- Structures data for further analysis
-
Analysis Service (
src/lib/services/analysis-service.ts)- Takes transcriptions and performs deep content analysis
- Generates summaries, key points, and other insights
- Handles context management for large transcripts
-
Progress Tracking (
src/lib/progress-store.ts,src/utils/progress-utils.ts)- Real-time progress monitoring for long-running operations
- Provides step-by-step updates during processing
- Calculates percentage completion for user feedback
-
Media Upload Form (
src/components/media-form/media-form.tsx)- Drag-and-drop interface with file validation
- Animated feedback using Framer Motion
- Handles the initial user interaction
-
Results Interface (
src/components/results/results-tabs.tsx)- Tab-based organization of analysis results
- Animated transitions between different views
- Provides a clear structure for consuming complex information
-
Analysis History (
src/components/history/analysis-grid.tsx,src/components/history/analysis-card.tsx)- Grid layout with equal-height cards for history items
- Staggered animations for visual engagement
- Filtering and sorting capabilities
-
Analysis Endpoint (
src/app/api/analyze/route.ts)- Handles the initial file upload and analysis request
- Manages the entire analysis pipeline
- Returns comprehensive analysis results
-
Progress Tracking API (
src/app/api/progress/[audioId]/route.ts)- Provides real-time progress updates
- Allows the frontend to poll for completion status
- Improves user experience during long-running operations
-
PDF Generation (
src/app/api/generate-pdf/route.ts,src/utils/pdf-utils.ts)- Converts analysis results into downloadable PDF documents
- Formats content with proper structure and hierarchy
- Includes transcriptions, summaries, and all analysis components
-
Audio Retrieval (
src/app/api/get-audio/[audioId]/route.ts,src/utils/audio-service.ts)- Streams processed audio files to the client
- Handles format conversion and compatibility
- Manages secure access to media files
The application features a sophisticated animation system:
-
Animation Architecture (
src/components/sections/animated-section-components.tsx)- Contains reusable animation variants and components
- Provides consistent motion patterns across the application
- Implements staggered animations for lists and grids
-
Tab Animation (
src/components/results/tabs/tab-list.tsx)- Interactive tab selection with animated indicators
- Smooth transitions between content sections
- Visual feedback for active elements
-
Card Animations (
src/components/history/animated-grid.tsx)- Equal-height card animations with hover effects
- Staggered entrance animations for better visual flow
- Performance optimizations for larger collections
- Node.js (v18+)
- pnpm
- ffmpeg (for video processing)
- API Keys for:
- Groq
- Clerk
- Convex
- Clone the repository:
git clone https://github.com/yourusername/meetingscribe.git
cd meetingscribe- Install dependencies:
pnpm install- Set up environment variables by creating a
.env.localfile:
GROQ_API_KEY=your_groq_api_key
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your_clerk_key
CLERK_SECRET_KEY=your_clerk_secret
NEXT_PUBLIC_CONVEX_URL=your_convex_url
- Start the development server:
pnpm dev:all- Open http://localhost:3000 in your browser.
- Media Upload: User uploads an audio or video file through the interface
- Processing Pipeline:
- Audio extraction (if video file)
- File transcription using Whisper
- AI analysis of the transcript
- Results Generation:
- Transcript is analyzed to create summaries, key points, etc.
- Results are formatted and displayed in an organized interface
- Analysis is saved to the user's history (if logged in)
The application features a thoughtful UI with:
- Animated components for a more engaging experience
- Card-based design for organizing information
- Responsive layouts that work well on all devices
- Accessible interface elements
- Immediate visual feedback for user actions
MeetingScribe is MIT licensed. See the LICENSE file for more details.
We welcome contributions! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- This project was created for a Next.js Hackathon
- Thanks to the creators of Next.js, Convex, Clerk, and other open-source tools that make projects like this possible
- Special thanks to Groq for providing powerful AI capabilities