Featured work

Build. Scale. Teach.

Three case studies, each answering a different question, in the same steps: who hit the problem, how I framed it, what my role was, what changed after the first version, who validated it, and, where the run taught me something, what I would do differently.

Enterprise · MINDEF SAF

GRID

GRID, short for Good Receipt and Invoice Digitalisation, is a repository app for goods receipts and invoices from every unit across MINDEF SAF, not just fuel claims from vehicle operators. Whoever receives the goods photographs the receipt, an AI model reads it, and an RPA flow built by a partner team files the extracted data into the finance system.

Nobody skips the finance form on purpose. They skip it because the next task is already in front of them.

  1. 1
    The person. Personnel across MINDEF SAF's units receive goods and are meant to log the receipt into a finance form, so it lands in an auditable repository and the finance team knows what payment is owed.
    In practice, whoever received the goods is already on to the next task, so receipts go unlogged. That leaves a gap in the audit trail and a delay finance only discovers when they go looking for it.
  2. 2
    Framing. I read it less as a missing-form problem, since the finance form already existed, and more as a capture-and-handoff problem: the record needed to get created reliably despite people being busy, and in a shape a downstream automation could act on without anyone re-typing it.
    Receipts also arrive in whatever format the issuing company printed them in, so intake had to normalise that variation before the repository or the RPA flow could depend on it.
  3. 3
    My role. Lead developer.
    I designed and built the intake app (capture, AI-assisted extraction across varying receipt formats, and repository storage) on PowerApps and Vite, developed spec-first with Claude Code's Superpowers workflow. A team of five: a product owner, a data analyst, and two RPA developers who built the flow that reads my app's output and files it into the finance forms. Two months.
  4. 4
    Iteration. The obstacle I handled largely alone was the interface with the RPA team: I had to learn what UiPath needed from my app's output before I could shape it to trigger their flow reliably, rather than assume a format and find out later it didn't fit.
    Goods receipts also come from whichever company issued them, in whatever layout that company uses, so extraction had to hold up across formats I hadn't seen yet rather than one template hard-coded to a single issuer.
  5. 5
    Validation. In pilot now, ahead of the planned rollout across MINDEF SAF.

Role of AI

Human need
Personnel across MINDEF SAF who receive goods but never get the receipt logged, because the next task is already in front of them.
What the AI does in the product
Reads a photographed goods receipt or invoice, in whatever format the issuing company used, and extracts the fields the finance form and the RPA flow need, so the person who received the goods confirms a record instead of transcribing one.
What I did
Lead developer. Built the capture app, the AI-assisted extraction across receipt formats, and the repository the RPA flow reads from.

What exists now

Shipped
A capture app with AI-assisted extraction across varying receipt and invoice formats, one auditable repository for records submitted across MINDEF SAF, and an RPA hand-off that files the extracted data into the finance forms without manual re-entry.
Scaling · RAiD

MILES / MAVIS

Two paired systems for the RSAF's Air Specialist Vehicle fleet. MILES is the logbook, recording vehicle movement and usage. MAVIS is the maintenance system, planning preventive servicing, tracking corrective work on defective vehicles, and giving the people who own a fleet one view of its serviceability and its defect trends.

