Full-stack software engineer. I like problems that don't have an answer yet.
My site shows how that plays out, including the hypotheses that didn't hold up.
I work from the problem to the specification, then to implementation. I use AI to code, test, and document; deciding what to build and checking what holds up stays with me.
- personal-website: how I turn discovery into specifications and record engineering decisions in ADRs.
- gemini-data-extractor: how I turn a model integration into a Python CLI for extracting structured data from PDFs and images.
- nestjs-global-exception-filter: how I handle API failures consistently, with request tracing and sensitive data masking.
- safe-execute-ts: how I make success and failure explicit in a small, typed API for synchronous and asynchronous code.
Outside software, I'm a triathlete and enjoy photography.
My other three-stage pipeline
🏊 swim ──→ 🚴 bike ──→ 🏃 run
T1 T2




