Projects

A few things I’ve built from first principles. Each one is a problem I wanted to understand, how I approached it, and where it landed.

MiniTorch

A deep-learning framework built from scratch, verified against PyTorch

Problem
Autodiff is easy to use and easy to treat as magic. I wanted to understand it by rebuilding it — no deep-learning dependencies.
Approach
Reverse-mode automatic differentiation over NumPy: a small tensor/graph engine, a numerically stable LogSoftmax, and an Adam optimizer.
Outcome
Gradients and losses match PyTorch numerically. Enough of a framework to train real models, with every line accounted for.
Python NumPy

rayTracing

A physically-based ray tracer that scales to O(log n) intersections

Problem
Naïve ray tracing tests every ray against every primitive — O(n) per ray, and unusable as scenes grow.
Approach
A physically-based renderer in C++17 with an SAH-built BVH for acceleration, parallelised across threads.
Outcome
Intersection cost drops to O(log n), turning scenes that crawled into ones that render in a reasonable time.
C++17 Multithreading

Brain2Text25

Decoding neural signals into text with a CNN-GRU model

Problem
A brain–computer interface produces noisy time-series; the task is to turn that signal into the phonemes a person is trying to say.
Approach
A CNN-GRU temporal model with greedy CTC decoding, scored end-to-end with Levenshtein distance.
Outcome
An end-to-end signal → phoneme → text pipeline, evaluated on edit distance against ground truth.
PyTorch CTC