الرئيسية أدوات الذكاء الاصطناعي مولّد خطاب التقديم
مخصص لكل وظيفة — جاهز في ثوانٍ

مولّد خطاب التقديم الذكي

الذكاء الاصطناعي يكتب لك خطاب تقديم مخصصاً يبرز مهاراتك ويعكس شخصيتك لكل وظيفة تتقدم لها

مخصص لكل وظيفة
احترافي ومقنع
مجاني تماماً

معلومات الوظيفة

معلوماتك الشخصية

أسلوب الخطاب

اختر الأسلوب المناسب لثقافة الشركة ونوع الوظيفة

خطابك المخصص هنا

أدخل معلومات الوظيفة ومهاراتك ثم اضغط "أنشئ"

يتكيف مع طبيعة كل وظيفة
يبرز مهاراتك وإنجازاتك
لهجة احترافية ومقنعة
جاهز للإرسال مباشرة

لماذا خطاب التقديم مهم؟

الحقائق التي تجعل الفرق

76%

من مديري التوظيف يقرؤون خطاب التقديم قبل السيرة الذاتية

أكثر احتمالاً للحصول على مقابلة مع خطاب مخصص

30 ثانية

فقط لديك لتترك انطباعاً أولياً قوياً

let selectedTone = 'professional'; let generatedLetter = ''; function selectTone(tone) { selectedTone = tone; document.querySelectorAll('.tone-btn').forEach(btn => { btn.classList.toggle('active', btn.id === 'tone-' + tone); }); } const loadingMessages = [ 'يحلل متطلبات الوظيفة...', 'يبحث عن الكلمات المفتاحية المناسبة...', 'يصيغ فقرة الافتتاح...', 'يبرز مهاراتك وخبراتك...', 'يكتب فقرة الإغلاق...', 'يراجع جودة الخطاب...', ]; async function generateCoverLetter() { const jobTitle = document.getElementById('jobTitleCL').value.trim(); if (!jobTitle) { toast('يرجى إدخال المسمى الوظيفي', 'error'); return; } const btn = document.getElementById('generateBtn'); const loading = document.getElementById('loadingState'); const tipEl = document.getElementById('loadingTip'); btn.disabled = true; btn.classList.add('opacity-60'); loading.classList.remove('hidden'); document.getElementById('outputPlaceholder').classList.remove('hidden'); document.getElementById('letterOutput').classList.add('hidden'); // Cycle through loading messages let msgIdx = 0; const msgInterval = setInterval(() => { msgIdx = (msgIdx + 1) % loadingMessages.length; tipEl.textContent = loadingMessages[msgIdx]; }, 1500); try { const res = await fetch('/api/ai/cover-letter', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + (localStorage.getItem('token')||'guest') }, body: JSON.stringify({ jobTitle, companyName: document.getElementById('companyNameCL').value, jobDesc: document.getElementById('jobDescCL').value, applicantName: document.getElementById('applicantNameCL').value, yearsExp: document.getElementById('yearsExpCL').value, skills: document.getElementById('skillsCL').value, achievements: document.getElementById('achievementsCL').value, whyCompany: document.getElementById('whyCompanyCL').value, tone: selectedTone, }) }); const data = await res.json(); if (data.ok && data.letter) { generatedLetter = data.letter; document.getElementById('letterContent').textContent = data.letter; document.getElementById('outputPlaceholder').classList.add('hidden'); document.getElementById('letterOutput').classList.remove('hidden'); if (data.score) { const scoreEl = document.getElementById('letterScore'); scoreEl.textContent = 'جودة: ' + data.score + '%'; scoreEl.classList.remove('hidden'); } if (data.tips?.length) { document.getElementById('tipsList').innerHTML = data.tips.map(t => `
  • ${t}
  • ` ).join(''); document.getElementById('letterTips').classList.remove('hidden'); } toast('تم توليد خطاب التقديم بنجاح!'); // Auto-save to history setTimeout(() => saveCLToHistory(), 200); } else { toast(data.error || 'فشل التوليد', 'error'); } } catch(e) { toast('خطأ في الاتصال بالذكاء الاصطناعي', 'error'); } finally { clearInterval(msgInterval); btn.disabled = false; btn.classList.remove('opacity-60'); loading.classList.add('hidden'); } } async function regenerateLetter() { await generateCoverLetter(); } function copyLetter() { const text = document.getElementById('letterContent').textContent; navigator.clipboard.writeText(text) .then(() => toast('تم نسخ الخطاب!')) .catch(() => toast('فشل النسخ', 'error')); } function downloadLetter() { const name = document.getElementById('applicantNameCL').value || 'خطاب التقديم'; const job = document.getElementById('jobTitleCL').value || ''; const text = document.getElementById('letterContent').textContent; const printWindow = window.open('', '_blank'); printWindow.document.write(` ${name} - خطاب تقديم لوظيفة ${job}

    خطاب تقديم — ${job}${name ? ' | ' + name : ''}

    ${text}

    `); printWindow.document.close(); } function toast(msg, type='success') { const el = document.createElement('div'); el.className = 'fixed top-4 left-1/2 -translate-x-1/2 z-[9999] px-6 py-3 rounded-xl shadow-xl text-white font-bold text-sm ' + (type==='success' ? 'bg-green-500' : type==='error' ? 'bg-red-500' : 'bg-blue-600'); el.textContent = msg; document.body.appendChild(el); setTimeout(() => el.remove(), 3500); } // ====== Cover Letter History ====== const CL_HISTORY_KEY = 'cl_history'; function getCLHistory() { try { return JSON.parse(localStorage.getItem(CL_HISTORY_KEY) || '[]'); } catch(e) { return []; } } function saveCLToHistory() { if (!generatedLetter) { toast('لا يوجد خطاب لحفظه', 'error'); return; } const history = getCLHistory(); const item = { id: Date.now(), jobTitle: document.getElementById('jobTitleCL').value || 'وظيفة غير محددة', companyName: document.getElementById('companyNameCL').value || '', tone: selectedTone, letter: generatedLetter, timestamp: new Date().toISOString() }; history.unshift(item); if (history.length > 10) history.pop(); localStorage.setItem(CL_HISTORY_KEY, JSON.stringify(history)); updateCLHistoryBadge(); renderCLHistory(); toast('تم حفظ الخطاب في السجل!'); } function updateCLHistoryBadge() { const count = getCLHistory().length; const badge = document.getElementById('clHistoryBadge'); if (badge) { badge.textContent = count; count > 0 ? badge.classList.remove('hidden') : badge.classList.add('hidden'); } } function toggleCLHistory() { const panel = document.getElementById('clHistoryPanel'); panel.classList.toggle('hidden'); if (!panel.classList.contains('hidden')) renderCLHistory(); } function renderCLHistory() { const history = getCLHistory(); const list = document.getElementById('clHistoryList'); const empty = document.getElementById('clHistoryEmpty'); if (!history.length) { list.innerHTML = ''; empty.classList.remove('hidden'); return; } empty.classList.add('hidden'); list.innerHTML = history.map(item => `

    ${item.jobTitle}${item.companyName ? ' — ' + item.companyName : ''}

    ${new Date(item.timestamp).toLocaleDateString('ar-SA', {month:'short',day:'numeric',hour:'2-digit',minute:'2-digit'})}

    `).join(''); } function loadCLFromHistory(id) { const item = getCLHistory().find(h => h.id === id); if (!item) return; generatedLetter = item.letter; document.getElementById('jobTitleCL').value = item.jobTitle !== 'وظيفة غير محددة' ? item.jobTitle : ''; document.getElementById('companyNameCL').value = item.companyName || ''; document.getElementById('letterContent').textContent = item.letter; document.getElementById('outputPlaceholder').classList.add('hidden'); document.getElementById('letterOutput').classList.remove('hidden'); selectTone(item.tone || 'professional'); document.getElementById('clHistoryPanel').classList.add('hidden'); toast('تم تحميل الخطاب من السجل'); } function deleteCLHistory(id) { let history = getCLHistory().filter(h => h.id !== id); localStorage.setItem(CL_HISTORY_KEY, JSON.stringify(history)); updateCLHistoryBadge(); renderCLHistory(); } function clearCLHistory() { if (!confirm('هل تريد حذف كل السجل؟')) return; localStorage.removeItem(CL_HISTORY_KEY); updateCLHistoryBadge(); renderCLHistory(); toast('تم حذف السجل', 'info'); } document.addEventListener('DOMContentLoaded', () => { updateCLHistoryBadge(); });