الذكاء الاصطناعي يكتب لك خطاب تقديم مخصصاً يبرز مهاراتك ويعكس شخصيتك لكل وظيفة تتقدم لها
لا يوجد سجل بعد
الذكاء الاصطناعي يكتب خطابك...
يحلل متطلبات الوظيفة...
أدخل معلومات الوظيفة ومهاراتك ثم اضغط "أنشئ"
الحقائق التي تجعل الفرق
من مديري التوظيف يقرؤون خطاب التقديم قبل السيرة الذاتية
أكثر احتمالاً للحصول على مقابلة مع خطاب مخصص
فقط لديك لتترك انطباعاً أولياً قوياً
منصة التوظيف الذكي
${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'})}