Work
Software I build, for clients and for myself.
I built every project on this page myself, and each is labelled for what it is. Client work is private, so I describe it rather than link to it. My own software is public and can be checked line by line.
- Client work paid, private
- Open source public code
- Own project mine, live, not a client’s
Client work
Paid, private software I’ve built and supported for clients in four countries since 2017.
-
Trading automation
Software that runs while nobody watches, and costs money when it stops
Trading software for clients in the US, Australia, New Zealand and Singapore, built to run unattended in live markets and supported for years.
My own software
Built for myself and published, mostly to work out how AI and ordinary software should fit together. Read in order, it is one line of work.
2024
Where the AI work started
A local model doing one narrow job, inside plain, predictable software.
-
Obsidian Text Transformer
Plain notes in, structured Obsidian Markdown out, on a model that runs on your own machine
Turns folders of plain notes into structured Markdown for Obsidian with a model running on your own computer.
2025–26
Platforms and operations
A service I run end to end on my own GitOps cluster, and a tool for understanding OpenShift access.
-
Aim Duel platform
A real-time service, built and operated end to end on Kubernetes
A live real-time game, deployed from Git to my own Kubernetes cluster with TLS, monitoring and hardened defaults.
-
Lineage
Who has access to what in OpenShift, and why
Explains who can access what in an OpenShift cluster, and why, including access that quietly comes back.
2026
AI decisions you can inspect
The model makes bounded choices, code validates them, every step is visible, and a person approves changes.
-
IntentSQL
Plain-English data access with an inspectable plan and guarded writes
Ask a SQLite database questions in plain English, see exactly how each answer was built, and approve every change before it happens.
-
Decision Lab
See what a decision model decides, and what changes its mind
A playground for comparing AI decision models on the same input, and seeing what changes their answer.
Upstream contributions
Fixes I’ve contributed to open-source tools I depend on.
-
Upstream · 5 merged
Kubernetes documentation (opens in a new tab)
Fixes to CRD, pod-resize and HPA examples. For one fix, re-running a Job example on Minikube showed the documented two-minute estimate was really about nine.
-
Upstream · 2 in review
OpenShift documentation (opens in a new tab)
Corrections to the LimitRange constraint descriptions and the VPA OOM bump-up example.
-
Upstream code · in review
pytest #14941 (opens in a new tab)
Reproduced an ExceptionGroup traceback-filtering bug and proposed a fix with two regression tests. Open, not merged.
Side experiments (2)
- Jev Creature Forge (opens in a new tab) Experiment
Natural language → an inspectable typed genome → a deterministic procedural SVG creature. A two-day test of what a model should decide and what should stay in code.
- The Cartographer Attractor (opens in a new tab) Model behaviour study
400 recorded responses to one creative prompt: 199/200 and 198/200 contained “cartograph*”. A reproducible black-box case study, with every attempt in the public ledger.