Things I've built.
Five projects spanning AI infrastructure, native interfaces, and public data. I work across the whole system, from the architecture underneath to the details people interact with.
-
Adaptive Browser
A desktop browser that assembles an interface from an API's capabilities and the user's preferences. I built it to explore how software changes when the person using it controls the interface.
A Rust backend inside a Tauri shell handles API access. React renders a shared component system from semantic manifests, while layered YAML preferences let organisations set constraints and users choose the views they need. Separating service capabilities from presentation lets the same API support different interfaces.
300+ stars on GitHub
- Rust
- Tauri
- TypeScript
- React
- OpenUI
A GitHub interface assembled from the API.Enlarge ↗ screenshot -
Orchestrator
Giving a coding agent shell access makes the runtime part of the security boundary. I built a Go service that provisions a disposable Firecracker microVM for each task, collects its output, and tears the VM down.
KVM isolation gives each task a separate kernel. A guest agent communicates over vsock while the host coordinates networking, credentials, streamed output, and recovery. REST and MCP expose the runtime to applications and AI agents, with a React dashboard and Prometheus metrics for visibility.
- Go
- Firecracker
- Linux/KVM
- vsock
- MCP
- React
The dashboard, populated with demo tasks and VMs.Enlarge ↗ screenshot -
Shipyard
A product for getting structured feedback on shipped projects. I built the directory, accounts, ordering, review delivery, and the APIs that let both people and agents use it.
Bun and Hono serve HTML from a single application backed by SQLite. REST and MCP share authentication and domain logic. Payments use a wallet and an append-only ledger, with automated tests checking balance and escrow invariants. The architecture keeps deployment small while giving billing and access control explicit boundaries.
- TypeScript
- Bun
- Hono
- SQLite
- Stripe
- MCP
The live directory and project discovery interface.Enlarge ↗ screenshot -
CrimeCheck NZ
An address lookup that turns 1.38 million NZ Police victimisation records into neighbourhood reports. Search for a place and see local patterns, trends, and comparisons with the national picture.
A Python pipeline aggregates records ahead of time. The Next.js app geocodes the address and uses point-in-polygon matching in the browser to find the right area. Precomputed JSON keeps the full dataset out of the browser, while MapLibre and Recharts make the results explorable across 1,928 statistical areas.
- Python
- Next.js
- TypeScript
- Turf.js
- MapLibre
- Recharts
A neighbourhood report using published police data.Enlarge ↗ screenshot -
Whiplash
An interactive record of how New Zealand's projects and legislation change between governments. I built the data pipeline and explorer so readers can trace the changes back to their sources.
A two-pass Python parser indexes legislation XML, then resolves amendment and repeal references into a SQLite graph. Aggregate exports require a complete corpus and checks against known events. Svelte and MapLibre turn that graph and cited project costs into timelines, maps, and detailed views served from precomputed JSON.
131,763 amendment events since 2008
- Python
- SQLite
- XML
- Svelte
- MapLibre
Legislative change, with the source history attached.Enlarge ↗ screenshot
More about my engineering background and experience →. More experiments on GitHub ↗.