Auto-deploy: 2026-05-17 22:45:01

This commit is contained in:
Hamza-Ayed
2026-05-17 22:45:01 +03:00
parent 8dc55c698e
commit 5fd6969ff8
5 changed files with 177 additions and 19 deletions

View File

@@ -955,6 +955,149 @@ Brief honest assessment of this opportunity for my profile`
setTimeout(() => toast.classList.remove('show'), 2500); setTimeout(() => toast.classList.remove('show'), 2500);
} }
// ─── List Scanner ────────────────────────────────────────────────────────
function injectListScanner() {
if (document.getElementById('lja-scan-btn')) return;
const btn = document.createElement('button');
btn.id = 'lja-scan-btn';
btn.innerHTML = '🔍 Scan List';
btn.style.cssText = `
position: fixed;
bottom: 20px;
left: 20px;
z-index: 999999;
background: linear-gradient(135deg, #00d67e, #00a65e);
color: white;
border: none;
border-radius: 50px;
padding: 12px 24px;
font-size: 14px;
font-weight: bold;
cursor: pointer;
box-shadow: 0 4px 15px rgba(0, 214, 126, 0.4);
transition: transform 0.2s;
font-family: Arial, sans-serif;
`;
btn.onmouseover = () => btn.style.transform = 'scale(1.05)';
btn.onmouseout = () => btn.style.transform = 'scale(1)';
btn.onclick = async () => {
btn.innerHTML = '⏳ Scanning...';
try {
await scanJobList();
} catch (e) {
console.error(e);
alert('Scan failed: ' + e.message);
}
btn.innerHTML = '🔍 Scan List';
};
document.body.appendChild(btn);
}
async function scanJobList() {
const listItems = document.querySelectorAll('.jobs-search-results__list-item, .job-card-container');
if (!listItems.length) {
alert('No job items found on this page. Scroll down to load them.');
return;
}
const jobsToScan = [];
listItems.forEach((item, index) => {
const titleEl = item.querySelector('.job-card-list__title, .artdeco-entity-lockup__title');
const companyEl = item.querySelector('.job-card-container__primary-description, .artdeco-entity-lockup__subtitle');
if (titleEl && companyEl) {
jobsToScan.push({
index: index,
title: titleEl.textContent.trim().replace(/\n/g, ''),
company: companyEl.textContent.trim().replace(/\n/g, ''),
element: item
});
}
});
if (!jobsToScan.length) {
alert('Could not parse job titles.');
return;
}
document.querySelectorAll('.lja-badge').forEach(b => b.remove());
const listDataStr = JSON.stringify(jobsToScan.map(j => ({ index: j.index, title: j.title, company: j.company })));
const settings = await getSettings();
if (!settings.apiKey) {
alert('Please set your API key in the extension popup first.');
return;
}
if (typeof buildPromptV2 !== 'function') {
alert('buildPromptV2 not found. Extension error.');
return;
}
const promptStr = buildPromptV2('list_analysis', { skills: [], listData: listDataStr }, settings.userProfile, settings.language);
const response = await fetch(
\`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.5-flash:generateContent?key=\${settings.apiKey}\`,
{
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
contents: [{ parts: [{ text: promptStr }] }],
generationConfig: { maxOutputTokens: 2048, temperature: 0.1 }
})
}
);
if (!response.ok) throw new Error('API Request failed');
const data = await response.json();
let resultText = data.candidates[0].content.parts[0].text;
resultText = resultText.replace(/\`\`\`json/g, '').replace(/\`\`\`/g, '').trim();
let results;
try {
results = JSON.parse(resultText);
} catch(e) {
console.error(resultText);
throw new Error('Failed to parse AI response');
}
results.forEach(res => {
const jobItem = jobsToScan.find(j => j.index === res.index);
if (jobItem) {
const badge = document.createElement('div');
badge.className = 'lja-badge';
badge.style.cssText = \`
display: inline-block;
padding: 4px 8px;
border-radius: 6px;
font-size: 11px;
font-weight: bold;
margin-top: 6px;
color: white;
width: 100%;
box-sizing: border-box;
\`;
if (res.verdict === 'YES') {
badge.style.background = 'linear-gradient(135deg, #00d67e, #00a65e)';
badge.innerHTML = \`✅ MATCH: \${res.reason}\`;
} else if (res.verdict === 'NO') {
badge.style.background = 'linear-gradient(135deg, #ff4d6d, #d90429)';
badge.innerHTML = \`❌ SKIP: \${res.reason}\`;
} else {
badge.style.background = 'linear-gradient(135deg, #ffb347, #ff9200)';
badge.innerHTML = \`⚠️ MAYBE: \${res.reason}\`;
}
const contentContainer = jobItem.element.querySelector('.artdeco-entity-lockup__content');
if (contentContainer) contentContainer.appendChild(badge);
}
});
}
// ─── SPA Navigation Observer ───────────────────────────────────────────── // ─── SPA Navigation Observer ─────────────────────────────────────────────
let lastUrl = location.href; let lastUrl = location.href;
@@ -970,7 +1113,7 @@ Brief honest assessment of this opportunity for my profile`
const old = document.getElementById('lja-root'); const old = document.getElementById('lja-root');
if (old) old.remove(); if (old) old.remove();
window.__linkedinAnalyzerLoaded = false; window.__linkedinAnalyzerLoaded = false;
setTimeout(injectOverlay, 1200); setTimeout(() => { injectOverlay(); injectListScanner(); }, 1200);
} }
// Watch for URL changes (SPA navigation + job switches) // Watch for URL changes (SPA navigation + job switches)
@@ -1006,9 +1149,9 @@ Brief honest assessment of this opportunity for my profile`
function init() { function init() {
if (document.readyState === 'loading') { if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', () => setTimeout(injectOverlay, 1000)); document.addEventListener('DOMContentLoaded', () => setTimeout(() => { injectOverlay(); injectListScanner(); }, 1000));
} else { } else {
setTimeout(injectOverlay, 1000); setTimeout(() => { injectOverlay(); injectListScanner(); }, 1000);
} }
} }

View File

@@ -114,7 +114,7 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Led the full-stack architecture of a smart transportation ecosystem supporting 1,800+ drivers and 2,500+ riders.</li> <li>Led the full-stack architecture of a smart transportation ecosystem supporting 1,440+ drivers and 2,811+ riders.</li>
<li>Built a proprietary mapping platform (IntaleqMaps) on OpenStreetMap, eliminating reliance on Google Maps API and saving $10,000+/month in operational costs.</li> <li>Built a proprietary mapping platform (IntaleqMaps) on OpenStreetMap, eliminating reliance on Google Maps API and saving $10,000+/month in operational costs.</li>
<li>Designed secure, custom payment infrastructure for environments lacking standard payment APIs, ensuring high-availability transaction integrity.</li> <li>Designed secure, custom payment infrastructure for environments lacking standard payment APIs, ensuring high-availability transaction integrity.</li>
</ul> </ul>
@@ -123,11 +123,11 @@
<div class="job-block"> <div class="job-block">
<div class="job-header"> <div class="job-header">
<div class="job-title">Co-Founder & Lead Developer — Tripz Egypt</div> <div class="job-title">Co-Founder & Lead Developer — Tripz Egypt</div>
<div class="job-meta">Jan 2024 Present | Cairo / Remote</div> <div class="job-meta">Jan 2023 Present | Cairo / Remote</div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Architected Egypt's homegrown ride-hailing platform, managing the entire distributed ecosystem with real-time tracking and dispatching.</li> <li>Architected Egypt's homegrown ride-hailing platform, managing the entire distributed ecosystem with real-time tracking for 4,318 drivers and 2,464 riders.</li>
<li>Implemented robust microservices for real-time driver/rider matching and route optimization using event-driven architecture.</li> <li>Implemented robust microservices for real-time driver/rider matching and route optimization using event-driven architecture.</li>
</ul> </ul>
</div> </div>
@@ -139,7 +139,7 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Delivered 25+ production enterprise applications across GIS, FinTech, HR, and utilities for clients across the MENA region.</li> <li>Delivered 25+ production enterprise applications with over $5M+ combined project scope across GIS, FinTech, HR, and utilities for clients across the MENA region.</li>
<li>Integrated AI vision models for document analysis (KYC) and automated invoice processing pipelines.</li> <li>Integrated AI vision models for document analysis (KYC) and automated invoice processing pipelines.</li>
</ul> </ul>
</div> </div>
@@ -168,10 +168,10 @@
<ul> <ul>
<li><strong>BS Mathematics (Applied Computing & Algorithms)</strong>, Mutah University (20032007)</li> <li><strong>BS Mathematics (Applied Computing & Algorithms)</strong>, Mutah University (20032007)</li>
<li>Google Data Analytics Professional Certificate</li> <li>Google Data Analytics Professional Certificate</li>
<li>IBM Data Analyst Professional Certificate</li> <li>IBM Data Science Professional Certificate</li>
<li>Meta Back-End Developer & Mobile Development Certificates (Django, APIs, Version Control)</li> <li>Meta Back-End Developer & Mobile Development Certificates</li>
<li>Databases and SQL for Data Science with Python (IBM)</li> <li>Databases and SQL for Data Science with Python (IBM)</li>
<li><em>Total of 51 professional certifications across software engineering, databases, and enterprise architecture.</em></li> <li>AWS Cloud Practitioner & Cloud Architecture Fundamentals</li>
</ul> </ul>
<div class="section-title">Languages</div> <div class="section-title">Languages</div>

View File

@@ -26,6 +26,7 @@ function buildPromptV2(tab, job, userProfile, language) {
${analysisLang} ${analysisLang}
Evaluate this job against my profile with brutal honesty and EXTREME brevity. Evaluate this job against my profile with brutal honesty and EXTREME brevity.
DO NOT recount my history, military background, or summarize my profile. Keep it actionable and short. DO NOT recount my history, military background, or summarize my profile. Keep it actionable and short.
CRITICAL RULE: The user is actively seeking to step down from Architect/CTO roles to "Senior Software Engineer" (Flutter, Backend, Full Stack) to gain corporate Agile experience. DO NOT reject jobs for being a "downgrade" if they are Senior level and match his tech stack (Flutter, Python, PHP, Node).
${prof} ${prof}
@@ -177,6 +178,20 @@ Respond EXACTLY:
## OVERALL RATING: X/10 ## OVERALL RATING: X/10
**Worth applying?** [YES / MAYBE / NO] **Worth applying?** [YES / MAYBE / NO]
[2-3 sentence honest assessment]`; [2-3 sentence honest assessment]`;
P.list_analysis = `You are an AI pre-screening jobs.
I will give you a JSON array of jobs (Title, Company).
My stack: Flutter, Python (FastAPI), PHP, Node.js, GIS, Technical Architect.
I am actively seeking Senior Engineer, Tech Lead, or Architect roles.
Reject Java, C#, C++, .NET, or pure Product Management roles.
JOBS LIST:
${job.listData}
Respond ONLY with a raw JSON array of objects, one for each job, containing:
[
{ "index": number, "verdict": "YES" | "NO" | "MAYBE", "reason": "Short reason" }
]
Do not wrap in markdown \`\`\`json blocks.`;
return P[tab] || P.analysis; return P[tab] || P.analysis;
} }

