skip to content
home / projects / jobfinder

JobFinder — Grounded Application Automation

Deterministic-first browser automation with evidence-bound documents and guarded agent fallback.

Evidence-bound artifacts · deterministic ATS adapters · rerender verification · guarded browser-agent escalation case study
PythonFastAPIChromiumPlaywrightSQLiteLLMAST rendering
JobFinder application preparation interface
◆ browser automation architecture

JobFinder — deterministic first, agent last

architecture artifact
01Job extractioncanonical IDs + applicant gate
→
02Requirements + fitdeterministic scoring + gaps
→
03Evidence-bound artifactsresume AST + approved cover letter
firstATS adapterprovider-specific deterministic action
thenRecovery recipeinspect → act → verify
lastBrowser agentbounded fallback only
final submit + sensitive answers remain blocked for user control

Private implementation: application data and account details are intentionally omitted; the architecture diagram shows the deterministic-to-agent escalation path.

Case context

JobFinder is a local-first job discovery and application platform that keeps document generation grounded in verified evidence and keeps browser automation deterministic for as long as possible. It owns collection, normalization, fit scoring, immutable tailored resume versions, reviewed cover letters, application state, and browser-safe ATS assistance while preserving user control over sensitive answers and final submission.

01. Grounding starts before generation

Job postings are normalized into canonical jobs and decomposed into requirements before any tailoring occurs. Fit scoring and gap classification are deterministic, and resume proposals must reference explicit evidence IDs rather than inventing unsupported experience. Tailored artifacts are versioned and bound to the job they were created for.

02. Resume and cover-letter artifacts are treated as state

A tailored resume is represented as a structured AST, rendered to PDF, validated, and bound to the exact job/application record. Cover letters are generated from the finalized resume plus verified evidence, then reviewed, edited, regenerated, and explicitly approved before the application can become ready.

03. Deterministic ATS automation is the default path

The browser layer prefers approved deterministic values and provider-specific adapters for Greenhouse, Lever, Ashby, Workday, iCIMS, SmartRecruiters, and generic ATS flows. Searchable comboboxes, month/year pickers, repeaters, and rerender-sensitive fields have deterministic helpers so common UI patterns do not require an agent.

04. Inspect → act → verify on every browser step

Automation does not assume that a click or fill succeeded. Each step inspects the page, performs a bounded action, and verifies the resulting field or state after SPA rerenders. Generation changes are tracked so stale element assumptions do not silently corrupt the packet.

05. Recovery recipes before browser-agent escalation

When a deterministic adapter cannot complete a field, JobFinder can apply reusable RecoveryRecipes learned from previously successful interaction patterns. Only after deterministic values, provider adapters, and recovery recipes fail does the system escalate to a bounded browser agent.

06. User control remains a hard boundary

Final submission and sensitive or legal answers remain blocked for explicit user control. Applicant-count gating is rechecked before application, and artifact binding, tamper checks, and cross-job isolation prevent one application packet from leaking into another.

◆ Outcome

A job-application platform where fit analysis, resume tailoring, cover-letter generation, PDF rendering, ATS form assistance, verification, and recovery are one coherent state machine rather than a chain of loosely connected prompts and browser macros.