Portfolio Pieces

2026 CV & Portfolio website (yes, this one!)

The site you're on right now started as a simple portfolio build and became a case study in its own right. The brief I gave myself: build something that works as an online CV, a code sample, a list of references and a personality test — for four different roles — without feeling like four completely different sites.

The core UX decision was making role pages the primary entry point, not the home page. A recruiter clicking a link from a job application lands directly on the relevant role — frontend, marketing, UX, or vibes — with tailored experience descriptions, skills, and even a role-specific PDF. They never need to see the home page. But if they want the full picture, it's one click away.

Under the hood, all four roles (and the overall one) pull from a single shared data layer — one set of experiences, one set of content blocks — with role-aware variant resolution. Change a job description once, it updates everywhere. The whole thing runs on Next.js with server components by default, vanilla CSS with fluid typography and spacing (no Tailwind, no component libraries), 12 colour themes with AAA contrast, and PDF generation at build time via React-PDF.

It was built in large parts with Claude — not copy-pasting AI output, but using it as a design partner, architecture sounding board, copy editor and pair programmer — with the prompts saved to the repo for your perusal. The code is the deliverable, but the process is the interesting part.


Case Studies

Frontend Development

I see repetitive patterns and build systems instead.

At Splose, I was tasked with implementing new 2FA modal flows. The designs had multiple variations with repetitive elements and inconsistencies between them — building each one individually would have meant messy, redundant code and a maintenance headache for whoever came next. So instead of just building what was in front of me, I designed a reusable "FlowModal" engine that separated the data layer from the modal management from the individual steps. Future devs can now create new flows, edit existing ones, and run A/B tests without touching the underlying architecture. I wrote full documentation so the system would outlive my contract. It's a pattern I keep coming back to — I'd rather spend a bit more time building something properly than contribute to technical debt.

I tend to go beyond the brief when it makes sense.

At Honest Fox, I was rebuilding the agency website in Vue, Nuxt and Storyblok. The original plan was to hard-code most pages and only make the blog CMS-editable. But once I started mapping the design components to Storyblok's content model, I realised the extra effort to make everything editable was relatively small — and since the designs were already built on reusable components, it made sense to go the whole way. I built a full page-builder system: the team could create entirely new landing pages, rearrange layouts, experiment with CTA placement — not just edit blog posts. The scope grew organically as the team saw what was possible, and the end result was a site they could manage and evolve entirely on their own.

Digital Marketing

Redesigning how Australia Post briefed and built emails.

I was the sole developer on the Australia Post email program at Isobar for over two years — marketing, transactional, the lot. The process was painful: incomplete briefs from multiple client teams, small tweaks treated the same as full custom builds, and no shared language for what we were actually making. So I proposed a complete overhaul. I built modular email templates mapped to the most common layouts, each with unique IDs and documented content fields. Then I created brief documents that forced the client to fill in only the fields that matched those templates — no ambiguity. Finally, I set up tiered pricing so simple template work was quick and cheap, complex work was scoped properly, and anything outside the system was quoted as custom. It transformed the relationship. Briefs came in clean, turnaround dropped, and I could actually focus on building rather than deciphering what was being asked of me.

Building banners so flexible that Google made them a case study.

At The Royals, I built a master banner template for AustralianSuper that was genuinely content-agnostic — dynamic frame count, timing, images, transitions, fonts, urls — all controlled through a data feed. The client could roll out completely new campaigns without any developer involvement. It happened to coincide with Google launching their DV360 platform, and my implementation was included in their showcase for what the new system could do. A year later The Royals reached out to say the client was still running every campaign through my template, and was looking for minor branding updates to continue use of the template system.

Running the Myer email machine solo.

At Clemenger, I was the sole developer on a relentless stream of Myer eDMs — full end-to-end ownership from receiving designs through to Salesforce deployment, testing, subscriber lists, scheduling and reporting. The client sent incomplete briefs, changed direction constantly, and had different teams sending conflicting instructions. I became the last quality check in the chain, catching issues and pushing back up the line before writing a single line of code. It wasn't glamorous work, but it taught me that half of production at scale is process discipline, not technical skill.

UX Engineering

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.

Culture & Vibes

The Easter Bunny who leaked company secrets.

I was asked to organise an Easter egg hunt at Isobar. Naturally, I overengineered it. I used my eDM skills to build a fake internal email — proper HTML template, spoofed sender address, indistinguishable from the real thing — from "Easter J. Bunny," a recently fired employee who still had access to the email system. Throughout the day he sent emails that were actually clues to hidden egg locations. Management was slowly replacing the office plants with fake ones? Eggs buried in the planter soil. They didn't actually read the suggestion box? Chocolates stashed inside it. By the end of the day, the character had a change of heart and asked for his job back.

A fake travel agency, hidden codes, and office-wide assassination.

The office ran a Hunger Games elimination game — secret targets, innocuous weapons, stealth kills. I was knocked out on a technicality and given the job of distributing immunity idols however I saw fit. In two days I built "Panem Travel" — a fake travel agency with a real website and email account, filled with Hunger Games imagery and copy. Immunity clues were hidden in bolded letters spelling secret messages, images with steganographic data (and a decoder link buried in the copy), and auto-response emails triggered by the website's contact form. Multi-channel, fully interactive, built over a weekend.

Five clubs, a live auction, and eventually, the onboarding deck.

Over eight years at Isobar I started the Whisky Club (shared cabinet, membership fees, Friday tastings), Burger Club (group orders, a Tumblr review blog, a custom McDonald's menu-hack outing before "Create Your Taste" was a thing), Board Games Club (Friday meetups, a donated office game library), and Film Club — where the title was kept secret, I'd send cryptic clues in the lead-up, the first correct guess won a Blu-ray, and I'd write a personal introduction and bring themed food I'd made at home. All out of my own pocket. I also overhauled the annual charity art auction — replaced a broken online bidding system with a live auction that raised thousands more for charity. Eventually the CEO had official logos designed for each club, added them to the onboarding documentation, and used them to win industry culture awards. It all started with one person and a bottle of whisky.

Let's talk

I'm currently available and based in Melbourne. Whether you've got a specific role in mind or just want to chat — I'd love to hear from you.