View File

@@ -114,7 +114,7 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Led the full-stack architecture of a smart transportation ecosystem supporting 1,800+ drivers and 2,500+ riders.</li> <li>Led the full-stack architecture of a smart transportation ecosystem supporting 1,440+ drivers and 2,811+ riders.</li>
<li>Built a proprietary mapping platform (IntaleqMaps) on OpenStreetMap, eliminating reliance on Google Maps API and saving $10,000+/month in operational costs.</li> <li>Built a proprietary mapping platform (IntaleqMaps) on OpenStreetMap, eliminating reliance on Google Maps API and saving $10,000+/month in operational costs.</li>
<li>Designed secure, custom payment infrastructure for environments lacking standard payment APIs, ensuring high-availability transaction integrity.</li> <li>Designed secure, custom payment infrastructure for environments lacking standard payment APIs, ensuring high-availability transaction integrity.</li>
</ul> </ul>
@@ -123,11 +123,11 @@
<div class="job-block"> <div class="job-block">
<div class="job-header"> <div class="job-header">
<div class="job-title">Co-Founder & Lead Developer — Tripz Egypt</div> <div class="job-title">Co-Founder & Lead Developer — Tripz Egypt</div>
<div class="job-meta">Jan 2024 Present | Cairo / Remote</div> <div class="job-meta">Jan 2023 Present | Cairo / Remote</div>
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Architected Egypt's homegrown ride-hailing platform, managing the entire distributed ecosystem with real-time tracking and dispatching.</li> <li>Architected Egypt's homegrown ride-hailing platform, managing the entire distributed ecosystem with real-time tracking for 4,318 drivers and 2,464 riders.</li>
<li>Implemented robust microservices for real-time driver/rider matching and route optimization using event-driven architecture.</li> <li>Implemented robust microservices for real-time driver/rider matching and route optimization using event-driven architecture.</li>
</ul> </ul>
</div> </div>
@@ -139,7 +139,7 @@
<div class="clear"></div> <div class="clear"></div>
</div> </div>
<ul> <ul>
<li>Delivered 25+ production enterprise applications across GIS, FinTech, HR, and utilities for clients across the MENA region.</li> <li>Delivered 25+ production enterprise applications with over $5M+ combined project scope across GIS, FinTech, HR, and utilities for clients across the MENA region.</li>
<li>Integrated AI vision models for document analysis (KYC) and automated invoice processing pipelines.</li> <li>Integrated AI vision models for document analysis (KYC) and automated invoice processing pipelines.</li>
</ul> </ul>
</div> </div>
@@ -168,10 +168,10 @@
<ul> <ul>
<li><strong>BS Mathematics (Applied Computing & Algorithms)</strong>, Mutah University (20032007)</li> <li><strong>BS Mathematics (Applied Computing & Algorithms)</strong>, Mutah University (20032007)</li>
<li>Google Data Analytics Professional Certificate</li> <li>Google Data Analytics Professional Certificate</li>
<li>IBM Data Analyst Professional Certificate</li> <li>IBM Data Science Professional Certificate</li>
<li>Meta Back-End Developer & Mobile Development Certificates (Django, APIs, Version Control)</li> <li>Meta Back-End Developer & Mobile Development Certificates</li>
<li>Databases and SQL for Data Science with Python (IBM)</li> <li>Databases and SQL for Data Science with Python (IBM)</li>
<li><em>Total of 51 professional certifications across software engineering, databases, and enterprise architecture.</em></li> <li>AWS Cloud Practitioner & Cloud Architecture Fundamentals</li>
</ul> </ul>
<div class="section-title">Languages</div> <div class="section-title">Languages</div>

