Files
hostpioneers/diagrams/autojobs-flowchart.html

491 lines
13 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AutoJobs Pipeline — Flowchart</title>
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
background: #0f1117;
color: #e2e8f0;
padding: 40px 20px;
min-height: 100vh;
}
h1 {
text-align: center;
color: #f8fafc;
font-size: 24px;
margin-bottom: 8px;
}
.subtitle {
text-align: center;
color: #64748b;
font-size: 14px;
margin-bottom: 40px;
}
.flowchart {
max-width: 1100px;
margin: 0 auto;
display: flex;
flex-direction: column;
gap: 0;
align-items: center;
}
.row {
display: flex;
gap: 24px;
justify-content: center;
flex-wrap: wrap;
align-items: center;
}
.step {
background: #1e293b;
border: 1px solid #334155;
border-radius: 12px;
padding: 16px 20px;
min-width: 200px;
max-width: 260px;
text-align: center;
flex: 1;
}
.step-num {
display: inline-block;
background: #3b82f6;
color: #fff;
font-size: 11px;
font-weight: 700;
padding: 3px 8px;
border-radius: 20px;
margin-bottom: 10px;
}
.step-title {
font-size: 14px;
font-weight: 600;
color: #f1f5f9;
margin-bottom: 8px;
}
.step-details {
font-size: 12px;
color: #94a3b8;
line-height: 1.5;
}
.step-details span {
display: block;
}
.arrow {
color: #3b82f6;
font-size: 24px;
text-align: center;
line-height: 1;
padding: 4px 0;
}
.arrow-label {
font-size: 11px;
color: #475569;
text-align: center;
margin-top: -8px;
}
/* Stage colors */
.input { border-color: #8b5cf6; }
.input .step-num { background: #8b5cf6; }
.fetch { border-color: #06b6d4; }
.fetch .step-num { background: #06b6d4; }
.classify { border-color: #f59e0b; }
.classify .step-num { background: #f59e0b; }
.eval { border-color: #10b981; }
.eval .step-num { background: #10b981; }
.gen { border-color: #ec4899; }
.gen .step-num { background: #ec4899; }
.pipeline { border-color: #6366f1; }
.pipeline .step-num { background: #6366f1; }
.alert { border-color: #ef4444; }
.alert .step-num { background: #ef4444; }
/* Sub-steps */
.sub-row {
display: flex;
gap: 12px;
justify-content: center;
flex-wrap: wrap;
margin-top: 0;
}
.sub-step {
background: #1a2332;
border: 1px solid #1e293b;
border-radius: 8px;
padding: 10px 14px;
min-width: 150px;
max-width: 200px;
text-align: center;
}
.sub-step-title {
font-size: 12px;
font-weight: 600;
color: #cbd5e1;
margin-bottom: 4px;
}
.sub-step-detail {
font-size: 11px;
color: #64748b;
}
.scoring-box {
background: #0f172a;
border: 2px solid #10b981;
border-radius: 12px;
padding: 16px 24px;
margin: 16px auto;
max-width: 700px;
width: 100%;
}
.scoring-title {
font-size: 13px;
font-weight: 700;
color: #10b981;
margin-bottom: 12px;
text-transform: uppercase;
letter-spacing: 1px;
}
.scoring-grid {
display: flex;
flex-wrap: wrap;
gap: 8px;
justify-content: center;
}
.scoring-item {
background: #1e293b;
border-radius: 6px;
padding: 8px 12px;
text-align: center;
min-width: 120px;
}
.scoring-label {
font-size: 11px;
color: #94a3b8;
margin-bottom: 2px;
}
.scoring-value {
font-size: 16px;
font-weight: 700;
color: #f1f5f9;
}
.scoring-weight {
font-size: 10px;
color: #475569;
}
.decision-box {
background: #1e293b;
border: 2px solid #f59e0b;
border-radius: 12px;
padding: 16px 24px;
margin: 16px auto;
max-width: 400px;
text-align: center;
}
.decision-title {
font-size: 13px;
font-weight: 700;
color: #f59e0b;
margin-bottom: 6px;
}
.decision-text {
font-size: 14px;
color: #e2e8f0;
margin-bottom: 8px;
}
.decision-threshold {
font-size: 12px;
color: #94a3b8;
}
.output-row {
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
.output-item {
background: #1e293b;
border: 1px solid #334155;
border-radius: 10px;
padding: 12px 16px;
min-width: 160px;
text-align: center;
}
.output-icon {
font-size: 20px;
margin-bottom: 4px;
}
.output-title {
font-size: 13px;
font-weight: 600;
color: #f1f5f9;
margin-bottom: 4px;
}
.output-detail {
font-size: 11px;
color: #64748b;
}
.separator {
border: none;
border-top: 1px dashed #1e293b;
margin: 24px 0;
width: 100%;
}
.legend {
max-width: 700px;
margin: 40px auto 0;
display: flex;
gap: 16px;
justify-content: center;
flex-wrap: wrap;
}
.legend-item {
display: flex;
align-items: center;
gap: 6px;
font-size: 12px;
color: #64748b;
}
.legend-dot {
width: 10px;
height: 10px;
border-radius: 50%;
}
@media (max-width: 600px) {
.step { min-width: 160px; }
.sub-step { min-width: 130px; }
}
</style>
</head>
<body>
<h1>AutoJobs Pipeline — Flowchart</h1>
<p class="subtitle">hostpioneers.com/autojobs — AI-Powered Job Search System</p>
<div class="flowchart">
<!-- STEP 1: INPUT -->
<div class="row">
<div class="step input">
<div class="step-num">STEP 1</div>
<div class="step-title">INPUT</div>
<div class="step-details">
<span>Job URL pasted</span>
<span>OR JD text pasted</span>
<span>OR manual fields</span>
</div>
</div>
</div>
<div class="arrow"></div>
<div class="arrow-label">user pastes URL or description</div>
<!-- STEP 2: FETCH -->
<div class="row">
<div class="step fetch">
<div class="step-num">STEP 2</div>
<div class="step-title">FETCH & PARSE</div>
<div class="step-details">
<span>Extract: title, company, description</span>
<span>Detect board type</span>
<span>Fetch company info</span>
</div>
</div>
</div>
<div class="arrow"></div>
<div class="arrow-label">Perplexity API + web scraping</div>
<!-- STEP 3: CLASSIFY -->
<div class="row">
<div class="step classify">
<div class="step-num">STEP 3</div>
<div class="step-title">CLASSIFY</div>
<div class="step-details">
<span>Voice AI / Agentic / Backend / Full-Stack</span>
<span>Junior / Mid / Senior / Staff</span>
<span>Remote / Spain / EU / US</span>
</div>
</div>
</div>
<div class="arrow"></div>
<!-- STEP 4: EVALUATE -->
<div class="step eval" style="max-width:700px;">
<div class="step-num">STEP 4</div>
<div class="step-title">EVALUATE — 6 Dimensions</div>
<div class="step-details">
<span>Each dimension scored 0100, then weighted average = composite score</span>
</div>
</div>
<!-- SCORING GRID -->
<div class="scoring-box">
<div class="scoring-title">Scoring Dimensions</div>
<div class="scoring-grid">
<div class="scoring-item">
<div class="scoring-label">CV Match</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.25</div>
</div>
<div class="scoring-item">
<div class="scoring-label">Compensation Fit</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.20</div>
</div>
<div class="scoring-item">
<div class="scoring-label">Seniority Fit</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.15</div>
</div>
<div class="scoring-item">
<div class="scoring-label">Culture & Growth</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.15</div>
</div>
<div class="scoring-item">
<div class="scoring-label">Tech Stack Match</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.15</div>
</div>
<div class="scoring-item">
<div class="scoring-label">Interview Feasibility</div>
<div class="scoring-value">0100</div>
<div class="scoring-weight">× 0.10</div>
</div>
</div>
</div>
<div class="arrow"></div>
<!-- DECISION -->
<div class="decision-box">
<div class="decision-title">DECISION GATE</div>
<div class="decision-text">Composite Score ≥ 70?</div>
<div class="decision-threshold">If NO (score &lt; 70) → "Not recommended — skip this role"</div>
</div>
<div class="arrow"></div>
<div class="arrow-label" style="color:#10b981;">YES → Generate content</div>
<!-- STEP 5: GENERATE -->
<div class="step gen" style="max-width:700px;">
<div class="step-num">STEP 5</div>
<div class="step-title">GENERATE — If Score ≥ 70</div>
<div class="step-details">
<span>ATS-Optimized CV PDF + Personalized Cover Letter</span>
</div>
</div>
<div class="output-row">
<div class="output-item">
<div class="output-icon">📄</div>
<div class="output-title">CV PDF</div>
<div class="output-detail">Keyword-injected, ATS-optimized</div>
</div>
<div class="output-item">
<div class="output-icon">✉️</div>
<div class="output-title">Cover Letter</div>
<div class="output-detail">Personalized, 3 paragraphs</div>
</div>
<div class="output-item">
<div class="output-icon">🎯</div>
<div class="output-title">Interview Prep</div>
<div class="output-detail">Questions + STAR stories</div>
</div>
</div>
<div class="arrow"></div>
<!-- STEP 6: PIPELINE -->
<div class="step pipeline" style="max-width:700px;">
<div class="step-num">STEP 6</div>
<div class="step-title">PIPELINE — Kanban Board</div>
</div>
<div class="output-row">
<div class="output-item" style="border-color:#8b5cf6;">
<div class="output-icon">📋</div>
<div class="output-title">Wishlist</div>
<div class="output-detail">Score ≥ 70, not yet applied</div>
</div>
<div class="output-item" style="border-color:#06b6d4;">
<div class="output-icon">🚀</div>
<div class="output-title">Applied</div>
<div class="output-detail">User submitted application</div>
</div>
<div class="output-item" style="border-color:#f59e0b;">
<div class="output-icon">💬</div>
<div class="output-title">Interview</div>
<div class="output-detail">Scheduled or completed</div>
</div>
<div class="output-item" style="border-color:#10b981;">
<div class="output-icon"></div>
<div class="output-title">Offer / Reject</div>
<div class="output-detail">Outcome recorded</div>
</div>
</div>
<div class="arrow"></div>
<!-- STEP 7: ALERT -->
<div class="step alert" style="max-width:700px;">
<div class="step-num">STEP 7</div>
<div class="step-title">ALERTS & FOLLOW-UP</div>
<div class="step-details">
<span>Telegram notification via Horus bot</span>
</div>
</div>
<div class="output-row">
<div class="output-item">
<div class="output-icon">🆕</div>
<div class="output-title">New Evaluation</div>
<div class="output-detail">Complete notification</div>
</div>
<div class="output-item">
<div class="output-icon"></div>
<div class="output-title">Interview Reminder</div>
<div class="output-detail">24h before</div>
</div>
<div class="output-item">
<div class="output-icon">🏆</div>
<div class="output-title">Offer Received</div>
<div class="output-detail">Immediate alert</div>
</div>
</div>
<hr class="separator">
<!-- FEEDBACK LOOP -->
<div class="step" style="border-color:#475569; max-width:500px;">
<div class="step-title" style="color:#94a3b8;">🔁 ICP LEARNING LOOP (Future)</div>
<div class="step-details">
<span>Track which jobs actually convert → auto-adjust scoring weights</span>
</div>
</div>
</div>
<!-- LEGEND -->
<div class="legend">
<div class="legend-item"><div class="legend-dot" style="background:#8b5cf6;"></div> Input</div>
<div class="legend-item"><div class="legend-dot" style="background:#06b6d4;"></div> Fetch</div>
<div class="legend-item"><div class="legend-dot" style="background:#f59e0b;"></div> Classify</div>
<div class="legend-item"><div class="legend-dot" style="background:#10b981;"></div> Evaluate</div>
<div class="legend-item"><div class="legend-dot" style="background:#ec4899;"></div> Generate</div>
<div class="legend-item"><div class="legend-dot" style="background:#6366f1;"></div> Pipeline</div>
<div class="legend-item"><div class="legend-dot" style="background:#ef4444;"></div> Alert</div>
</div>
</body>
</html>