UX/UI Feedback Analyzer
Paste raw user feedback to automatically extract sentiment, themes, and actionable insights.
Analysis Report
Overall Sentiment
Mixed
Sentiment Distribution
Positive
0
Neutral
0
Negative
0
Key Themes Identified
${theme.summary}
Related Quotes:
- ${quotesHTML}
No specific themes were identified.
'; } resultsContainer.classList.remove('hidden'); } function downloadPdf() { if (!analysisData) { showError("Please analyze some feedback before downloading a report."); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF(); doc.setFontSize(20); doc.text("UX/UI Feedback Analysis Report", 105, 20, { align: 'center' }); doc.autoTable({ startY: 30, head: [['Metric', 'Result']], body: [ ['Overall Sentiment', analysisData.overall_sentiment], ['Positive Points', analysisData.sentiment_scores.positive.toString()], ['Neutral Points', analysisData.sentiment_scores.neutral.toString()], ['Negative Points', analysisData.sentiment_scores.negative.toString()], ], theme: 'grid' }); if (analysisData.key_themes && analysisData.key_themes.length > 0) { doc.autoTable({ startY: doc.autoTable.previous.finalY + 10, head: [['Theme', 'Sentiment', 'Summary & Quotes']], body: analysisData.key_themes.map(theme => { const quotes = theme.quotes.map(q => `- "${q}"`).join('\n'); return [theme.theme_name, theme.sentiment, `${theme.summary}\n\nQuotes:\n${quotes}`]; }), theme: 'grid', styles: { cellPadding: 3, valign: 'middle' }, headStyles: { fillColor: [22, 163, 74] } }); } doc.save('UX-UI_Feedback_Report.pdf'); } // --- UI Helper Functions --- function toggleLoading(isLoading) { analyzeBtn.disabled = isLoading; loader.classList.toggle('hidden', !isLoading); btnText.classList.toggle('hidden', isLoading); } function showError(message) { errorMessage.textContent = message; errorMessage.classList.remove('hidden'); } function hideError() { errorMessage.classList.add('hidden'); } });