Software engineer — scientific data systems and agentic AI
Eight years building the data infrastructure computational scientists depend on, six of them in drug discovery, most recently building production agentic AI at a clinical-stage biotech.
A learned ranking model over World Cup cross-country skiing, and the database behind it.
Predicts race results from what each skier has done in races like this one — same technique, similar distance, recently — with a similarity kernel over 1,661 races and 79,725 results. Browse any of 809 athletes, see what each is actually best at, and drive the model yourself: the controls recompute every prediction in your browser.
A cardiotoxicity screen, and a demonstration of how much of an ML score in drug discovery is an artefact of the data split.
11,059 compounds from ChEMBL, Morgan fingerprints, scaffold-split so that chemical series are kept whole and a test compound never has a close analogue in training.
Ski wax recommendations from the weather the snow has actually seen.
Not the current temperature — the freeze-thaw history, time since snowfall and humidity that decide what actually works, pulled live for each Anchorage trail system. It says plainly when there is no snow and the recommendation is hypothetical.
Agentic drug discovery on fully open-source tooling.
RDKit, ChEMBL, AutoDock Vina and fpocket exposed as MCP tool servers driven by Claude agents, with a strict split between a layer that computes and a layer that decides — the agent never produces a number, only calls the tool that does.
The hosted demo is that computing layer with the agent taken off the front: profile a compound, run it past the structural alerts, and run the validation harness yourself. No key, and nothing it tells you came from a language model.
What climate change has already done to one place on Earth.
Two thirty-year normals from ERA5 reanalysis with a bootstrapped interval on the difference, five downscaled CMIP6 models for the 2040s each differenced against its own baseline, and what El Niño winters have actually done at that point over 77 years of NOAA's index.
Pick anywhere on Earth and it computes all of that live. The narration layer is switched off in the hosted copy, so every line on the page is the data itself.
Where and when driving in northern New Mexico kills people — and a traffic simulation underneath it.
Most traffic simulations built outside transport agencies are an OpenStreetMap network plus randomly generated trips — they animate beautifully and mean nothing. Demand here comes from Census LODES commute flows and ACS departure times, and is validated against NMDOT counts on stations held out of fitting.
A quarter of the people killed here were not in a car, 64% of them after dark. The map ranks corridors by deaths per billion kilometres driven, prefers a real traffic count to the model wherever one exists, and says which it used — and it reports that only 12% of the deaths are on roads that can be ranked at all.
The simulation carries 14% of measured traffic and the README says so at the top. Five bugs found along the way shared one shape: a tool reporting success while silently discarding most of its input.
Where automated speed enforcement is in northern New Mexico, what actually triggers a citation, and how much any of it can be trusted.
Santa Fe announces six relocatable trailers on a Facebook page. Albuquerque publishes a list of forty pole-mounted cameras with activation dates. Rio Rancho publishes nothing, and everything known about its sixteen cameras was mapped by volunteers. One map, three very different levels of legibility, and it says which is which rather than drawing them alike.
Trailers get towed, so it draws signed corridors rather than pins: a pin asserts the camera is here, which stops being true the moment one moves. Routing, geocoding and address suggestions all run in your browser against public services — the page has no backend, so there is nowhere a route or an address could be logged.
A terminal summary and local dashboard for who is actually looking at your GitHub.
GitHub shows repository traffic one repo at a time, as raw counts, and deletes it after fourteen days with no API to get it back — if you did not look, it never happened. vantage snapshots every repo into local SQLite on each run, so history accumulates, then grades each referring domain by how strongly it implies someone is evaluating you. Fifty views from a search engine and three from a hiring platform look identical on GitHub's own page; only one of them is a decision being made.
Standard library only, borrowing the gh CLI's token. No
accounts, no dependencies, and nothing leaves the machine.
Gate Bioscience — remote
Sole engineer on most projects. Built the company's agentic AI capability from nothing: LLMs connected to internal databases and analysis tools over MCP, with the tool interfaces, structured outputs and grounding that let non-technical scientific staff rely on the answers — and the evaluation loops that made that reliance defensible. Architected the production PostgreSQL schema and the Python and R pipelines on AWS, Docker and Nextflow behind it.
OpenEye, Cadence Molecular Sciences — Santa Fe
Architected a configurable distributed search system over billion-scale molecular databases in Go, Python and C++ — data representation, indexing strategy and parallel query execution under latency constraints. Led technical direction of a major product, translating requirements from computational chemists and pharma customers into shipped capability. Promoted twice.
SimScale · Stellar Science · Los Alamos National Laboratory
Meshing for a cloud simulation platform in Munich; C++ for US defence and satellite analysis; subsurface flow simulation across LANL's HPC clusters.
Technische Universität München, 2017 · B.S. Chemical Engineering, Yale University, 2014