A process you were told about in one interview is a claim, not a fact. It stays a claim until someone else doing the same job has been asked the same question.

  1. 1
    The person. The people running and maintaining the Air Specialist Vehicle fleet.
    Operational and maintenance workflows were spread across manual steps with no single record of who was qualified for what, so the state of the fleet had to be assembled by asking around rather than looked up.
  2. 2
    Framing. The platform pulls those workflows into one place: structured automation over centralised data, with role management and qualification tracking as first-class parts of the model rather than fields bolted on later.
  3. 3
    My role. Full-stack developer.
    I was not the solution owner on this one: scope sat with the product owner, and I owned the build. I designed the role and qualification model, built the workflow automation and the reporting surface, and did the scalability planning for enterprise rollout.
  4. 4
    Iteration. Two things had to change.
    The first was the platform: the original Power Apps prototype assumed everyone using it was RSAF personnel with a defence mail account, and they weren't, so per-user licensing was never going to cover the people who sat outside it and the app was rebuilt as a full-stack application that owns its own accounts. The second was the requirements themselves. The process captured in the interviews turned out not to be the process on the ground, because the people we spoke to did not know the full detail of how the work actually ran. When the app shipped, ground users found it cut across their workflow rather than fitting it, and they said so.
  5. 5
    Validation. The product owner and the stakeholder groups who would be using the system signed it off.
    Rather than treat our own write-up as settled, we took the pain points back to those groups and asked whether we had read them correctly from the ground up.
  6. 6
    What I'd do differently. Interview more than one person per role, and do it before any build work starts.
    One representative gives you their version of the process, which is not always the version being worked to on the ground. I would get several people in the same role into the same discussion, have them talk through their own pain points, and have them cross-check each other's account, because two people in the same job often see the problem differently and the gap between them is usually where the real issue is.

Role of AI

Human need
The people running and maintaining the fleet, who could only assemble its state by asking around.
What the AI does in the product
Nothing. The product has no AI in it.
What I did
Full-stack developer. Built the role and qualification model, the workflow automation, and the reporting surface.

What exists now

Shipped
A role management model, per-person qualification records, automated workflow steps replacing manual hand-offs, and reporting that reads from the same store the work is recorded in.
Enablement · RSAF · NYP

Vibe Coding Masterclass

A large-scale masterclass on vibe-coding (directing AI coding agents from a spec to a working app, and reviewing everything they produce), run for a mixed cohort of citizen developers and engineers, joined by staff from Nanyang Polytechnic (NYP).

The fastest way to find out whether you actually understand a practice is to stand in front of a room and teach it.

  1. 1
    The person. RSAF personnel and staff from Nanyang Polytechnic, most of them not from a technical background.
    The vocabulary was the barrier before the tooling was: people who could not follow the lingo lost interest before they got far enough to find out whether the practice was any use to them.
  2. 2
    Framing. I decided the gap was confidence and vocabulary rather than tooling.
    The software was not hard to get hold of, but the language around it made people assume the practice was not for them. The syllabus covered prompt-driven development, rapid prototyping and Power Apps deployment.
  3. 3
    My role. Lead instructor.
    I organised and led it. I wrote the training materials and the hands-on labs, sequenced the syllabus, and taught the sessions. Run on 6 August for a cohort of 170.
  4. 4
    Iteration. Three things changed between the first run and the ones after it.
    I had not said clearly enough what attendees needed to bring or install, so later runs stated the device and the software up front. The room was too shy to ask out loud, so I added an anonymous question channel. And nobody left the first run with a record of it, so later runs ended with a written summary. The obstacle I handled alone was holding a non-technical room's attention. I broke each demonstration into its smallest parts and used the AI chat panel in the IDE to show what the agent was doing.
  5. 5
    Validation. Staff from Nanyang Polytechnic attended alongside RSAF personnel.
    Internally the masterclass was recognised in PPCoE updates, and attendance held across the cohort.
  6. 6
    What I'd do differently. I would drop the live terminal walkthrough.
    Pasting a documentation URL into the AI chat and letting the room watch it work keeps everyone on one idea, instead of tracking what I had just clicked.

Role of AI

Human need
A cohort of 170, most without a technical background, losing interest at the vocabulary before reaching the tooling.
What the AI does in the product
The training does not ship a product with AI in it. AI is the subject it teaches.
What I did
Lead instructor. Wrote the materials and labs, sequenced the syllabus, taught the sessions.

What exists now

Shipped
A written syllabus and a set of hands-on labs that outlast the event, and a cohort who have each built something with AI-assisted tooling rather than read about it.

Security & governance

I also review what I advocate.

Pushing an organisation towards AI-assisted development and then signing off on its security are usually two different people. On the Flight Simulator Scheduling System and the Project Management Tracker they were the same one, because I acted as Security Reviewer on both. Both are in the project log.

  • Security code review and repository review before deployment
  • Vulnerability scanning and assessment
  • Deployment validation and governance compliance checks