Python and Node.js engineer. I ship APIs, automation, and AI-backed products, then take the same care into public open source — small, tested fixes in code other people actually run.
Contributions to projects I do not own — the links I want on a résumé.
| Project | Change | |
|---|---|---|
| EmDash CMS · TypeScript / Node | Archives widget skipped every post because publishedAt arrives as a Date, not a string. Grouping helper + tests. |
PR #2876 · in review |
| MCP Rust SDK · official protocol client | Empty cacheScope on tools/list dropped the whole tool list. Treat "" as omitted. |
PR #1241 · in review |
I work on MCP from Python and Node; the Rust SDK is where that protocol lives. EmDash is the Node/TypeScript CMS I use and now contribute to.
Python — FastAPI and Django services, ETL, reporting, LLM tooling. Scripts and APIs that talk to real databases, not notebooks that stay on a laptop.
Node.js — TypeScript services, REST handlers, checkout and billing, admin UIs. I care about timeouts, empty payloads, and what happens when a provider returns garbage.
Postgres, Redis, Docker, and AWS when the product needs them. I do not list every logo I have ever touched.
| mdpublish | Node.js. CLI and library that validates markdown frontmatter and writes a typed blog manifest — no CMS required. |
| google-drive-business-os | Apps Script. Turn a messy Drive into a structured workspace — folders, dashboards, fewer duplicates. |


