The Meeting Assistant is a Flask-based web application that allows users to upload meeting audio recordings, transcribe them into text, and extract actionable items such as emails, to-dos, calendar events, and notes. The system features secure authentication and integrates with external APIs like Groq for transcription and NLP-based action item extraction.
The WebApp is deployed in this link = Link
- User Authentication: Secure login/logout system with token-based session management.
- Audio Transcription: Uses Groq Whisper API to transcribe audio files.
- Action Item Extraction: NLP-powered classification of tasks like emails, notes, calendar events, etc.
- Action Item Management: Accept, reject, update, and view categorized action items.
- Frontend Integration: Basic HTML templates for login and home/dashboard.
- Installation
- Project Structure
- Configuration
- Authentication
- API Endpoints
- Action Items
- Audio Transcription
- Frontend Integration
- Error Handling
- Security Considerations
- Performance & Scalability
- Potential Future Enhancements
- Troubleshooting
- Contributing
- License
- Acknowledgements
git clone <repository_url>
cd <project_directory>python -m venv venv
source venv/bin/activate # Linux/MacOS
venv\Scripts\activate # Windowspip install -r requirements.txtCreate a .env file in the project root:
FLASK_SECRET_KEY=<your_secret_key>
BASE_URL=<backend_base_url_for_auth>
GROQ_API=<your_groq_api_key>
APP_URL=<your_app_url>
python main.py/project_root
├── /static # Static files (CSS, JS, images)
├── /templates # HTML templates
│ ├── login.html
│ ├── index.html
├── /temp # Temporarily stored audio files
├── /groq # Groq API client wrapper
├── /instructor # NLP classification logic
├── main.py # Main Flask app
├── .env # Environment configuration
├── requirements.txt # Project dependencies
Key Files:
main.py: Application logic and routes/templates: Login and home page HTML/static: Frontend assets/temp: Temporary audio storage
Environment Variables:
FLASK_SECRET_KEY: Secret key for sessionsBASE_URL: Auth backend base URLGROQ_API: Groq API keyAPP_URL: App base URL
File Paths:
/static– CSS/JS/templates– Frontend HTML/temp– Audio file uploads
- Login Route (
POST /): Authenticates with email and password - Session Management: Flask sessions store tokens securely
- Home Route (
GET /home): Protected route showing user dashboard
-
POST /
Authenticates user and redirects to home on success. -
GET /home
Loads the authenticated user's dashboard.
-
POST /transcribe
Uploads audio and returns raw transcription text. -
POST /transcribe-and-extract
Uploads audio and returns structured action items.
-
POST /extract-action-items
Accepts transcript and returns action items. -
POST /update-json-file
Updates a specific item in the JSON store. -
POST /reject-action-item
Deletes a rejected item. -
POST /accept-action-item
Sends accepted items to the appropriate service (e.g., email, calendar).
- Email – Tasks requiring email communication
- Web Search – Research or lookup tasks
- Note – Notes or reminders
- To-Do – Tasks to complete
- Calendar Event – Scheduling items
Action items are saved in categorized JSON files (emails.json, todos.json, etc.).
Extraction is powered by Groq + Instructor API.
- Audio files are uploaded and temporarily stored in
/temp. - Groq Whisper API performs transcription.
- Resulting text is returned or passed for action item extraction.
- Simple form for email/password
- Stores token in browser on success
- Dashboard UI
- Shows extracted items and action controls
Handles:
- Missing or invalid files/fields
- Auth failures
- External API errors
- Invalid action item indexes or types
- Session Tokens: Securely stored in cookies
- Password Hashing: (Recommend using
bcryptorwerkzeug.security) - Token Expiry: (JWT or session expiry is recommended)
- File Validation: Accept only audio/* MIME types
- API Key Management: Environment-based access control
- Large File Uploads: Consider Flask upload size limits
- Asynchronous Processing: Offload transcription to Celery for better performance
- Caching: Use Redis to cache repeated transcripts
- Storage: Integrate cloud storage (e.g., S3) for large-scale deployments
- Database: Migrate from JSON to PostgreSQL/MySQL in production
- Missing .env: Ensure all variables are set
- Invalid audio format: Accept only
audio/*types - Rate limits: Handle Groq API limits with retries
- Large files: Use Celery for background tasks
We welcome contributions!
- Fork this repo
- Make changes (code, docs, fixes)
- Submit a pull request
Code Style:
- Python: PEP8
- JS: ESLint
- Document your changes!
This project is licensed under the MIT License. See LICENSE for details.
- Groq API – Transcription services
- Flask – Web framework
- Whisper – Speech-to-text model
- Instructor – NLP-based action item extractor