Selected work

Product / Live product

JobFilter

A procurement qualification product designed to prefer an honest zero over a noisy list of weak opportunities.

My role

Product direction, public-data pipeline, qualification rules, interface, testing, and deployment.

Scope

  • Public procurement data
  • Deterministic qualification
  • Product interface
  • Verification and deployment
JobFilter showing an honest zero-result scan after checking configured public tender sources
Live scan result / verified matching can return zero

01 / Problem and insight

Start with the constraint, not the stack.

Problem

Small firms miss winnable contracts because notices are scattered across procurement portals and written in inconsistent formats.

Insight

A useful shortlist has to reject weak matches, not merely find keywords. Buyer addresses, stale notices, and adjacent trades cannot be treated as proof.

02 / How it works

A traceable path through the system.

  1. 01Retrieve

    Fetch official Find a Tender OCDS packages with pagination, retry handling, and a cancellable scan.

  2. 02Reconcile

    Normalise notices, merge the latest amendments, and deduplicate releases before scoring.

  3. 03Qualify

    Require trade, CPV, location, deadline, and notice evidence; uncertain inputs fail closed.

  4. 04Present

    Return a short explainable result set—or an honest zero—with live sources available for inspection.

03 / What I built

The implementation in plain terms.

01

Official Find a Tender OCDS retrieval with pagination, retries, and cancellation.

02

Notice normalisation, latest-amendment merging, and release deduplication.

03

CPV-first trade matching with fail-closed location checks.

04

A plain scan flow that can return an honest zero instead of inventing relevance.

04 / Key decisions

Judgment is part of the build.

Treat relevance as a rejection problem

The system earns trust by excluding attractive-looking false matches rather than maximising the number of cards on screen.

Keep the evidence close

Public source data, matching reasons, code, and the migration review make the product inspectable instead of asking visitors to accept a performance claim.

05 / Proof and limit

Evidence without inflated outcomes.

Proof

The live product, public code, and reviewed Find a Tender migration show the retrieval and matching system working end to end.

Current limitation

The official-feed migration works; repeat willingness to pay among small firms is still unproven.