INITIALIZING SYSTEMS

0%
Neural Meeting Intelligence

AI Meeting Summarizer

Paste your meeting transcript and instantly extract structured summaries, action items, decisions, risks, and follow-ups. 100% client-side -- your data never leaves your browser.

Transcript Input
0 words , paste a transcript to begin
0 characters
Analyzing transcript...
Splitting sentences...
Extracting keywords...
Identifying action items...
Detecting decisions...
Scanning for risks...
Compiling summary...
0
Sentences
0
Action Items
0
Decisions
0
Risks
Analysis Complete

Executive Summary

    Decisions Made 0

      Action Items 0

      Action Owner Deadline Priority

      ? Open Questions / Follow-ups 0

        Risks & Blockers 0

          # Key Metrics Mentioned 0

            Next Meeting Suggestions

              Export Options

              Want AI-Powered Meeting Tools for Your Organization?

              Our enterprise AI solutions go far beyond summarization -- real-time transcription, sentiment analysis, automated follow-ups, and full integration with your workflow.

              Learn About Enterprise AI Solutions →

              Get Your Summary

              Enter your email to export the full meeting summary. We may follow up with enterprise AI insights -- unsubscribe anytime.

              Your data stays in your browser. Only the email is submitted.
              ' ); printWindow.document.close(); showToast('PDF dialog opened.'); } function emailSummary() { if (!emailUnlocked) { openModal('email'); return; } var text = buildPlainText(); var subject = encodeURIComponent('Meeting Summary - ' + new Date().toLocaleDateString()); var body = encodeURIComponent(text); // Truncate body if too long for mailto if (body.length > 1800) { body = encodeURIComponent(text.substring(0, 1500) + '\n\n[Summary truncated - full version available in the tool]'); } window.location.href = 'mailto:?subject=' + subject + '&body=' + body; showToast('Opening email client...'); } /* ---- Modal ---- */ var pendingAction = null; function openModal(action) { pendingAction = action; document.getElementById('ms-email-modal').classList.add('active'); if (lastResult) { document.getElementById('ms-hidden-summary').value = JSON.stringify({ type: lastResult.meetingType, actions: lastResult.actions.length, decisions: lastResult.decisions.length, risks: lastResult.risks.length, date: lastResult.analyzedAt }); } setTimeout(function() { document.getElementById('ms-email-input').focus(); }, 200); } function closeModal() { document.getElementById('ms-email-modal').classList.remove('active'); pendingAction = null; } /* Handle form submission */ function initEmailForm() { var form = document.getElementById('ms-email-form'); form.addEventListener('submit', function(e) { e.preventDefault(); var email = document.getElementById('ms-email-input').value.trim(); if (!email) return; // Submit to Formspree via fetch var formData = new FormData(form); fetch(form.action, { method: 'POST', body: formData, headers: { 'Accept': 'application/json' } }).then(function(response) { if (response.ok) { emailUnlocked = true; closeModal(); showToast('Email submitted. Export features unlocked.'); // Execute pending action if (pendingAction === 'copy') copySummary(); else if (pendingAction === 'pdf') exportPDF(); else if (pendingAction === 'email') emailSummary(); pendingAction = null; } else { showToast('Submission failed. Please try again.'); } }).catch(function() { // Allow export even if Formspree fails (offline mode) emailUnlocked = true; closeModal(); showToast('Export unlocked (offline mode).'); if (pendingAction === 'copy') copySummary(); else if (pendingAction === 'pdf') exportPDF(); else if (pendingAction === 'email') emailSummary(); pendingAction = null; }); }); } /* ---- Word count ---- */ function updateWordCount() { var text = document.getElementById('ms-transcript').value; var charCount = text.length; var wordCount = text.trim() ? text.trim().split(/\s+/).length : 0; document.getElementById('ms-char-count').textContent = charCount.toLocaleString() + ' characters'; document.getElementById('ms-word-count').textContent = wordCount.toLocaleString() + ' words'; var dot = document.querySelector('.ms-quality-dot'); var qualityText = document.getElementById('ms-quality-text'); if (wordCount === 0) { dot.className = 'ms-quality-dot poor'; qualityText.textContent = 'paste a transcript to begin'; } else if (wordCount < 50) { dot.className = 'ms-quality-dot poor'; qualityText.textContent = 'very short -- results may be limited'; } else if (wordCount < 150) { dot.className = 'ms-quality-dot fair'; qualityText.textContent = 'fair length for basic analysis'; } else { dot.className = 'ms-quality-dot good'; qualityText.textContent = 'good length for detailed analysis'; } } /* ---- Toast ---- */ function showToast(msg) { var toast = document.getElementById('ms-toast'); toast.textContent = msg; toast.classList.add('show'); setTimeout(function() { toast.classList.remove('show'); }, 3000); } /* ---- Init ---- */ function init() { var textarea = document.getElementById('ms-transcript'); textarea.addEventListener('input', updateWordCount); initEmailForm(); // Close modal on overlay click document.getElementById('ms-email-modal').addEventListener('click', function(e) { if (e.target === this) closeModal(); }); // Close modal on Escape document.addEventListener('keydown', function(e) { if (e.key === 'Escape') closeModal(); }); } // Init when DOM ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } /* ---- Public API ---- */ return { analyze: analyze, loadSample: loadSample, clear: clear, newAnalysis: newAnalysis, copySummary: copySummary, exportPDF: exportPDF, emailSummary: emailSummary, closeModal: closeModal }; })();