Things I've Built
A selection of personal projects — tools, systems, and open work.
- Rust(7)This Website - Full-stack Rust with Leptos, Axum SSR, and WASMTrading Bot - Kubernetes operator for declarative trading bot lifecycle managementEcosim - Planet-scale ecosystem simulator built on BevyProcedural Generation - H3 hexagonal planet grid with adaptive LOD and deterministic simulationOrbit Camera - Trait-based orbital camera Bevy plugin with customisable inputKeybind Plugin - Flexible multi-input action-binding system for BevyGPU Shaders - H3 hexagonal grid shaders written in Rust via Rust-GPU
- Bevy(4)
- ECS(4)
- Axum(2)
- WASM(2)
- Git(2)
- CI/CD(2)
- Kubernetes(2)
- H3(2)
- Leptos(1)
- lettre(1)
- CSS(1)
- Cloud-hosting(1)
- Let's Encrypt(1)
- RKE2(1)
- Longhorn(1)
- Istio(1)
- Helm(1)
- Linux(1)
- YAML(1)
- kube-rs(1)
- SQLite(1)
- OpenAPI(1)
- tokio(1)
- Docker(1)
- Procedural Generation(1)
- Rust-GPU(1)
- SPIR-V(1)
This Website
A full-stack Rust web application with server-side rendering, WASM hydration, and a live view-source mode. Built with Leptos, Axum, and cargo-leptos.
Details →Home Lab
A three-node bare-metal Kubernetes cluster on repurposed hardware, running RKE2, Istio, and Longhorn with real workloads — Gitea runner, RabbitMQ, Matrix, InfluxDB, and more.
Details →Trading Bot
A Kubernetes-native operator that manages the full lifecycle of automated trading bot deployments via Custom Resource Definitions — configuration, scheduling, and declarative risk limits all in one spec.
Details →Ecosim
A planet-scale ecosystem simulator built on Bevy. Players seed a world, guide species populations, and intervene in emergent food webs — from global climate patterns down to individual organisms.
Details →Procedural Generation
A planet-scale hexagonal grid engine using Uber's H3 library. Cells refine and coarsen dynamically based on camera distance, with Perlin noise terrain and a trait-based simulation system.
Details →Orbit Camera
A reusable Bevy orbital camera plugin. Input is fully decoupled via a trait — swap keyboard, mouse, or gamepad without touching the camera code. Quaternion rotation, two modes, speed falloff.
Details →Keybind Plugin
A Bevy input binding plugin that maps keyboard, mouse, gamepad, and touch inputs to named actions. Game logic responds to actions, not hardware — rebinding is a runtime change.
Details →GPU Shaders
SPIR-V shaders written in Rust via Rust-GPU. The vertex shader generates H3 hexagonal cell boundaries entirely on the GPU from a list of cell indices — no mesh data from the CPU.
Details →