Portfolio & demos / LinkedIn / Résumé / Email
I build machine learning tools in Python and systems software in Rust and WebGPU. I’m a Computer Science graduate of BITS Pilani Dubai, based in Abu Dhabi.
My projects expose what happens underneath: gradients, generated shaders, causal assumptions, sampling diagnostics and query plans. All eight featured projects have interactive browser demos.
Forge implements tensor graphs, reverse-mode autodiff, optimizers and a WebGPU compiler. Train a network, inspect its gradients, then follow the graph through fusion and memory planning into generated WGSL.
Python NumPy WebGPU WGSL · Try it ↗ · Source
Meridian explores what observations can—and cannot—tell us about causes. Discover graphs with PC-stable or linear NOTEARS, compare explanations, and run interventions and counterfactuals under explicit model assumptions.
Python NumPy SciPy Pyodide · Try it ↗ · Source
Mycelium trains small neural networks to update a grid of cells. Five trained models run through a shared NumPy browser runtime. Grow a pattern, damage it, and compare growth, persistence and repair across training regimes.
Python PyTorch NumPy Pyodide · Try it ↗ · Source
Posterior implements HMC, original slice-based NUTS and mean-field variational inference, with its own autodiff and parameter transforms. Run multiple chains, inspect convergence, and compare estimates with reference distributions.
Python NumPy SciPy Pyodide · Try it ↗ · Source
Loom — An LLM inference engine in Rust and WebAssembly: GGUF parsing, quantised matrix multiplication, attention and tokenisation, without ML libraries. Checked against PyTorch layer by layer.
Rust WebAssembly GGUF · Try it ↗ · Source
Escapement — Raft consensus inside a simulator that owns time, networking and randomness. Linearizability checking, fuzzing and failure minimisation turn bugs into replayable test cases.
Rust WebAssembly TypeScript · Try it ↗ · Source
Orrery — An analytical SQL engine with a parser, binder, cost-based optimizer, vectorized operators and a Parquet reader. Zero dependencies in the Rust engine crate; query plans and optimizer rewrites are inspectable.
Rust WebAssembly SQL · Try it ↗ · Source
Lucida — A WebGPU path tracer with a binned-SAH BVH, GGX materials and multiple importance sampling. Rendering is checked against an independent Rust CPU tracer, with convergence measured against repeated reference renders.
WGSL WebGPU Rust · Try it ↗ · Source
How the work is checked
- Forge: numerical reference checks against PyTorch; CPU and WebGPU validation recorded separately.
- Meridian: PC-stable and NOTEARS comparisons against independent implementations, plus exact structural-model fixtures.
- Mycelium: NumPy/PyTorch parity checks and separate growth, persistence and repair evaluations. Some models fail persistence tests; a successful repair is not a universal guarantee.
- Posterior: exact solutions and independent references, with failed sampler cases retained in the results.
- Loom: native/browser parity and layer-level PyTorch comparisons.
- Escapement: deterministic replay, a linearizability checker and minimised fuzz failures.
- Orrery: independent SQL comparisons and measured query benchmarks.
- Lucida: an independent CPU reference and convergence measurements across repeated renders.
The repositories contain the tests, fixtures, measurements and their limitations.
Also built
| Project | Work |
|---|---|
| Nexus | Self-hosted AI workbench with model routing, document RAG and engineering-drawing analysis. Built during my cybersecurity internship at exida Middle East. |
| VoiceGuide AI | Voice-driven travel planning with Python, Streamlit and Azure, supporting 15+ languages. |
| URL Shortener | FastAPI service with live click analytics. |
| Stock Dashboard | Market data and interactive charts with Streamlit, yfinance and Plotly. |
| AI Summarizer | PDF summarisation with the OpenAI API. |
| Price Tracker | Scheduled price monitoring and alerts. |
Open to software engineering, machine learning and data roles.