Auto-deploy: 2026-08-05 17:26:03

This commit is contained in:
Hamza-Ayed
2026-08-05 17:26:03 +03:00
parent 772d843817
commit 7fc37228cc
3 changed files with 115 additions and 41 deletions
+28 -2
View File
@@ -210,6 +210,14 @@ companies, enterprises, banks, agencies and government. This controls whether my
CV presents a past role as "Founding Mobile Architect" or "Lead Mobile Engineer" —
identical work, framed for the reader.
PEOPLE-MANAGEMENT RULE: both platforms were built solo. NEVER write "led a team",
"managed engineers", "mentored juniors", "grew the team" or any headcount claim —
there were no direct reports. Express leadership as sole ownership instead:
"solely architected", "owned end-to-end", "sole technical decision-maker",
"aligned architecture with business stakeholders". If the posting is an
Engineering Manager role requiring people management, say so in
"ats_keywords_missing" rather than manufacturing the experience.
CONSISTENCY RULE: when "is_founding_or_startup_role" is false, the words
"Founding" and "Founder" must NOT appear anywhere in "headline" or "summary"
either. Describe the same 0-to-1 ownership as "built and launched from zero" or
@@ -306,10 +314,28 @@ PROMPT;
// the title are identical either way.
$isFoundingContext = $integrityClean && !empty($ai['is_founding_or_startup_role']);
// "Core Focus" carries the job's exact wording and earns its place at the
// top. Repeating those same terms verbatim in the group lines below does
// NOT help ATS scoring — parsers score the document, and within-section
// repetition adds nothing — while it visibly reads as padding. So the group
// lines render as the remaining inventory, with the promoted terms removed.
$coreTokens = array_filter(array_map(
fn($s) => strtolower(trim($s)),
explode(',', $coreSkills)
));
$skillsBlock = '';
foreach ($profile['skills'] as $group => $items) {
$remaining = array_values(array_filter(
$items,
fn($item) => !in_array(strtolower(trim($item)), $coreTokens, true)
));
// A group emptied entirely by the promotion is already fully represented
// in Core Focus; printing an empty heading would just look broken.
if (empty($remaining)) continue;
$skillsBlock .= '<p class="skill-line"><span class="label">' . e($group) . ':</span> '
. e(implode(', ', $items)) . '</p>';
. e(implode(', ', $remaining)) . '</p>';
}
// Index the AI's per-role selections so we can fall back role-by-role.
@@ -366,7 +392,7 @@ PROMPT;
// bullets they cost four lines to say what one line says.
$metricParts = [];
foreach ($profile['headlineMetrics'] as $m) {
$metricParts[] = '<strong>' . e($m['value']) . '</strong> ' . e($m['label']);
$metricParts[] = '<strong>' . e($m['lead']) . '</strong> ' . e($m['rest']);
}
$achievements = '<p class="metrics">' . implode(' &nbsp;·&nbsp; ', $metricParts) . '</p>';
+33 -20
View File
File diff suppressed because one or more lines are too long