Currently a Data Scientist Intern at IBM on the Skills Network team, building high-throughput telemetry data pipelines. Previously, I spent a year as a Software Engineering Intern with the Ontario Public Service, building developer tooling and AI integration layers.
Currently a software engineering co-op with the Ontario Public Service, where I work on a Next.js/TypeScript frontend and build internal tooling around AI-assisted development workflows. Alongside that I hold two research assistant positions — one in clinical AI fairness, one in wireless networks — and lead the AI & Data Society at York.
My interests sit in uncertainty quantification and conformal prediction, time-series forecasting, agentic AI systems, and local-first inference infrastructure. I run a home lab for local LLM inference, largely because I think the interesting question in AI right now is not just what models can do, but where they run and what they cost.
- Aperture — a local-first, least-cost routing layer for AI inference. Queries run on-device via WebGPU and escalate to the cloud only when the workload demands it. Provider-agnostic gateway, difficulty-based router, spend ledger, and a strict local-only mode. Next.js 16 · TypeScript · Tailwind v4 · web-llm
- Rootbound — a local-first urban gardening platform: community feed, peer-to-peer plant marketplace, plant care engine, and a computer-vision pipeline for species ID and harvest forecasting. React · Express · Postgres · Redis · PlantNet · Gemini Vision
- EMForecaster (CQR) — research on conformalized quantile regression and uncertainty quantification for long-horizon time-series forecasting.
- Skin-tone fairness in dermatology AI — second author on a paper evaluating pretraining and harmonization limits across five dermatology datasets. Swin Transformer · concept bottleneck models
| Project | What it does | Stack |
|---|---|---|
| Aperture | Local-first, least-cost AI inference router — on-device first, cloud only when needed | Next.js 16 · TypeScript · Tailwind v4 · WebGPU / web-llm |
| Rootbound | Urban gardening platform: marketplace, care engine, CV-based plant ID and harvest forecasting | React · Express · Postgres · Redis · PlantNet · Gemini Vision |
| EMForecaster | Conformalized quantile regression for long-horizon time-series forecasting | Python · PyTorch · Neptune.ai |
| Grocer OS | Autonomous grocery agent built on GOAT Network (Toronto OpenClaw Hack) | Agentic AI · TypeScript |
| SmallBox | Hackathon-winning build (IBM × Sheridan) | Next.js · watsonx.ai · Watson NLU · Cloudant |
| Rosetta | Real-time multilingual lecture translation, latency-optimized | Python · speech + translation APIs |
| AI-Documentor | Automated code documentation generation | Python |
| Wildfire Prediction | Wildfire risk modelling and geospatial visualization | Python · scikit-learn |
| Hype-Detector | NLP pipeline for detecting hype in text | Python · NLP |
| News Aggregator | Multi-source news aggregation app | Full-stack |
I actively contribute upstream to the ecosystems and tools I use daily.
Core Code Contributions
| Repository | Pull Request / Issue | Contribution Summary |
|---|---|---|
| Shopify/cli | #6800 | Fixed Linux platform defect regarding output swallowing on Ubuntu 24.04 |
| TangleML/tangle | Active | Contributing to UI/UX layers for Shopify's open-source visual ML orchestration engine |
| Shopify/hydrogen | #3988 | Traced and isolated CLI build failures occurring on file paths containing spaces |
Open to conversations about applied ML research, inference infrastructure, and systems that have to work outside a demo.