View File

@@ -61,8 +61,8 @@ if ($action === 'generatePdf') {
$prompt = "You are an expert ATS CV tailor. Read the following job description and generate tailored content for my CV to maximize my chances of getting an interview. $prompt = "You are an expert ATS CV tailor. Read the following job description and generate tailored content for my CV to maximize my chances of getting an interview.
Return ONLY a valid JSON object with EXACTLY three keys: 'headline', 'summary', and 'skills'. Return ONLY a valid JSON object with EXACTLY three keys: 'headline', 'summary', and 'skills'.
The 'headline' should be a 5-6 word professional title relevant to the job. The 'headline' should be a clean, confident title like 'Senior Solutions Architect', 'Enterprise Architect', or 'Senior Software Engineer' (do NOT use clunky, stuffed titles like 'Senior Enterprise Solution Architect Leader').
The 'summary' should be a 3-sentence powerful paragraph highlighting skills relevant to the job. The 'summary' MUST open with a powerful hook: 'Built two production ride-hailing platforms from zero to thousands of users, on proprietary infrastructure, in sanctioned markets.' Then use the next 2 sentences to seamlessly tie my relevant skills and achievements to the job description requirements. Avoid generic boilerplate.
The 'skills' should be a comma-separated list of 10 highly relevant ATS keywords. The 'skills' should be a comma-separated list of 10 highly relevant ATS keywords.
Do NOT use markdown blocks like ```json, just return raw JSON text. Do NOT use markdown blocks like ```json, just return raw JSON text.