University Application Essay Helper

University Application Essay Helper

Brainstorm, draft, and refine your application essay with powerful tools.

Brainstorm Essay Ideas

Click "Generate New Prompt" to get an idea to write about.


Outline Your Essay

Draft Your Essay

Analysis Tools

Word Count: 0
Readability: N/A
Passive Voice: 0
Repeated Words:
None

Final Essay & Analysis

Your Essay

Your essay will appear here once you've written it in the previous tab.


Analysis Report

${categoryPrompts[randomIndex]}

`; } function analyzeText() { const text = document.getElementById('essay-text')?.value || ''; // 1. Word Count const words = text.trim().split(/\s+/).filter(Boolean); const wordCount = words.length; const wordCountEl = document.querySelector('#analysis-word-count span:last-child'); if (wordCountEl) wordCountEl.textContent = wordCount; // 2. Readability (Flesch-Kincaid Grade Level) const sentences = text.match(/[^.!?]+[.!?]+/g) || []; const sentenceCount = sentences.length || 1; const syllableCount = countSyllables(text); let readabilityText = "N/A"; if (wordCount > 0 && sentenceCount > 0) { const grade = 0.39 * (wordCount / sentenceCount) + 11.8 * (syllableCount / wordCount) - 15.59; readabilityText = `Grade ${Math.max(1, grade).toFixed(1)}`; } const readabilityEl = document.querySelector('#analysis-readability span:last-child'); if (readabilityEl) readabilityEl.textContent = readabilityText; // 3. Passive Voice const passiveRegex = /\b(am|are|is|was|were|be|being|been)\b\s*(\w+ed|[\w]+en)\b/gi; const passiveMatches = text.match(passiveRegex) || []; const passiveEl = document.querySelector('#analysis-passive span:last-child'); if(passiveEl) passiveEl.textContent = passiveMatches.length; // 4. Repeated Words const wordMap = {}; words.forEach(word => { const lowerWord = word.toLowerCase().replace(/[.,!?;:"']/g, ''); if (lowerWord.length > 3) { // Ignore short words wordMap[lowerWord] = (wordMap[lowerWord] || 0) + 1; } }); const repeatedWords = Object.entries(wordMap) .filter(([_, count]) => count > 2) .sort(([, a], [, b]) => b - a); const repeatsEl = document.getElementById('analysis-repeats'); if(repeatsEl){ if (repeatedWords.length > 0) { repeatsEl.innerHTML = repeatedWords.map(([word, count]) => `${word} (${count})`).join(', '); } else { repeatsEl.innerHTML = 'None'; } } } function countSyllables(text) { if (!text) return 0; text = text.toLowerCase(); let count = 0; const words = text.split(/\s+/); words.forEach(word => { if (word.length <= 3) { count += 1; return; } word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/, ''); word = word.replace(/^y/, ''); const syllables = word.match(/[aeiouy]{1,2}/g); count += syllables ? syllables.length : 0; }); return count; } function populateReviewTab() { const finalEssayDisplay = document.getElementById('final-essay-display'); const finalAnalysisDisplay = document.getElementById('final-analysis-display'); if (!finalEssayDisplay || !finalAnalysisDisplay) return; const essayText = document.getElementById('essay-text')?.value || ''; // Populate essay if (essayText.trim()) { finalEssayDisplay.innerHTML = essayText.replace(/\n/g, '
'); } else { finalEssayDisplay.innerHTML = `

Your essay will appear here once you've written it in the previous tab.

