Virtual Meeting Assistant

Virtual Meeting Assistant

Keep your meetings focused, productive, and on-track.

Meeting Timer

00:00:00

Meeting Agenda

No action items added yet.

`; return; } actionItems.forEach(item => { const div = document.createElement('div'); div.className = 'p-4 bg-white rounded-lg border grid grid-cols-12 gap-4 items-center'; div.innerHTML = `

${item.desc}

Assignee: ${item.assignee}

Due: ${item.due}

`; actionItemsList.appendChild(div); }); } addActionForm.addEventListener('submit', (e) => { e.preventDefault(); actionItems.push({ id: Date.now(), desc: document.getElementById('action-desc').value, assignee: document.getElementById('action-assignee').value, due: document.getElementById('action-due').value }); addActionForm.reset(); renderActionItems(); }); actionItemsList.addEventListener('click', (e) => { if (e.target.tagName === 'BUTTON') { actionItems = actionItems.filter(i => i.id != e.target.dataset.id); renderActionItems(); } }); // --- Summary Logic --- function generateSummary() { document.getElementById('summary-duration').textContent = formatTime(seconds); const summaryAgenda = document.getElementById('summary-agenda'); summaryAgenda.innerHTML = ''; if (agendaItems.length > 0) { agendaItems.forEach(item => { summaryAgenda.innerHTML += `
  • ${item.text} (${item.completed ? 'Completed' : 'Not Completed'})
  • `; }); } else { summaryAgenda.innerHTML = `
  • No agenda items were set.
  • `; } const summaryActions = document.getElementById('summary-actions'); summaryActions.innerHTML = ''; if (actionItems.length > 0) { const table = document.createElement('table'); table.className = 'min-w-full divide-y divide-gray-200'; table.innerHTML = ` Task Assigned To Due Date `; const tbody = table.querySelector('tbody'); actionItems.forEach(item => { tbody.innerHTML += ` ${item.desc} ${item.assignee} ${item.due} `; }); summaryActions.appendChild(table); } else { summaryActions.innerHTML = `

    No action items were assigned.

    `; } } // --- PDF Generation --- downloadPdfBtn.addEventListener('click', () => { const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(20); doc.text("Meeting Summary Report", 14, 22); doc.setFontSize(12); doc.text(`Date: ${new Date().toLocaleDateString('en-US')}`, 14, 32); doc.text(`Duration: ${formatTime(seconds)}`, 14, 40); doc.setFontSize(16); doc.text("Agenda Items", 14, 60); let yPos = 70; agendaItems.forEach(item => { doc.setTextColor(item.completed ? 34 : 199, item.completed ? 197 : 51, item.completed ? 94 : 78); // green or red doc.text(`- ${item.text} (${item.completed ? 'Completed' : 'Not Completed'})`, 20, yPos); yPos += 8; }); doc.setTextColor(0); const tableData = actionItems.map(item => [item.desc, item.assignee, item.due]); if (tableData.length > 0) { doc.autoTable({ startY: yPos + 10, head: [['Action Item', 'Assigned To', 'Due Date']], body: tableData, theme: 'striped', headStyles: { fillColor: [219, 39, 119] }, // Pink-600 }); } doc.save('meeting-summary.pdf'); }); // --- Initial Setup --- renderActionItems(); switchTab('timer'); });
    Scroll to Top