Monorepo for my 2025 projects.
A full-stack in-browser ZK proof verifier. Compiles a R0VM Rust verifier to WebAssembly via wasm-pack and serves it through a Next.js app. The demo calculates the 1,000,000th Fibonacci number, then verifies a ZK proof of that computation directly in the browser in a fraction of the time it takes to calculate it from scratch. Includes a video walkthrough.
Stack: Rust · R0VM · wasm-pack · WebAssembly · Next.js
An interactive personal site concept built with SvelteKit and Three.js. You roll a coloured cube across an 8×8 chess-style grid using arrow keys. Landing on highlighted tiles reveals content panels (blog posts, reading lists). Features smooth pivot-point roll animations with eased quaternion interpolation, per-face materials, and a responsive split-screen layout.
Stack: SvelteKit · Three.js · TypeScript
Fix for wevm/vocs search indexing (upstream issue #276). MDX files with local imports and custom components were silently failing to get indexed for search because processMdx would error out on unresolvable imports at build time. The fix strips import/export statements and component tags from MDX before indexing, so all page content is searchable without breaking the build. Published as a patched release (270+ downloads). The fork is kept alive at sasha-computer/vocs for anyone pinned to it.
Stack: TypeScript · MDX · Vite
Working through Andrej Karpathy's Zero to Hero neural net series from scratch. Built a custom autograd engine (Node class) with full backpropagation support (addition, multiplication, power, tanh activation) then used it to construct and train a multi-layer perceptron. Also experimented with tinygrad for GPU-accelerated tensor ops on Apple Metal.
Stack: Python · NumPy · Matplotlib · tinygrad
Day 1 of Advent of Code 2025. Both parts, handwritten Python, no AI. A dial rotation puzzle: parse directional instructions, simulate modular arithmetic on a 0–99 dial, and count zero-crossings. Part 2 adds directional awareness to the crossing logic.
Stack: Python

