I'm a data scientist in Seattle working on distributed data pipelines and applied AI. I turn event data into reliable tables for analytics and build small agent systems with inspectable execution, persistent state, and explicit limits.
Personal site · Loop Agent demo
- WPP: Spark and Databricks pipelines for cross-channel advertising data, processing roughly 5–20 million rows per day. My work includes SQL integration, table modeling, data-quality checks, and refresh monitoring.
- ByteDance: Payment data pipelines using Kafka, Spark, and Iceberg. My contributions include transaction and user table definitions, partitioning, and diagnosing Spark data skew and memory pressure with Spark UI and executor logs.
- Applied AI: PyTorch forecasting, LLM post-training evaluation, and RAG and agent projects. I care about checking outputs and failure cases, not just getting a model to return an answer.
My strongest tools are Python, SQL, Spark, and Databricks. I'm interested in reliable data products, distributed processing, and AI systems whose behavior can be tested and inspected.
| Project | What you can inspect |
|---|---|
| Loop Agent · demo · architecture | A Python agent that saves tool calls and outcomes in SQLite so you can inspect what happened after a restart. Malformed tool results become visible errors the agent can handle. The demo needs no API key. |
| Offer Calendar · examples | Tracks changes in public internet offers using saved source quotations and conservative comparison rules. Includes a Streamlit calendar, an offline test suite, and a local demo with synthetic observations that needs no credentials. |
| SplitTaste · demo | DuckDB ETL from MovieLens 32M ratings to Parquet, a versioned browser data contract, and reproducible recommendation evaluation with baselines and explicit metric gates. |
| Tab Tidy · Chrome Web Store | Chrome extension that proposes tab groups, takes plain-English refinements, and previews every change before applying it. |
| Point2Prompt · install | Bookmarklet that turns a click on any UI element into a structured change brief for Claude Code, Codex, or Cursor. |
Other projects: Trackpad Canvas, a native macOS diagramming app, and Where to Sit, a cinema seat-view simulator.
- PyMC Marketing: fixed channel noise scaling so each channel keeps its own noise level when array dimensions are reordered. Also fixed time-varying baseline plots and target-scale dimensions in marketing mix model summaries.
- Strands Harness SDK
- OpenMed
- Microsoft Agent Framework
- DeepEval
- OpenHarness

