Problem
A brokerage was burning operator time on counterparty matching — the “who should I pair with whom” judgment call that lived entirely in two senior brokers’ heads. The CRM stored every fact about the parties but none of the ranking logic. Hard to scale, harder to onboard.
Approach
A thin matchmaking layer over their existing CRM. Pull facts from the CRM, embed the qualitative judgment from the senior brokers as ranking rules and a small vector-similarity pass, return a shortlist with rationales. Operators stay in the loop; the system explains why each candidate is on the list so the operator can override with one click.
Stack
TypeScript service, Postgres for the rank cache, vector search for the similarity pass. Hooks into the CRM via webhooks; no schema changes on the CRM side. Less SaaS, more apprenticed software.
What shipped
In production. New operators ramp meaningfully faster because the rationale text reads like a senior broker’s note. The senior brokers review and edit those notes weekly — the rubric is alive.
What’s next
A second tier of the ranking that learns from operator overrides — but gated behind a manual review so the model never silently drifts from the senior brokers’ judgment.