Selected systems Get in touch

AI-assisted workflow · Web · Local by design

employed

Find the fit.
Keep the evidence.

A local workspace that finds remote roles a person could plausibly win, explains how to approach each one, and tracks what they did about it.

Role
Design and full build
Platform
Local Python web app
Data
Stays on your machine
employed application showing a job shortlist, match evidence, and opportunity workspace with fictional demo data
employedApp capture · Demo data

Core features.

From thousands of postings to the few worth a serious application.

Two lanes of discovery

Seven public aggregators, plus an 884-company registry resolved into company job boards and your own watchlist.

A filter cascade

Geo gate, seniority gate, anti-terms, then an unambiguous title signal, before anything is scored.

Analysis on demand

Each card has its own Analyse button. The agent classifies eligibility, quotes the posting, and builds a requirement-to-evidence matrix.

A profile built from documents

CVs, portfolios and notes are read into proposed capabilities, each tied to the exact span of the document that proves it.

One board from arrival to outcome

Ranked, Analysed, Applied, Interview, Lost. No drag and drop and no JavaScript library.

Bring your own model

OpenAI-compatible, Anthropic and Google formats, local models through Ollama or LM Studio, or the coding agent itself.

Architecture

From thousands of postings to evidence you can trust.

Hover or tap a component to trace its connections.

Job sources

Seven aggregators plus resolved company boards

  • JSON
  • RSS
  • ATS APIs

Harvester

Fetches and normalises postings politely

  • httpx
  • selectolax

Filter cascade

Geo, seniority, anti-terms and title signal, then ranking

  • Deterministic

Evidence check

Rejects any quote that is not verbatim in its source

  • Pydantic

ATS resolver

Detects each careers page's job board and verifies it live

  • Greenhouse
  • Lever
  • Ashby

Profile documents

CVs and notes read into evidenced capabilities

  • pypdf
  • python-docx

Analysis agent

Eligibility, requirement matrix and approach notes

  • Any provider
  • Degraded mode

Local store

Postings, profile, runs and decisions in ~/.employed

  • SQLite

Command line

Harvest, resolve, match and analyse on a schedule

  • Typer
  • Rich

Dashboard

Board, job workspace, profile, sources and agent pages

  • FastAPI
  • Jinja
  • HTMX
All connections
  1. ATS resolver to Job sources: verified boards
  2. Job sources to Harvester: postings
  3. Harvester to Filter cascade: normalised
  4. Filter cascade to Analysis agent: shortlist
  5. Profile documents to Analysis agent: evidence spans
  6. Analysis agent to Evidence check: verdicts + quotes
  7. Evidence check to Local store: verified only
  8. Command line to Local store: runs
  9. Local store to Dashboard: review and decide

Innovation highlights.

Innovation one

Evidence the model cannot invent

Every ingested answer is checked: the quote must be a verbatim substring of the posting or document. A hallucinated quote is refused before it reaches the database.

Innovation two

Degraded mode is a supported state

Without an agent, harvest, the geo gate, matching and ranking still run. The dashboard names what is dark and why, rather than faking it.

Innovation three

A board token is a hypothesis

A company's job board only counts once its API answers with a 200 and at least one real posting. Nothing becomes a source on a guess, and roughly a third of the registry resolves.

Technology stack

What it is built with.

Application

  • Python
  • FastAPI
  • Uvicorn
  • Pydantic

Interface

  • Jinja
  • HTMX
  • No build step

Harvesting

  • httpx (HTTP/2)
  • selectolax
  • Playwright (optional)

Data and documents

  • SQLite
  • pypdf
  • python-docx
  • PyYAML

Tooling

  • Typer
  • Rich
  • pytest

Next project

Workplace access · Multiplatform FrontDesk