ProjectsTrace

Trace

A side project Nevin and I built to index engineers by shipped work, open-source commits, and technical writing instead of self-reported profile keywords.

Titles lie; shipped work usually doesn’t

Most people-search tools scrape resume titles and keyword lists, which tells you almost nothing about what someone has actually built. Real signals live in scattered places: engineering blogs, open-source commits, papers, and small project write-ups.

We built Trace as a weekend indexing experiment so a query like “payments and open source” returned concrete receipts: a settlement ledger someone worked on, a Postgres extension they maintain, or architecture notes they published, all tied to one resolved person node instead of a pile of unverified links.

Merging records without
inventing people

Entity resolution is the hardest part of any people graph. Merge too aggressively and two engineers named Alex Kim collapse into one fictional resume; merge too timidly and the same person shows up four times across GitHub, personal sites, and conference pages.

Hard identifiers like normalized work emails and canonical profile URLs link automatically, while ambiguous overlaps stay split for review. When a human fixes a bad match, that correction sticks as a pinned edge in the identity graph instead of getting clobbered on the next crawl.

Entity resolution sandbox

Canonicalize before merging

Commit headers and company author bios rarely format addresses identically. Normalizing case and stray whitespace links both receipts automatically.

Crawl fragment AGit commit author

J. Zinga

pg-audit-stream · main branch

Canonical keyjoseph@northstar.io
Crawl fragment BEngineering blog post

Joseph Zinga

Northstar Pay · New York

Canonical keyjoseph@northstar.io
Deterministic rule · Exact key match

1 unified person node in graph

Normalized keys are identical, so both work receipts attach to a single person ID.

prs_unified_01Joseph Zinga
Repository: pg-audit-streamWriting: Reconciling an interrupted payout

What I took away from it

We wired the identity graph up behind a small REST API and an MCP tool server so local agents could query structured receipts directly without hallucinating backgrounds.

The fun part of the project was strictly the graph canonicalization and evidence ranking rules. Once the resolution pipeline and query parser worked cleanly on a test corpus, I archived the crawler and kept the interactive search and entity-matching sandboxes here as notes.