// BUILDING IN PUBLIC //12+ PROJECTS SHIPPED● LIVE · DEPLOY ALL GREENPHILOSOPHY → MBA → OPS → AIDAILY · NO MISSES300+ UNITS · 7 TOWERS · 3 YEARSOPEN TO ROLES · EUROPE PRIORITYPYTHON · N8N · CLAUDE · OLLAMAREFUSAL TO STAY AVERAGE// BUILDING IN PUBLIC //12+ PROJECTS SHIPPED● LIVE · DEPLOY ALL GREENPHILOSOPHY → MBA → OPS → AIDAILY · NO MISSES300+ UNITS · 7 TOWERS · 3 YEARSOPEN TO ROLES · EUROPE PRIORITYPYTHON · N8N · CLAUDE · OLLAMAREFUSAL TO STAY AVERAGE
← BACK TO THE VAULT
VAULT · JOB-AGENT-ARCHITECTURE
FROM THE VAULT2026-05-05T00:00:00.000Z3 MIN

JOB-AGENT-ARCHITECTURE

Architecturefocused notes for the ../careerstrategy/jobapplicationagent. The other note has the project overview; this one is the technical pattern reference. Five independent scrapers run on schedule (46h) and produce job postings. Decoupled — adding a new scraper doesn't change…

01THE NOTE
// HAND-WRITTEN · UNEDITED

Job Agent — Multi-Agent Architecture Notes

Architecture-focused notes for the [[../career-strategy/job-application-agent|Job Application Agent project]]. The other note has the project overview; this one is the technical pattern reference.

Pattern: 5-Robot Multi-Agent System

Layer 1: Producers (Scrapers)

Five independent scrapers run on schedule (4-6h) and produce job postings. Decoupled — adding a new scraper doesn't change the rest of the pipeline.

Layer 2: Filter (Fit Scorer)

Single AI gatekeeper. Receives all jobs, applies hard rules (salary floor) + soft scoring (skills/role/growth). Below threshold → drop. Above → forward.

Key insight: Filter BEFORE expensive operations (CV tailoring, browser automation). Don't waste 60s of Qwen inference on a job that's clearly below salary floor.

Layer 3: Generators (CV Builder)

Two AI calls per accepted job:

  1. CV tailor (~30s, 2000 tokens output)
  2. Cover letter (~15s, 800 tokens output)

Files persisted to disk so executors can upload them.

Layer 4: Routers (Platform-specific Executors)

Three executor agents — one per platform tier:

The router pattern lets us add new platforms without touching existing executors.

Layer 5: Sink (App Logger)

Single endpoint that writes structured rows to Google Sheets. Decoupled — every other component just POSTs to /log-application regardless of what happened.

Key Architectural Decisions

Why local Ollama instead of cloud API

Why Playwright instead of Selenium

Why webhooks instead of direct function calls

Why JSON mode (not free text)

Bottlenecks Observed

| Bottleneck | Mitigation | |---|---| | Ollama cold start ~30s | Keep-alive ping every 4 minutes | | LinkedIn anti-bot detection | Saved auth cookies in linkedin_auth.json | | Tier 1 ATS form variation | Comprehensive selector list (10+ aliases per field) | | n8n single point of failure | Soul in Motion auto-starts via scheduled task |

Patterns to Apply Elsewhere

This same 5-layer pattern can power:

The shape stays. The prompts and executors change.

Related

← BACK TO THE VAULTCONNECT ↗
HOMEIST · DEL19:54:41
BERLIN16:24:41
AMS16:24:41
LISBON15:24:41