Online Automated Meeting Summarizer

Automated Meeting Summarizer

Please enter a transcript to summarize.

`; switchTab(2); return; } // Simulated NLP const summaryPoints = extractSummaryPoints(transcript); const actionItems = extractActionItems(transcript); const sentiment = analyzeSentiment(transcript); let content = `

Meeting Summary

Generated on: ${new Date().toLocaleDateString()}

Key Discussion Points

    ${summaryPoints.map(p => `
  • ${p}
  • `).join('')}

Action Items

    ${actionItems.map(item => `
  • ${item.owner}: ${item.task}
  • `).join('')}

Sentiment Analysis

The overall meeting sentiment was ${sentiment.label} (Score: ${sentiment.score.toFixed(2)}).

`; summaryContent.innerHTML = content; switchTab(2); }; const extractSummaryPoints = (text) => { // Simple keyword-based extraction for simulation const points = []; if (text.toLowerCase().includes('website mockup')) points.push('Discussed the status of the new website mockup and initial wireframes.'); if (text.toLowerCase().includes('budget')) points.push('Addressed concerns regarding the project budget and requested a revised forecast.'); if (text.toLowerCase().includes('content creation')) points.push('Planned the assignment of content creation tasks to the writing team.'); if (points.length === 0) points.push('General project planning and status updates were discussed.'); return points; }; const extractActionItems = (text) => { const items = []; const lines = text.split('\n'); const actionRegex = /(i will|can you|task to|assign the|will be your task)/i; lines.forEach(line => { if (actionRegex.test(line)) { const parts = line.split(':'); const owner = parts[0].trim(); let task = parts[1] ? parts[1].trim() : line.trim(); // Clean up task description task = task.replace(/i will|can you|will do/gi, '').trim(); task = task.charAt(0).toUpperCase() + task.slice(1); items.push({ owner, task }); } }); return items; }; const analyzeSentiment = (text) => { const positiveWords = ['great', 'perfect', 'positive', 'happy', 'good']; const negativeWords = ['concern', 'problem', 'issue', 'over budget']; let score = 0; const words = text.toLowerCase().split(/\s+/); words.forEach(word => { if (positiveWords.includes(word)) score++; if (negativeWords.includes(word)) score--; }); let label = 'Neutral'; if (score > 0) label = 'Positive'; if (score < 0) label = 'Negative'; return { score, label }; }; const generatePDF = () => { const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'pt', 'a4'); const source = document.getElementById('summary-content'); doc.html(source, { callback: function (doc) { doc.save('Meeting-Summary.pdf'); }, x: 15, y: 15, width: 550, windowWidth: source.scrollWidth }); }; // --- Event Listeners --- transcriptForm.addEventListener('submit', generateSummary); downloadPdfBtn.addEventListener('click', generatePDF); tabButtons.forEach(btn => btn.addEventListener('click', () => switchTab(parseInt(btn.dataset.tab)))); nextBtn.addEventListener('click', () => { if (currentTab < totalTabs) switchTab(currentTab + 1); }); prevBtn.addEventListener('click', () => { if (currentTab > 1) switchTab(currentTab - 1); }); // --- Initialization --- updateNavButtons(); });
Scroll to Top