Three Rebuilds of This Website
How my personal site went from a Jekyll academic template, to Next.js and Tailwind on Vercel, to Astro on Cloudflare — and what each rewrite was really about.
How my personal site went from a Jekyll academic template, to Next.js and Tailwind on Vercel, to Astro on Cloudflare — and what each rewrite was really about.
How we used autonomous experiment loops to take action search from hand-crafted heuristics to a 109M model that beats embedding models 70x its size.
How I built an end-to-end research system at a talk, from context files to a second brain with knowledge graphs.
Teaching a 2B parameter model to delegate arithmetic to an external calculator via inline computation tokens, with three eval backends on Apple Silicon.
My journey building a mobile coding setup - from SSH terminals to custom apps to autonomous agents running overnight on a VPS.
How I built semantic search for 10k+ actions at StackOne, and reflections on the AI-accelerated development lifecycle.
My thoughts on where the evolution of coding in the world of LLMs.
How I built an AI agent that finds agentic use-cases and gets better with feedback.
Here is how I optimized the serving of my fine-tuned LLM to efficiently evaluate it on the Tau benchmark.
How to make your GPU utilisation go up by taking your GPU Memory usage How to make your GPU train an LLM fast(er)
How I spent the last day of my Dubrovnik holiday fixing my broken FPL bot while dodging lightning bolts and BBQ duties.
How I built a Fantasy Premier League MCP Server to automate my terrible FPL career.
How I built an AI agent that translates provider errors into clear resolution steps, starting with evals from day one.
The training partition is a crucial component of an evaluation. It is used to assess generalisation performance on unseen data and ensure that the model is not overfitting to the training data. Here is a (probably) new way of partitioning time-series data for training and testing.
A small PyPI package for quantifying how much a machine learning leaderboard depends on the choice of random seed.
An Obsidian Canvas plugin that turns LLM text generation into an explorable graph of possibilities.
Building a bespoke reinforcement learning trading agent with deep belief networks and sentiment data, running on a Raspberry Pi.
A hand-gesture music controller built from printed album art, a webcam, object detection and a 3D CNN.