AI Software EngineerSydney · Melbourne · Adelaide

I build systems that know when to say I don't know.

Machine learning and LLM systems, taken all the way into production. Every dot here is a sentence my agent can answer from. Move through it, or ask it something.

Work

What I've built

Systems that made it into real use, and the problem each one had to solve.

70+
Projects worked on, solo and in teams
14
AI and machine learning systems built
2+
Years shipping AI into production

Delivered for Agri-tech · Government departments · National industry associations · Large employers · Education · Media and events

LLM systems

Retrieval, prompt design, model routing and evaluation, including real-time voice and avatar agents running against a custom model.

  • Claude
  • Bedrock
  • RAG
  • pgvector
  • Whisper
  • ElevenLabs

Machine learning

Computer vision models trained, evaluated and deployed to run on the device rather than in a data centre.

  • PyTorch
  • YOLO
  • TFLite
  • ONNX

Data engineering

Pipelines that take messy event data and turn it into something you can actually query and trust.

  • Python
  • PostgreSQL
  • MongoDB
  • pgvector
  • Pandas

Getting it shipped

The APIs, CI pipelines, cloud infrastructure and interfaces that turn a model into something people can use.

  • FastAPI
  • Docker
  • CI/CD
  • AWS
  • Azure
  • GCP
  • TypeScript
What that work breaks down into
Computer vision and OCRReading text and spotting objects in photos, in real products
Machine learning, end to endTraining, evaluating and shipping models, not just notebooks
On-device and edge AIModels that run on a phone or a small box with no internet
RetrievalFinding the right passage before the model answers
LLM applicationsAgent orchestration, tool use, streaming and choosing the right model per question
Multimodal systemsReading images and text together in one system
Speech and audioSpeech to text and text to speech inside live products
Privacy and AI securityKeeping personal data out of prompts, logs and third-party models
Cost engineeringMaking AI cheap enough to leave switched on
Cloud architectureAWS, from the deploy pipeline through to the monthly bill
Analytics and measurementEvent pipelines, and making the numbers trustworthy
Media and signal pipelinesVideo, audio and sensor data at volume

AI and machine learning 06 featured · 08 in all

Fig. 01 · One question, every layer

01 / 06 · LLM systems

Flagship · in production

A talking avatar that answers from a company's own documents

A conversational avatar on a kiosk and on the web, backed by Claude, with hybrid retrieval over the client's own material and speech going both ways. It runs in two modes, and the difference is who does the work: in full mode the vendor handles the speech recognition, the model and the voice. In lite mode it renders video only, at half the per-minute rate, and everything else is ours. The kiosk runs on lite.

The retrieval is genuinely hybrid: a dense vector search over pgvector alongside Postgres full-text ranking, fused so an exact procedure name and a vaguely worded question both land. Source links travel with each passage, so an answer cites something real.

  • Claude
  • Bedrock
  • pgvector
  • LiveAvatar
  • Whisper
  • ElevenLabs
  • Polly
  • Rekognition
  • FastAPI
Decisions worth showing 8
  • The model answers from the documents, except on safetyA document-authority rule with a deliberate carve-out, so it never invents policy but never withholds a safety answer either
  • An in-process vector cacheHolds a persona's embeddings in memory to delete a trans-Pacific round trip on every question
  • Halving the vendor bill meant building what it stopped doingThe cheaper mode was not a switch to flip. It needed a whole speech stack on our side: the visitor's own phone as the microphone, streaming speech to text, and our own voice. Cheaper is a trade, not a discount
  • A visual glitch diagnosed frame by frameThe avatar appeared to cut to a different shot mid-sentence. Scene detection over a screen recording found exactly three single-frame jumps, all lining up with pose commands, which showed the renderer hard-cuts on a pose change rather than blending. Two of the three were ours to remove
  • It answers in the language you ask inSpeech in and out across languages, which is the point on a floor where not everyone reads English
  • Referential query rewritingBecause "say that again in Hindi" retrieved on its own five words, and a helmet question got answered with the nine signs of burnout
  • Found nothing is not the same as could not runA three-state fallback, so only a genuine failure ever dumps the whole corpus at someone
  • Authorisation in the API, never the promptShort-lived single-audience tokens for tool calls, on the assumption a model will eventually be talked into trying something it was not granted
Fig. 02 · Not sure, so it asks for a closer photo

02 / 06 · Machine learning

No signal, so it runs on the phone

Diagnosis from a photograph, offline

Vision models that identify disease from a field photo and run on the phone itself, because the people using it have no signal. Built the dataset and annotation pipeline behind it, then the training, evaluation and on-device export.

  • PyTorch
  • YOLO
  • TFLite
  • ONNX
  • CoreML
Fig. 03 · Two passes must agree

03 / 06 · Applied vision

Reports what it could not read

Reading documents, and admitting the gaps

Extracts structured fields from a photographed document across four scripts and checks them against thirteen legal requirements. Two passes must agree before a field is confirmed, so it reports what it could not read instead of guessing.

  • Apple Vision
  • ML Kit
  • C#
  • Swift
Fig. 04 · One persistent session, every frame

04 / 06 · Edge AI

The obvious way raced itself

Inference on an accelerator at the edge

A camera and accelerator running detection continuously at the edge rather than round-tripping to a data centre, built as a persistent streaming service after the obvious approach turned out to be racing itself.

  • Python
  • Hailo
  • ONNX
  • Linux
