I'm a project manager at the National Heavy Vehicle Regulator, where I've worked since 2017. Outside work I build AI products end to end, alongside native iOS apps on the App Store and software that takes a messy process and finishes the job.
Most of what I build now has a language model in it somewhere. The part I care about is deciding where it goes: what it gets to see, what it has to prove, and which jobs are better left to ordinary code.
Stained glass since 2022, mostly given as gifts.
How I use AI
Grounded generation
A model writes from facts it has been handed, not from memory. Travel History App gathers Wikipedia history and search-verified facts before Claude writes a word. My piano teacher project reads the score with optical music recognition first, so Claude answers from the real notes instead of guessing from a picture of the page.
Defect Council classifies heavy-vehicle defects against the National Heavy Vehicle Inspection Manual. It finds the relevant sections with hybrid search (FAISS vectors and BM25 keywords, merged by reciprocal rank fusion), then puts that text and the HVNL risk matrix in front of every model.
Several models, one answer
In Defect Council, Grok, Gemini and GPT each classify a defect on their own, a judge settles disagreements, and a critic checks the result against the risk matrix. Every model's working is kept in the output. Travel History App runs a model as a nightly judge that rereads cached cards and rebuilds the weak ones.
Reading messy documents
MerchTally uses a vision model to read sales statements in whatever form they arrive: photos, screenshots, PDFs and handwritten notes. Each line is matched to the seller's catalogue with a confidence score, and a person confirms the uncertain ones.
ABC Book takes what someone tells it about their situation and generates an illustration for each page that fits it, then puts the pages in order as a finished book. Nothing is locked in: every image and every page can be reviewed and edited before the book is made.
Rules enforced in code
I don't rely on a prompt to keep a rule. Music Teacher throws away any mark that doesn't land on a real note. Travel History App rejects filler and wrong place names before a card is saved. Define North asks for strict JSON sized to the grid, and cleans up when it doesn't get it.
The Risk Register Builder gives the same register for the same answers, every time, with no model in the live tool. Music Teacher's piano fingering is a model of the hand fitted to professional pianists' fingerings, not a chatbot's guess.
I work with coding agents across Swift, TypeScript and Python. They rewrote Travel History App from Flutter to native Swift, and built the Dark Knights publishing pipeline, which carries its own agent instructions so the next update goes the same way.
Speaker at the Cursor AI Brisbane workshop, August 2026.
Cursor AI Brisbane, August 2026
Experience
National Heavy Vehicle Regulator
2017 to present
Product engineer
Programs
Industry Codes of Practice Program
National Strategic Geospatial Model
National Services Transition
National Inspection Reform
Risk Register Builder, published as a public NHVR resource, and the NHVAS to HVA gap analysis tool
Selected work
Workforce scheduler for crews with capacity and location constraints. Excel roster in, clustered assignments out on a map. TypeScript, React, Express, Mapbox.
Pulled tables, figures, and layout from PDFs into spreadsheets. Python, plus whatever else the file required.
Turned inspection GPS traces and suburb lists into journey and volume maps, with place names resolved against a local gazetteer so the same suburb name in two states stays apart. Python, Flask, GeoPandas, Mapbox.
What I build
Native iOS apps, shipped
Two apps live on the App Store, and a third with background location, a lock-screen Live Activity, CarPlay and in-app purchase on the way.
Taking what a specialist knows, like a national code of practice or a planning method, and turning it into steps anyone can work through to a result that fits them.