← Back to portfolio

Project case study

JobAgent

Local automation for a more intentional job search.

01

Problem

Job hunting means reviewing many listings and repeating manual work before deciding whether an application is worth pursuing.

02

Solution

JobAgent centralizes the process: it extracts listings, classifies them with local AI, and prepares reviewable answers. The user always keeps final approval.

03 · Architecture

n8n -> Playwright -> FastAPI -> SQLite -> Ollama -> Dashboard

04

My contribution

I designed and implemented the API, extraction and analysis flow, data persistence, and local AI integration for structured results.

05 · Stack

PythonFastAPIPlaywrightSQLiteOllaman8n

06

Technical decisions

The architecture prioritizes local, reviewable automation: it never submits applications automatically, and results are filtered before reaching the dashboard.

07

How it works

A listing is extracted with Playwright, de-duplicated, and saved. Ollama classifies language, profile, and fit; then Easy Apply questions are extracted and proposed answers are reviewed before the user submits.

08

Technical challenges

  • Persistent LinkedIn sessions without committing sensitive data.
  • A state machine that blocks incomplete applications.
  • Structured local-LLM output that stays reviewable.

09

What I would improve

  • Authentication and automated tests.
  • Retries and observability for external providers.
  • PostgreSQL and support for more job platforms.

Dashboard

Explore the JobAgent dashboard.

Review extracted listings, filters, metrics, application status, and generated answers.

View dashboard repository ↗