PRODUCT ENGINEER · MOBILE, FULL STACK & AI · SYDNEY
I build and operate products, end to end.
I've spent five years shipping production software at Suncorp. I also built and launched my own app, including the mobile client, backend, integrations and AI-assisted pipeline behind it.
Pub Thursdays
● LIVE ON THE APP STORE · APR 2026Pub Thursdays started because my friends and I needed a better way to run our weekly pub night. I built the app we wanted, then took ownership of everything behind it: the SwiftUI client, Supabase backend, venue data, reminders and a pipeline that checks 500+ Sydney venue websites for current deals. Anything uncertain comes to me for review before it goes live.
- 1223
- APPROVED DEALS
- 278
- PUBS WITH LIVE DEALS
- 655
- PIPELINE RUNS · 30 FAILURES
- 0.99
- AVERAGE EXTRACTION CONFIDENCE · 0–1
● PRODUCTION DATA · UPDATED 5 SEPT 2026
DEMO
A quick look at how it works.
I walk through the app, then show the pipeline that finds, checks and publishes pub deals.
HOW DEALS GET INTO THE APP
The pipeline does the repetitive work. I keep the final say.
01 · FIND
Start with the pub
The pipeline checks each pub's own website and menu PDFs for likely deals.
02 · STRUCTURE
Use AI where it helps
Rules narrow the page down, then Gemini turns the useful bits into structured deal data.
03 · REVIEW
Only publish what holds up
Anything below 85% confidence comes to me. Only approved deals go live, with the source attached.
Behind that, results are cached for 30 days, every published deal keeps its source and every pipeline run is logged.
SwiftUI · Supabase · Deno/TS · Gemini API
OPEN IN THE APP STORE →Bookkeeper
● WEB APP · IN DEVELOPMENTBookkeeper is a work in progress for solo operators who want to know what needs attention without learning a full accounting suite. The product stays simple. The work behind it does not: Xero sync, customer-data isolation, coordinated token refresh and background jobs that can recover when an integration fails.
CUSTOMER PROBLEM
Show what needs attention
Connect the business, surface what matters and make the next action clear. That's the first problem I'm solving.
XERO INTEGRATION
A proper Xero connection
The Xero integration uses OAuth 2.0 with PKCE, encrypted tokens and coordinated refreshes. I've tested the full flow against Xero's API.
RELIABILITY
Failures should be recoverable
Row-level security separates customer data. Locks prevent token-refresh races, while background jobs keep slow or unreliable integration work out of the request path.
Next.js · TypeScript · Supabase/Postgres · Xero OAuth 2.0 · Inngest · Vercel
Suncorp
SOFTWARE ENGINEER · 5 YEARS- −25%
I helped rebuild Suncorp's iOS login during the ForgeRock migration. Login-related calls to the contact centre fell 25% after release.
- LEAD
I led the mobile frontend for the Duck Creek insurance migration, setting the iOS approach and aligning shared patterns with Android.
- −50%
I shipped self-service features that helped cut contact-centre call rates by more than 50% over five years.
Understand the problem, then stay until it works.
I like working close to the problem and the people using the product. I ask questions early, make the trade-offs clear and stay involved through the build, release and whatever turns up in production.
- 01 / ASK
Ask before I build
I start with what someone is actually trying to achieve, what's getting in the way and what a good result looks like.
- 02 / PLAN
Make the trade-offs clear
I break the problem into work people can agree on, explain the choices plainly and leave a path I can build and others can follow.
- 03 / SHIP
Stay through release
I stay involved through integrations, edge cases, rollout, App Store review and production support.
The tools I use to ship.
Swift and iOS are where I have the deepest production experience. I also build with TypeScript, Next.js, Postgres and Python, and use AI tools daily when they help me move faster. The useful part is knowing what to delegate, what to verify and what still needs a human decision.
- PRODUCT ENGINEERING
- Swift 6 · SwiftUI · UIKit · TypeScript · Next.js · React · Python · SQL · Tailwind
- BACKEND & ASYNC WORK
- Supabase/Postgres · Auth · RLS · Realtime · Storage · Edge Functions · Deno · Inngest · REST APIs · OAuth 2.0 / PKCE · Vercel
- AI-ASSISTED SYSTEMS
- Gemini API · structured extraction · deterministic pre-filtering · confidence gating · provenance · human review · production safeguards
- DELIVERY & TOOLS
- Claude Code · OpenAI Codex · GitHub Copilot · Git · LaunchDarkly · Jenkins · Firebase · Figma · App Store Connect
My defaults: understand the workflow, keep secrets server-side, make failures visible, put limits around cost and keep a human decision where confidence is low.