A developer who asks why before asking how and fights for the user.

UX Engineer

AccessibilityFigmaReactCSS

Frontend development with deep user experience advocacy

Introduction

I'm not a UX designer by title, but I think like one. Every ticket I pick up, I'm asking: who's using this? What are they trying to do? What happens when it goes wrong? What did we forget?

This isn't theoretical — it comes from 15+ years of building things that real people use, watching what breaks, and learning that the spec is never the whole story. I've worked in agencies where speed matters and in product teams where getting the details right matters. Both taught me that the developer is often the last line of defence before something reaches the user, and I take that seriously.

I bring a perspective that sits between design and engineering. I can read a Figma file and implement it faithfully, but I'll also flag when a hover state is missing, when a loading state hasn't been considered, when the empty state is blank, or when the error message says "An error occurred" instead of something actually helpful.

Some people find this annoying. Most come to appreciate it.

Experience

  1. Contract

    Software Engineer

    Everest Engineering

    Built a reporting dashboard from a vibe-coded prototype and static designs that had significant UX gaps. Made gap-spotting part of the daily routine — flagging missing states, working through edge cases with designers, and fleshing out what the spec didn't cover.

  2. Role made redundant

    Frontend Developer

    Mira | Business Software

    Frontend development for a SaaS app built in Quasar, Vue JS and Laravel. Small, self-directed dev team that owned the full product lifecycle from user feedback through to shipping. Upskilled in Laravel and Figma on the job to contribute beyond the frontend. Created and developed a new feature from interpreting user feedback, creating wireframes, mocking up designs with component ui, developing and testing.

  3. Frontend Developer

    Clemenger BBDO

    Learned Vue on the job and shipped it to production. Built Vue.js applications for BMW and Myer, including a complete overhaul of the Fashions on the Field web app under a tight Melbourne Cup deadline. Dynamic HTML banner campaigns for BMW, NAB, TAC and Belong. Later became the sole Myer eDM developer, running the full pipeline from design to Salesforce deployment.

  4. Developer

    Isobar Australia

    Eight years spanning the full evolution of web development — from Flash and ActionScript through to HTML5 banners, eDMs, and frontend JavaScript. Built interactive mobile games for Smiggle, redeveloped The Smith Family's donation portal with a custom state-machine, and managed the Porter Davis website solo for over a year. Became DoubleClick Studio HTML5 certified.

Skills & Tools

  • UX Advocacy & Review
  • Interaction Design Implementation
  • Accessibility (WCAG AA/AAA)
  • Edge Case Identification
  • Responsive & Adaptive Design
  • Design System Contribution
  • Error State & Empty State Design
  • User Flow Analysis
  • Cross-browser / Cross-device QA
  • Figma Collaboration

How I work

I fill in what the spec leaves out.

At Splose, I was building a reporting dashboard — revenue, cancellations, practitioner utilisation — under a tight launch deadline. The starting point was a vibe-coded prototype and some static designs, neither of which had been thoroughly thought through from a UX perspective. What happens when there's no data yet? What does the loading state look like? What if a date range returns nothing? None of it was specced. Rather than building exactly what was in front of me and shipping gaps, I made it part of my daily routine to spot what was missing, sketch out solutions, run them past the designers, and build them in. It's slower in the short term. It's dramatically faster than fixing it after launch.

I build logic when the designs don't have any.

At Isobar, I was given a set of "interactive" designs for The Smith Family's donation portal — screens showing different states of a form, but with no clear logic connecting them. Actions led to dead ends, transitions were ambiguous, and the journey as a whole didn't hold together. Rather than sending it back for another round of revisions, I built a recursive state-machine under the hood: each user action triggered a lookup that could call functions, set states, activate other elements in sequence, and trigger sub-flows. It let me make the whole thing work as a coherent experience without needing the designs to tell me how. On the surface? Just a donation form. Underneath? Something I'm still proud of.

What people say about this work

Want someone who fights for the user?

I'm at my best when the spec has gaps and the edge cases haven't been thought through. If that sounds useful to your team — let's talk.