`; } // Populate analysis const wordCount = document.querySelector('#analysis-word-count span:last-child')?.textContent || '0'; const readability = document.querySelector('#analysis-readability span:last-child')?.textContent || 'N/A'; const passiveCount = document.querySelector('#analysis-passive span:last-child')?.textContent || '0'; const repeatsHTML = document.getElementById('analysis-repeats')?.innerHTML || 'None'; finalAnalysisDisplay.innerHTML = `
Word Count: ${wordCount}
Readability Score: ${readability}
Passive Voice Instances: ${passiveCount}
Frequently Used Words: ${repeatsHTML}
`; } function downloadPDF() { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'portrait', unit: 'pt', format: 'a4' }); // --- Get Data --- const essayText = document.getElementById('essay-text')?.value || 'No essay provided.'; const wordCount = document.querySelector('#analysis-word-count span:last-child')?.textContent || '0'; const readability = document.querySelector('#analysis-readability span:last-child')?.textContent || 'N/A'; const passiveCount = document.querySelector('#analysis-passive span:last-child')?.textContent || '0'; const repeatsEl = document.getElementById('analysis-repeats'); let repeatedWordsText = "None"; if (repeatsEl && repeatsEl.innerHTML !== 'None') { const tempDiv = document.createElement('div'); tempDiv.innerHTML = repeatsEl.innerHTML; repeatedWordsText = tempDiv.innerText || tempDiv.textContent || ''; } // --- PDF Styling & Layout Variables --- const pageWidth = doc.internal.pageSize.getWidth(); const pageHeight = doc.internal.pageSize.getHeight(); const margin = 40; const usableWidth = pageWidth - margin * 2; let cursorY = margin; // --- Helper function to add headers/footers --- const addHeaderFooter = () => { doc.setFontSize(16); doc.setFont('helvetica', 'bold'); doc.text('University Application Essay Analysis', pageWidth / 2, margin / 2 + 10, { align: 'center' }); // Footer const pageCount = doc.internal.getNumberOfPages(); doc.setFontSize(8); doc.setFont('helvetica', 'normal'); for (let i = 1; i <= pageCount; i++) { doc.setPage(i); doc.text(`Page ${i} of ${pageCount}`, pageWidth / 2, pageHeight - margin / 2, { align: 'center' }); } }; // --- 1. Draw Essay Section --- doc.setFontSize(14); doc.setFont('helvetica', 'bold'); doc.text('Your Essay', margin, cursorY); cursorY += 25; doc.setLineWidth(1); doc.line(margin, cursorY - 5, pageWidth - margin, cursorY - 5); doc.setFontSize(11); doc.setFont('times', 'normal'); const essayLines = doc.splitTextToSize(essayText, usableWidth); const lineHeight = doc.getLineHeight() * 0.9; essayLines.forEach(line => { if (cursorY + lineHeight > pageHeight - margin) { doc.addPage(); cursorY = margin; } doc.text(line, margin, cursorY); cursorY += lineHeight; }); // --- 2. Draw Analysis Section --- cursorY += 30; // Add space before analysis if (cursorY + 120 > pageHeight - margin) { // Check if enough space for analysis header + content doc.addPage(); cursorY = margin; } doc.setFontSize(14); doc.setFont('helvetica', 'bold'); doc.text('Analysis Report', margin, cursorY); cursorY += 25; doc.setLineWidth(1); doc.line(margin, cursorY - 5, pageWidth - margin, cursorY - 5); doc.setFontSize(11); doc.setFont('helvetica', 'normal'); const analysisData = [ { label: 'Word Count:', value: wordCount }, { label: 'Readability Score:', value: readability }, { label: 'Passive Voice Instances:', value: passiveCount }, { label: 'Frequently Used Words:', value: repeatedWordsText } ]; analysisData.forEach(item => { if (cursorY + 40 > pageHeight - margin) { doc.addPage(); cursorY = margin; } doc.setFont('helvetica', 'bold'); doc.text(item.label, margin, cursorY); doc.setFont('helvetica', 'normal'); const valueLines = doc.splitTextToSize(item.value, usableWidth - 120); // Indent value doc.text(valueLines, margin + 130, cursorY); cursorY += (valueLines.length * lineHeight) + 10; }); // --- 3. Finalize and Save --- addHeaderFooter(); // Add header and footer to all pages doc.save('University-Essay-Analysis-Report.pdf'); }
Scroll to Top