Fig. 05 · Escalate only when the question needs it

05 / 06 · Cost engineering

The cheapest model that can answer

Making the model bill predictable

A router that picks the cheapest model capable of answering and escalates only when the question needs it, with every decision logged. Alongside it, spend caps that pause the expensive call while keeping search working.

  • Bedrock
  • DynamoDB
  • TypeScript
Fig. 06 · Captioned and tagged as it lands

06 / 06 · AI platform

Search by what is in the file

A media library that understands what is in it

A platform for images, video, audio and 3D models that captions, tags, groups faces and makes everything searchable by what is actually in the file rather than by who remembers the filename.

  • FastAPI
  • Bedrock
  • Aurora
  • S3
  • CDK
07An assistant that shows its sourcesRetrieval

Ask a question in text, by voice or with a photo and get an answer grounded in an uploaded knowledge base, with real links back to where it came from rather than invented ones.

  • pgvector
  • HNSW
  • FastAPI
  • Whisper
  • Claude
08An illustrated character that talks backAvatar systems

The same conversation delivered through a drawn character rather than a filmed one. It starts from illustrated stills of a person, then the parts that have to move are rigged separately, the eyes and the mouth, so they can be driven by the conversation in the browser. No 3D head, no render farm, and a client gets a character in their own house style.

  • TypeScript
  • React
  • 2D rigging
  • Illustrated stills

Platform, data and engineering 06 systems

Fig. 07 · One tablet, the whole brain

09 · Real time

No internet on the bus

A fleet of headsets in sync with no internet

A synchronised film running across a fleet of VR headsets on a moving bus, with no laptop, no server and usually no signal. One tablet is the whole brain, with native networking plugins written twice.

  • Swift
  • Java
  • WebSocket
  • Unity
10Turning messy events into answersData engineering

Millions of behavioural events arriving from browsers, mobile apps and headsets. The pipeline deduplicates them, rebuilds the sessions behind them and makes the result queryable, feeding dashboards and written summaries.

  • Python
  • MongoDB
  • AWS Lambda
  • TypeScript
11Estimating groundwater depth nationallyData science

A national estimate of depth to groundwater at any location, built from 35,875 monitoring bores with readings spanning two decades. Every answer ships with a confidence value derived from how many bores are nearby and how far away they are, so the estimate carries its own reliability rather than pretending to be a measurement.

  • Python
  • Pandas
  • Geospatial
  • CSV
12The infrastructure under all of itCloud architecture

The cloud estate behind these platforms: 38 serverless functions, 43 storage buckets and 19 edge distributions, defined as code across eight stacks in two regions. I ran the audit that mapped it, attributed the cost project by project, and cut the bill where the numbers justified it.

The delivery path underneath: CI on GitLab and GitHub Actions, Docker and Compose so local and production run the same image, Lambda shipped as a zip or a container image when it outgrows the size limit, and front ends pushed as an S3 sync with a CloudFront invalidation.

  • AWS
  • CDK
  • Docker
  • GitLab CI
  • Lambda
  • CloudFront
  • Aurora
13A document intake portal in three daysServerless

Upload a document, get an AI summary, topics and tag suggestions, plus automatic detection of which existing document this one probably replaces. Scaffold to a passing end-to-end run in three days.

  • DynamoDB
  • S3
  • SES
  • Bedrock
  • Next.js
14A Mac app for 360 video metadataTools

A native macOS app that stamps spherical metadata onto video without re-encoding, built on a Google tool that had been unmaintained since 2018 and needed porting forward first.

  • Swift
  • SwiftUI
  • Python

Also involved in

  • Annotation and labellingBuilt an in-house annotation tool for the vision work, and used Roboflow alongside it. Supporting infrastructure rather than a project in its own right
  • Real-time and device workSynchronised video across a fleet of headsets with no network, native plugins in Swift and Java, headless build pipelines

Education

Where the theory came from

The work above came first on this page for a reason. The study is what made it possible to reason about the models rather than only call them.

2023

Master of Data Science

The University of Adelaide

Statistics, machine learning and the maths under the models. Where the training, evaluation and error analysis in the work above comes from.

2021

Bachelor of Information Technology, Cloud Computing

Deakin University

Networking, distributed systems and cloud architecture. Where the other half comes from: the APIs, the deploy pipelines and the bill at the end of the month.

Patent

Smart Voice Assisted Learning Device for Visually Impaired Students

Indian patent application 202411052784 A  ·  filed 10 July 2024  ·  published 26 July 2024  ·  one of seven named inventors

A voice-controlled learning device that pairs speech recognition and on-device AI with a tactile Braille display, so a student can work through material by voice and touch rather than by sight. Nine claims. The same ground as the speech work above, which is why it is here rather than filed away. It is a published application, not a granted patent.

Award

  • Adelaide Graduate AwardThe University of Adelaide, 2023

Certifications

  • Cisco CCNA Routing and SwitchingFour-course Cisco Networking Academy curriculum: Introduction to Networks  ·  Routing and Switching Essentials  ·  Scaling Networks  ·  Connecting Networks
  • Career Essentials in Data AnalysisMicrosoft and LinkedIn

Community

  • Mentor and student ambassadorStudy Adelaide, helping students move from study into technology work here

My CV

Ask and I will send it over

Send me a quick note and my CV will reach you shortly.

Or get in touchEmail me