Available for new opportunities

I build the systems
AI products stand on.

I’m a backend engineer: I ship idempotent ingestion pipelines for messy real-world input, multi-tenant APIs where isolation is enforced at the query layer, and model integrations that fail safely instead of silently.

01 / SELECTED WORK

Featured projects

Multi-tenant SaaS
P-01 / minglehub

MingleHub

A multi-tenant SaaS platform for bars and venues: an NFC tap opens a live game session on every phone at the table. The venue is derived from the auth token, never the request, so cross-tenant reads are impossible by construction. Game state is server-authoritative, billing is metered and idempotent on Stripe, and 459 tests plus a CI guard keep it that way.

FastAPI Neon Stripe Clerk Supabase React
Privacy-first Data Pipeline
P-02 / financetracker

FinanceTracker

A self-hosted ingestion pipeline that turns CommBank and Westpac CSV exports into categorised spending. Every row is fingerprinted, so re-uploading a statement is a no-op. Transfers between your own accounts are matched and netted out, and a fail-closed sanitiser guarantees raw bank data never leaves the machine. 1,192 tests across the parsers, the matcher and the privacy boundary.

FastAPI SQLite OpenRouter Tailscale Vite PWA
HealthTech
P-03 / nutriscan

NutriScan

Photograph a nutrition label and its macros land as validated rows in an 11-table Postgres schema. Per-user isolation is enforced by row-level security rather than application code, ES256 JWTs are verified server-side via JWKS, and a Gemini-to-fallback model chain with timeouts keeps the endpoint up when a provider degrades. Every uploaded image is sniffed, decoded under a pixel cap and re-encoded before it reaches storage or the model, and the model's answer is schema-checked before it reaches the log. Abuse is blocked at a middleware rather than merely alerted, a hijacked session on a delete spree is frozen on two layers, and trigger-fed recycle-bin rows make every deletion recoverable for 30 days.

FastAPI Neon Gemini Groq React
Developer Tooling / MCP
P-04 / linkedin-formatter

LinkedIn Formatter

One formatting core shipped as three published artifacts: a VS Code extension, a zero-dependency CLI on npm, and an MCP server that lets AI agents apply LinkedIn's Unicode styling over stdio with exact code points. The preview card is the editor: type into the rendered post and every keystroke lands in the file already styled.

TypeScript MCP esbuild npm VS Code API
02 / TOOLKIT

Skills & stack

The languages, frameworks, and infrastructure I reach for.

01

Languages

  • Python
  • SQL
  • TypeScript
  • JavaScript
02

Backend & APIs

  • FastAPI
  • Node.js / Express
  • REST design, rate limiting, async job queues
  • pytest (1,650+ tests shipped)
03

Data & Storage

  • Neon Postgres (row-level security)
  • SQLite (WAL)
  • Snowflake
  • AWS S3
04

Infra & DevOps

  • Docker / Compose
  • nginx
  • GitHub Actions CI
  • Vercel / Render
05

Auth & Security

  • JWT / JWKS verification
  • OAuth 2.0
  • Cognito / Supabase / Clerk
  • CORS, CSP & security headers
06

AI Integration

  • Structured extraction (schema-constrained output)
  • Multi-provider routing (OpenRouter, Gemini, Groq)
  • Fallback chains & timeouts
  • Sentence-Transformers
03 / CONTACT

Let’s build something that holds up.

Currently open to backend and platform engineering roles and internships in Melbourne. Have an AI product that needs a real backend behind it? Drop me a line.

Please enter your name.
Enter a valid email address.
Please include a message.
Message sent! I'll get back to you soon.