Full stack and AI engineer in Melbourne, building web and mobile apps in TypeScript, React and React Native, and the LangGraph agents, RAG and voice AI inside them.
I turn ambiguous problems into shipped, working software.
I'm a full stack engineer building web and mobile apps in TypeScript, React, Next.js and React Native, backed by Node.js, Python, PostgreSQL and Google Cloud. I also build the AI that goes into them: LangGraph agents, RAG and voice AI.
Products built and shipped: 3 (Accustom · AI Recep · SessionPilot)
AI agent workflows orchestrated: 30+ (SessionPilot · n8n · LangChain)
Open to full-time roles: Now (Melbourne · Full working rights)
Off the clock: Drone engineering, Autonomous flight, Offshore sailing, Linux, Self-hosted infra.
Projects
AI Recep: A voice AI that answers, books, and quotes pest control calls.
Voice AI Agent · Dec 2025 – Feb 2026 · Completed · LangGraph, FastAPI, ElevenLabs, Claude, pgvector, React Flow, ServiceM8
When RF Pest Management’s phone rings, an AI agent picks up. It identifies the caller, books or reschedules a technician, quotes the job from the client’s price list and texts a confirmation. A live graph on screen shows which agent is handling the call. Designed for 50–200 calls a month and handed over to the client as a pilot-ready MVP.
Under the hood
Four LangGraph agents (triage/CRM, dispatch, quoting, post-call comms) hand off calls through schema-validated tool calls
ElevenLabs Scribe v2 Realtime transcribes the caller and Flash v2.5 speaks back, both over one WebSocket carrying audio and telemetry
Claude Sonnet 5 plans triage, dispatch and comms; Opus 5 handles quoting, grounded by a pgvector knowledge base of the client’s price list
React Flow renders the live agent graph during the call, driven by the backend’s event stream
PostgreSQL schema and migrations for calls, bookings and quotes; every ServiceM8 write is validated first
FastAPI backend in Docker on Google Cloud Run; an access code is exchanged for a signed token before the WebSocket opens
SessionPilot transcribes therapy sessions and drafts the clinical note from the transcript, so therapists don’t have to write notes up afterwards. It also phones clients between appointments to check in, and flags anything worrying to the therapist.
Under the hood
Two products on one data model: Scribe drafts the note, Calls runs the check-in phone calls
30+ configurable agent workflows orchestrated across n8n and LangChain, with the agent services in Docker on Cloud Run
PostgreSQL schema and migrations for app data, with pgvector RAG over each client’s history
LangGraph agents (LangChain + Gemini) plan each call and verify its outcome afterwards
The ElevenLabs voice agent calls server-side tools mid-call to log findings and escalate risk
Google Cloud Speech transcribes sessions; Twilio carrier status reconciles missing webhooks
React 19 and Vite front end; built with a collaborator in agile sprints, with PR reviews and end-to-end tests
A habit app where you stake money on your goals. You check in each day with a photo or a run. Finish the challenge and you keep your stake, plus a share of what the people who dropped out forfeited.
Under the hood
One React Native + Expo codebase ships as a responsive, installable PWA and a native Android build
Node.js/TypeScript backend on serverless Google Cloud Functions: webhooks, Firestore triggers and queued jobs handle scheduling, moderation, settlement and payouts
Stakes are held in USDC by a reentrancy-guarded escrow contract on Base; all timing logic lives in Cloud Scheduler
Privy embedded wallets, so users don’t manage a seed phrase; Meld handles the card-to-USDC on-ramp
Timezone-aware crons close each day from UTC−8 to UTC+14; the 12% fee split is computed server-side
GitHub Actions runs end-to-end tests and 1,277 unit, contract and integration tests on every pull request, against a local chain and the Firestore emulator
Architecture diagram: An interactive diagram of the whole platform: the three sites, the Firebase backend, the wallet and escrow on Base, and every outside service, with who calls what.
Park Find: Real-time parking availability on a map.
Mobile App · Sep 2025 · Completed · React Native, Expo, TypeScript, Google Places API
Park Find predicts which parking spaces are free and shows them on a map. Built with a team of AI and business systems students in Monash’s industry experience program.
Under the hood
React Native and Expo app written in strict TypeScript
Google Places data, custom routing and live parking sensor webhooks combine to predict free spaces on a map
Built in agile sprints with a team of AI and business systems students, testing each release
An institution issues a certificate, and anyone can check it is genuine by uploading the file or pasting its ID. Revoked certificates show as revoked.
The landing page, with a way in for admins, for issuers and for anyone verifying a certificate.The admin dashboard. Admins approve issuers, see every certificate an issuer has put out, and can revoke an issuer.Issuing a certificate. The PDF is pinned to IPFS and its hash goes on-chain on Sepolia through a MetaMask transaction. Duplicates are rejected, and an issuer can revoke what it has issued.Verifying a certificate, by its hash or by uploading the file. Here the first is valid and from an approved issuer, and the second has been revoked.
Under the hood
Solidity contracts on Ethereum Sepolia record hashes for issuance, verification and revocation
Documents are pinned to IPFS; only the hash is stored on-chain
React and Web3.js front end verifies by hash, or by re-hashing an uploaded file
Tailwind CSS interface for both the issuer and verifier flows
10" Autonomous FPV Drone: Autonomy-capable airframe with a 2 kg payload.
Hardware · Building · iNav, Raspberry Pi, Autonomous Flight, 2 kg Payload
A 10-inch drone that flies a waypoint route on its own, carrying up to 2 kg. It’s meant for jobs like moving items across a site or inspecting infrastructure.
The parts before assembly: carbon frame, four motors, ESC, flight controller and battery.The 10-inch frame with its motors mounted, next to a smaller quad, FPV goggles and the Raspberry Pi.
Under the hood
10-inch FPV airframe sized to carry a 2 kg payload
Raspberry Pi companion computer for onboard compute
Airframe & Payload
10-inch prop, built for autonomous logistics and inspection use cases
2 kg max payload capacity
Autonomy Stack
iNav flight controller for autonomous waypoint navigation
Raspberry Pi onboard companion computer for compute
Also exploring: Microsoft Azure AI Cloud Developer Associate (AI-200), in progress, exam targeted Nov 2026; CBG plant feasibility: 2.5 TPD, Napier grass feedstock.
Built a design system and three TypeScript frontends: a responsive Expo PWA (React Native Web), a React admin dashboard and a marketing site migrated from Vite to Next.js (both on Tailwind).
Wrote the Node.js/TypeScript backend on serverless Google Cloud Functions (webhooks, Firestore triggers, queued jobs), plus OAuth-bridged Privy and Firebase Auth, and per-user isolation in Firestore and Storage rules.
Reconciled Stripe, RevenueCat and PayPal into one idempotent payout ledger, plus a settlement engine on timezone-aware Cloud Scheduler jobs deciding refunds and forfeits, with payout locks so retries could not double pay.
Migrated stake custody from fiat processors to a reentrancy-guarded escrow smart contract on Base (Solidity, OpenZeppelin, Hardhat), deployed to Base Sepolia and mainnet.
Set up GitHub Actions CI across all three repos. On the main app, every pull request ran end-to-end tests and 1,277 unit, contract and integration tests (Jest, Hardhat) against a local chain and the Firestore emulator.
Owned production support. When a main-branch deploy silently undid live fixes, cherry-picked them back, then moved backend and frontend deploys into CI/CD so only tested, approved builds reached Google Cloud and Netlify.
Launched publicly, with real users staking their own money and making 36 of 39 due check-ins.
Delivered an AI voice receptionist that answers pest control calls, books jobs, quotes from the client’s price list and texts confirmations, designed for 50–200 calls a month and handed over as a pilot-ready MVP.
Developed the FastAPI backend in Docker on Google Cloud Run, with REST endpoints and a signed-token WebSocket for call audio and telemetry, running a four-agent LangGraph system (triage/CRM, dispatch, quoting, comms) with schema-validated tool calls.
Designed the PostgreSQL schema and migrations for calls, bookings and quotes, grounded quotes in a pgvector knowledge base of the client’s price list, and integrated ServiceM8 with validation before every write.
Shipped React Native/Expo field and admin apps with call monitoring and Stripe recurring billing, plus a live React Flow graph of which AI agent is handling the call; end-to-end tests covered the operator and field apps.
Scoped the MVP with the client and a business analyst; built it with a second developer in sprints with code review.