Computer Science at the University of Waterloo. I build systems in C++ and CUDA, apply machine learning to real problems, and make tools for building software.
The questions I come back to: Where does the memory go? What is the bottleneck? How do I know the result is right?
| Project | What I built | A useful place to look |
|---|---|---|
| Native LLM inference | A C++/CUDA runtime for Qwen with quantized weights, hybrid attention, and CPU-to-GPU weight streaming. | Weight residency and prefetching · Numerical reference |
| TruthTone++ | Audio deepfake detection with spectral analysis and a per-second confidence timeline. Best Audio AI Hack, CxC 2026. | Watch the 36-hour hackathon build · Architecture and setup |
| Claude–Codex Duo | An experiment in coordinating a read-only planner and a code-writing implementer through a local message board and shared workspace. | How the loop works |
I have contributed seven merged pull requests to codebases owned by other developers:
- Haven-HV — five merged PRs spanning core AI infrastructure, automation services, memory, and tests.
- SkinSight — two merged PRs delivering the ML implementation and frontend.
Next: build a sustained contribution record in a larger, widely used project.
Across two software engineering internships, I have worked on infrastructure automation with Kubernetes, Helm, PostgreSQL, S3, and KMS; repaired authorization across 50+ services; built account-migration tooling; decoupled services with Kafka; improved CI; and shipped tested data pipelines for quantitative-finance systems.
Running a 27B model on a 16 GB GPU.
My inference engine keeps part of the model in GPU memory and streams the remaining layers from pinned host memory. The work is in the details: packed weight formats, asynchronous copies, kernel behavior, and checking the output against a NumPy reference.
The next step is to measure how much transfer time prefetching actually hides, then improve the streamed decode path. The engineering notes include the measured results, numerical differences, and unfinished work.
- Microheap — a learning-focused C allocator with explicit chunk metadata, gap reuse, and memory-layout inspection.
- Generic merge sort in C — working with generic data and low-level memory operations.
- Risk-parity optimizer — a Python exploration of risk budgets and combining portfolio scenarios.
Open to software engineering opportunities and conversations about systems, ML infrastructure, and developer tools.



