From 9c4fcaedf38044f8f19e8f0358f8835339d96a0c Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 25 Jul 2025 23:12:12 +0530 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Improve=20job=20posting=20generator?= =?UTF-8?q?=20UX=20-=20reduce=20toast=20spam=20and=20add=20auto-scroll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit UX IMPROVEMENTS: - Add auto-scroll to processing status when job starts (matches social ads generator) - Reduce excessive toast notifications from 17 to 14 (18% reduction) - Make download operations silent (file download is confirmation enough) - Remove success toast for copy operations (clipboard action is confirmation) - Remove success toast for results display (visual results are confirmation) - Add auto-scroll to form after reset for better UX flow SILENT OPERATIONS (no toast spam): ✅ Download success - file download is confirmation ✅ Copy success - clipboard action is confirmation ✅ Reset form - visual clearing is confirmation ✅ Results display - showing content is confirmation KEPT TOASTS FOR: ❌ Copy/download errors - user needs to know ❌ Form validation errors - user needs to fix ❌ Network/processing errors - user needs feedback ❌ Authentication errors - user needs action Better user experience with less intrusive notifications, matching social ads generator pattern. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../job_posting_generator/detail.html | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/job_posting_generator/templates/job_posting_generator/detail.html b/job_posting_generator/templates/job_posting_generator/detail.html index 56db574..c32803c 100644 --- a/job_posting_generator/templates/job_posting_generator/detail.html +++ b/job_posting_generator/templates/job_posting_generator/detail.html @@ -95,8 +95,19 @@ // Processing Status Functions function showProcessing() { const processingStatus = document.getElementById('processingStatus'); - processingStatus.style.display = 'block'; - processingStatus.classList.add('active'); + const resultsContainer = document.getElementById('resultsContainer'); + + if (processingStatus) { + processingStatus.style.display = 'block'; + processingStatus.classList.add('active'); + + // Smooth scroll to processing section + processingStatus.scrollIntoView({ + behavior: 'smooth', + block: 'center' + }); + } + if (resultsContainer) resultsContainer.style.display = 'none'; } function hideProcessing() { @@ -484,7 +495,7 @@ resultsContainer.scrollIntoView({ behavior: 'smooth', block: 'center' }); } - showToast('✅ Job posting created successfully!', 'success'); + // No toast needed - results display is confirmation enough } else { // Handle error case @@ -604,7 +615,7 @@ // Get clean text content without HTML formatting const text = content.textContent || content.innerText || ''; navigator.clipboard.writeText(text).then(() => { - showToast('📋 Job posting copied to clipboard!', 'success'); + // No toast for successful copy - clipboard action is confirmation enough }).catch(() => { showToast('❌ Failed to copy to clipboard', 'error'); }); @@ -635,7 +646,7 @@ document.body.removeChild(a); URL.revokeObjectURL(url); - showToast('💾 Job posting downloaded!', 'success'); + // No toast for download - file download is confirmation enough } else { showToast('❌ No job posting content to download', 'error'); } @@ -646,6 +657,14 @@ const resultsContainer = document.getElementById('resultsContainer'); if (resultsContainer) resultsContainer.style.display = 'none'; document.getElementById('processButton').disabled = false; + + // Scroll back to form for new input + const formSection = document.getElementById('jobPostingForm'); + if (formSection) { + formSection.scrollIntoView({ behavior: 'smooth', block: 'start' }); + } + + // No toast for reset - visual feedback is enough }