Projects
Things I have built, newest first
Microsecond in Slow Motion
Follows a single Nasdaq TotalView-ITCH packet from the matching engine out to a sent order, played as a five-act film with the slow-motion factor always on screen, from real time down to a billion times slower. The decoder underneath runs an idiomatic build and a latency-tuned build of the same pipeline over the same feed, so the nanoseconds on screen are measured rather than animated.
Key Features:
- ITCH decoder in C++, two builds of one pipeline on the same feed
- Naive lane uses polymorphic messages and std::map books; tuned lane uses fixed-offset loads and flat tables
- Every stage timed with rdtsc, with hardware counters behind each stall
- Both lanes cross-checked, and the run fails if their decisions ever diverge
- Motherboard drawn to scale in latency: one unit of board is one nanosecond of travel
A toy example, built as a learning and visualisation exercise with an AI assistant. It is not related to, derived from or representative of any employer's code, systems or trading practices. The trading logic is deliberately simplistic and not a real strategy, the bundled market data is synthetic, and latency figures for hardware outside the decoder are typical published values rather than measurements.
LondonPintFinder
A pint price index for London's pubs and bars. Two scrapers feed a static site: one discovers drinking venues from a bulk OpenStreetMap extract, the other tries to price them from each pub's own menu pages and flags every venue it cannot. Nothing is ever inferred to fill a gap, so a pub with no price found shows no price.
Key Features:
- 4,322 venues across all 33 London boroughs, mapped to TfL zones from the nearest station
- Serve size validated rather than assumed, rejecting bottles, halves, schooners and multi-buys
- Every price carries its provenance: scraped from a menu, estimated from cited chain data, or absent
- Scraped median of £6.50 against a published London average of £6.55
- Next.js static export over a committed dataset, so the site builds standalone
GitHub Language Stats
A published GitHub Action that charts language usage across every repository someone owns. Comparable tools stop at the top handful of languages and skip private work, so this one counts the lot, runs as an action inside the user's own repository for quicker refreshes, and renders for light and dark readers alike.
Key Features:
- Analyses every language across public and private repositories, not just the top six
- Leaderboard, bar, pie and donut renders, each in light and dark modes
- Ranks by lines of code, repository count or a weighted measure
- Counts lines per repository rather than trusting byte totals alone
- Versioned and configurable for use in anyone else's workflow
remotion-to-pptx
Turns a Remotion project into a PowerPoint deck. Remotion will give you a video or one still per frame, but never a deck, so this renders each composition to a PNG sequence, converts it to a palette-optimised GIF with ffmpeg, and assembles one GIF per slide. PowerPoint plays animated GIFs during a slideshow, so the deck moves.
Key Features:
- Discovers every registered composition automatically, with no configuration
- Pipeline from PNG sequence to optimised GIF to assembled slide
- Shells out to the project's own Remotion install, so its version and config are used as-is
- Interactive menu for picking compositions, or flags for scripted use
- Installable as a command line tool
Self-Hosted NixOS Infrastructure
The infrastructure this site runs on: a single VPS declared entirely in NixOS, serving several subdomains from one configuration. Nginx terminates TLS with automatic certificates, systemd units build and deploy each app from its own repository, and a Prometheus, Loki and Grafana stack watches the lot. The sanitised configuration is published as a template.
Key Features:
- Whole machine declared in Nix with flakes, rebuildable from the repository
- Nginx with automatic Let's Encrypt certificates and per-subdomain routing
- Systemd services and timers handling per-app build and deployment
- Prometheus metrics, Loki logs and Grafana dashboards
- Hosts this portfolio, the solar system, the notes site and the airship visualiser
Interactive Solar System
A browser-based education tool, rendering efficiently even on low-spec systems. Interactive 3D solar system with realistic physics and educational content.
Achievements:
- Optimized for low-spec systems
- Realistic orbital mechanics
- Interactive planetary exploration
- Educational content integration
- Accessible design principles
Drone Swarm Simulation Software
Scalable Distributed Drone Swarm Logic capable of forming various shapes, built into a Simulation Software to verify the accuracy of collision avoidance algorithms.
Key Features:
- Scalable distributed drone swarm logic
- Dynamic shape formation algorithms
- Advanced collision avoidance systems
- Real-time simulation verification
- Performance optimization for large swarms
Forum for Glasgow University Drone Society
Full Stack Application using Golang with Gin framework and PostgreSQL on the backend, and React with TypeScript and Tailwind CSS on the frontend for the Glasgow University Drone Society.
Technical Stack:
- Backend: Golang, Gin framework, PostgreSQL
- Frontend: React, TypeScript, Tailwind CSS
- User authentication and authorization
- Real-time forum discussions
- Responsive design for all devices
Mobile Rhythm Game
Developed a mobile rhythm game in React Native that utilized Digital Signal Processing (DSP) to automatically generate rhythm beatmaps from any audio track.
Key Features:
- Automatic beatmap generation using Digital Signal Processing
- Cross-platform compatibility with existing rhythm games
- Beatmap conversion from larger rhythm games
- Real-time audio analysis and rhythm detection
- Mobile-optimized gameplay experience
CV in Terminal
Developed a Terminal UI application in Golang, simulating a webpage for presenting a CV. Deployed on a secure AWS Lightsail instance.
Features:
- Terminal UI application simulating a webpage interface
- Deployed on secure AWS Lightsail instance
- User access jailed to prevent malicious use
- Optimized for low resource usage
- Handles user interactions within terminal environment
CUDA Programming Projects
I'm reading the massively informative Programming Massively Parallel Processors, and in addition to working on the exercises in the book, I am trying to apply what I'm learning to other code, such as using the GPU to improve the speed of a CNN model I've made
Implementations:
- Matrix multiplication optimizations
- CNN model GPU acceleration
- Memory coalescing techniques
- Shared memory utilization
PyTorch Snake AI
Deep Q-Network AI agent designed to play Snake using reinforcement learning. Specifically implementing the Bellman Equation for optimal action-value function approximation.
Technical Details:
- Deep Q-Network (DQN) implementation
- Experience replay buffer
- Epsilon-greedy exploration strategy
- Custom game environment
Embedded Telemetry System
Real-time telemetry system for Formula Student racing car, transmitting vehicle data worldwide with sub-second latency for remote monitoring and analysis.
Capabilities:
- Real-time data transmission (0.5s latency)
- Multi-sensor integration
- Remote visualization software
- In-wheel display systems