About
I'm a senior full-stack developer at Access Group Australia. I look after 40+ production WordPress sites across 40 brands, lead a team of six developers, and built the group's headless CMS on Builder.io and Next.js.
I've been building websites for 15+ years, mostly for Australian and US companies: WordPress and WooCommerce sites, Shopify themes, Laravel apps and, since 2019, React and Next.js front ends. After that many sites, I know where old ones keep their forms, redirects and SEO history.
Outside work I build small apps I actually use, like a budget tracker and a job board scraper, and run them on my own server. That's where I try new parts of my stack before they reach production.
git log --graph
Experience
Newest first. The ochre branch is my WordPress work; the pine branch is where it's heading.
HEAD → nextJun 2025 – Now
Senior Full Stack Developer
Access Group Australia
Look after 40+ production WordPress sites across 40 brands and lead a team of six developers. Built a headless CMS on Builder.io and Next.js, plus internal React apps for lead and UTM tracking.
- Next.js
- Builder.io
- WordPress
- PostgreSQL
wordpressFeb – Jun 2025
Senior Full Stack / WordPress Developer
Hybrid Anchor
Built WordPress sites from Figma designs through to launch, including a shop and membership site on WooCommerce, Stripe and MemberPress. Ran the SiteGround servers and assigned work to other developers.
- WordPress
- WooCommerce
- MemberPress
- SiteGround
Mar 2022 – Nov 2024
Senior Full Stack Developer
Interactive Education Concept, Inc.
Built a web app and the APIs that connect it to Shopify and WordPress, using TypeScript, PostgreSQL and Prisma. Also wrote custom WordPress plugins and Shopify themes, and ran DevOps on Azure and AWS.
- TypeScript
- Prisma
- Shopify
- Azure
tag: reactJul 2019 – Feb 2022
Senior WordPress / Frontend Developer
MyImprov · US client via Emapta
Built React and Next.js front ends and the APIs behind a custom web app and mobile app, alongside WordPress templates in Elementor, Divi and Gutenberg, and Shopify themes.
- React
- Next.js
- WordPress
- Shopify
Sep 2018 – May 2019
Senior Full Stack Developer
Outdoor Urban Transit / Follow · Australian company
Built WordPress plugins and add-ons and Laravel web apps, and managed the Linux servers on AWS and DigitalOcean.
- WordPress
- Laravel
- AWS
- DigitalOcean
2007 – 2018
PHP and WordPress Developer
BoomLabs, Creagaia, E-trader, Symmetri Designs and earlier
HTML5 layouts and WordPress plugins for Australian clients at BoomLabs; CodeIgniter and Laravel systems for a hospital, classified ads and ticketing at Creagaia; a Magento jewelry customizer built on PHP Imagick and GD at E-trader; and custom WordPress themes and Zen Cart stores before that.
- PHP
- Laravel
- Magento
- WordPress
React, Next.js and TypeScript workWordPress and PHP workMerge in progress
Highlights
Things I've shipped or led, at work.
Leadership
Leading a team of six developers
Plan and assign the development work across 40+ production sites for 40 brands.
Access Group Australia
Platform
Headless CMS on Builder.io and Next.js
Built the group's headless CMS with Builder.io, Next.js, TypeScript and Tailwind CSS, plus internal React apps for lead and UTM tracking.
Access Group Australia
Migration
Redirect architecture for the WordPress to Next.js move
Designed how old URLs reach new pages as sites move off WordPress: Cloudflare Bulk Redirects at the edge for legacy paths, and Next.js redirects for patterns that follow the new routes.
Access Group Australia
Data
Warehouse-first plan for identity resolution
Recommended making BigQuery the place where people are matched across form submissions, to close the gap between master IDs and per-submission IDs coming from Firebase.
Access Group Australia
Product
KPI app modeled on the ISO Performance Framework 2026
Built a working web app prototype that replicates the company's performance framework.
Access Group Australia
Performance
Faster WordPress sites with NitroPack
Ran performance optimization for accessexpress.com.au and accessindigenous.com.au.
Access Group Australia
Integration
Form leads straight into Iterable
Connected the Access Hire off-hire form to the Iterable API through Contact Form 7 PHP hooks, so submissions no longer depend on SMTP email delivery.
Access Group Australia
SEO
SEO baseline for Access Indigenous
Set up the baseline in SEMrush so rankings can be compared before and after site changes.
Access Group Australia
Projects
Client sites I've built, then the side projects I use myself to test new parts of my stack.
Client sites
Access Hire Australia
RunningHire and sales site for Access Hire's Australia-wide equipment fleet, rebuilt on Next.js and Builder.io.
- Next.js
- Builder.io
- TypeScript
- Vercel
View project →Live site ↗
State-approved defensive driving courses, run across WordPress, a Laravel LMS and Shopify.
- WordPress
- Laravel
- Shopify
- LMS
View project →Live site ↗
The website for the Merthyr Village shopping centre: a store directory, news and events.
- WordPress
- WooCommerce
- Yoast SEO
- GTM
View project →Live site ↗
A guide to dining, shopping and culture in Sunnybank, built on WordPress.
- WordPress
- PHP
- Cloudflare
- Yoast SEO
View project →Live site ↗
Booking and payment for a mobile car valeting service in Glasgow.
- WordPress
- WooCommerce
- PayPal
- AngularJS
View project →Live site ↗
Fresh Fruit and Veg Shop
RunningWeekly fruit and veg boxes for homes and offices in Glasgow, sold as WooCommerce subscriptions.
- WordPress
- WooCommerce
- Subscriptions
- Elementor
View project →Live site ↗
Side projects
Budget Tracker
Daily useA personal budget app I use every day to log spending across accounts and cards.
- Next.js
- TypeScript
- Prisma
- PostgreSQL
View project →Source on GitHub ↗Last push 1 October 2026
PH Job Board Scraper
In progressCollects job listings from Philippine job boards into one database.
- Next.js
- Prisma
- PostgreSQL
- Scraping
View project →
Self-hosted app platform
RunningThe server my side projects run on.
- Coolify
- Docker
- PostgreSQL
- Ubuntu
View project →
More
- CV TailorTailors my CV to a specific job listing.Next.js
- PR review loopRuns Claude Code and Codex reviews on pull requests, with findings graded P1 to P3.GitHub Actions
- Lesson TrackerA small tracker app built to practice my Next.js and TypeScript stack.Next.js
- Recognition cardA React component for employee recognition cards at work.React
Stack
What I build with, grouped by how I use it.
Daily
In production at work and in my own apps.
- Next.js 15/16App Router
- React
- TypeScriptstrict
- Tailwind CSS v4
- shadcn/ui
- Prisma
- PostgreSQL
App plumbing
The libraries my Next.js apps share.
- Better Auth
- TanStack Query v5
- Zustand
- Zod
- Biome
- pnpm
CMS and e-commerce
15+ years of client sites, and the headless setup they're moving to.
- WordPressthemes, plugins
- WooCommerce
- ShopifyLiquid
- Builder.ioheadless
- Elementor
- Divi
- Gutenberg
- MemberPress
- Stripe
Backend
PHP and Node work alongside the Next.js apps.
- PHP
- Laravel
- CodeIgniter
- Node.js
- MySQL
- REST APIs
Infrastructure and data
Where things run and where the data lives.
- Vercel
- Coolify
- Docker
- CloudflareRedirects, R2
- AWS
- Azure
- DigitalOcean
- SiteGround
- LinuxBash over SSH
- Firebase
- BigQuery
- GitHub Actions
Workflow
How I plan, write and check code.
- Claude Code
- Cursor
- MCPFigma, Playwright, Atlassian
- GitGitHub, Bitbucket
- Jira
- ClickUp
- Figma
- SEMrush
- NitroPack
Exploring
Learning now, not in production yet.
- React Native + Expo
- Swift / SwiftUI
This site: Next.js and PostgreSQL, with Markdown posts written in its own admin.
Writing
Notes from migrations, side projects and my AI coding setup.
- Redirect maps for a WordPress to Next.js migration3 min readMigration
- Sending Contact Form 7 leads to Iterable without SMTPDraftWordPressPHP
- I built an accounts feature for my budget app, then simplified itDraftProductPrisma
- Self-hosting Next.js and Postgres on a VPS with CoolifyDraftInfra
- My Claude Code setup: CLAUDE.md, subagents and review loopsDraftAI workflow
Contact
Working on a WordPress, Shopify or Next.js project? I'd like to hear about it.
Email is the best way to reach me. I'm on Manila time, UTC+8, which is the same clock as Perth.











