Work

Most of what I build runs inside client systems, so the code is private. Each project has its own page: what it was, what I did, and what changed. Where a public page exists, it’s linked.

Six projects, newest first

YearsProjectOutcome
2025 – presentAgent for a proprietary programming languageLead architectProjected 50% less manual work; in progressClient work, no public page
2023 – 2024Enterprise RAG assistant for insurance supportArchitectAbout 90% of questions resolved without a person; 50,000+ users; 525% ROI in 12 monthsCGI product page · CGI article
2023 – 2024Lineage and rule automation with LLMsData architect80% less manual work on AxiomSL rule updatesClient work, no public page
2021 – 2023Fraud loss-ratio modelData engineer321% lift in recovered fraud losses versus a top-five bank benchmarkClient work, no public page
2021 – 2023Insurance policy-history data platformData engineer99.9% uptime; median queries under 200 msClient work, no public page
2020 – 2021Computer vision for hockey broadcast videoResearch assistantmAP ≥ 70% on event detectionVector Institute article

How I build

A model is only as good as the system around it.

For five years I’ve built those systems: the data underneath, the retrieval in the middle, and the agents and guardrails on top.

How I build Three layers. At the bottom, data flows from many sources through pipelines into an index. In the middle, retrieval pulls context from that index. On top, an agent workflow takes a request, calls models with that context, passes guardrails and returns the answer. The agents and guardrails on top The retrieval in the middle The data underneath Request Models vLLM Context Index FAISS, Pinecone Sources Guardrails PII filtering, EBNF Answer Agent workflow LangGraph Retrieve ETL/ELT pipelines Lineage OpenLineage How I build Three layers. At the bottom, data flows from many sources through pipelines into an index. In the middle, retrieval pulls context from that index. On top, an agent workflow takes a request, calls models with that context, passes guardrails and returns the answer. The agents and guardrails on top The retrievalin the middle The dataunderneath Request Answer Agent workflow LangGraph Guardrails PII filtering, EBNF Models vLLM Retrieve Context Index FAISS, Pinecone ETL/ELT pipelines Sources Lineage OpenLineage
The generic shape, simplified. No client detail.
Read as steps
  1. Sources feed ETL/ELT pipelines.
  2. Lineage records where each piece of data came from and how it moved (OpenLineage).
  3. The prepared data is indexed for search (FAISS or Pinecone).
  4. A request reaches the agent workflow (LangGraph), which decides the next step.
  5. Retrieval finds the relevant context in the index.
  6. The workflow calls vLLM-served models with that context.
  7. Guardrails: PII filtering keeps personal information out, and EBNF grammars keep every output well-formed.
  8. The answer, document or extracted rule goes back to whoever asked.

In the open

These are the public pieces.

Recent

Early work, 2019 – 2020

Early public repositories
YearRepositoryWhat it is
2020world_qlearningA Q-learning agent that learns to cross an M×N grid world, with notes on how the discount and learning rates change convergence.
2019aStar-pathFindingSolves the 8-puzzle in Prolog with A*, cycle-checking A* and IDA*, using misplaced-tile and Manhattan-distance heuristics. Course project.
2019cryptologyJava code and notes on cryptography, from Caesar and Vigenère ciphers to RSA, Miller–Rabin primality testing, digital signatures and HMAC.
2019reddit-tfidfFinds the most significant terms in Reddit comments with TF-IDF, using MapReduce and Spark over the Pushshift and Reddit APIs. Team project.

All repositories on GitHub →