Skip to content
portfolio/skills
Sign in
TECHNICAL ARSENAL

Front End

Primarily React, server-rendered with React Router 7 and Remix across six current apps, with React Native via Expo on mobile and Tauri on the desktop - loaders and actions, progressively enhanced forms, and shareable URL-driven state.

Modern, scalable UI development with Tailwind CSS on shadcn, Radix and Base UI primitives; component libraries of 150+ parts on ANZCAP and Hammer, with Playwright, Cypress, Vitest and Testing Library where it counts.

Beyond pages: a visual page builder and rich-text editors in Stencil, D3 graph tooling in Hammer, WebGL games and shader-driven canvases, and real-time clients over WebSockets and WebRTC in Foundry.

Favour an Atomic Design approach to create consistent, reusable component systems that scale cleanly across web, mobile and desktop.

  • HTML - 90% - Semantic, accessible markup - used daily throughout my career.
  • CSS - 80% - Responsive layouts with flexbox, grid, and Tailwind CSS.
  • Javascript / Typescript - 90% - Primary language - mostly React and React Native.
  • Tailwind CSS - 90% - v3 and v4 on every current project; Stencil's page builder even compiles Tailwind in the browser.
  • Forms & validation - 85% - Zod with Conform and react-hook-form; a schema-driven form renderer and 23 form primitives for ANZCAP.
  • SEO & structured data - 80% - JSON-LD, Open Graph cards, sitemaps and llms.txt on this site and in Stencil, plus a 572-check website audit tool.
  • Data visualisation - 75% - D3 force graphs with lasso, minimap and PNG/SVG export in Hammer; Recharts, donut and radial progress charts.
  • Animation & motion - 75% - Framer Motion, CSS keyframes, and particle and shooting-star canvases across this site and Wreckr.
  • Editors & builders - 75% - Stencil's drag-and-drop page builder on an iframe canvas, a React Flow condition editor, TipTap, Quill and Excalidraw.
  • WebGL & shaders - 70% - Three.js and OGL with hand-written GLSL/WGSL - a suite of browser games, the solar system and galaxy canvases. Games and ambience rather than art.
  • Real-time UI - 70% - graphql-ws subscriptions with reconnect and backoff in Hammer, typed WebSocket clients, and WebRTC calls and screen sharing in Foundry.

Back End

Since 2024 the centre of gravity is Rust: a graph database platform with its own query engine, storage engine and cluster layer, plus network services - a security proxy and a team chat server - shipped as versioned binaries with installers.

Before and alongside that, TypeScript on AWS: Lambda behind API Gateway defined with CDK, DynamoDB as the durable store with streams projecting into Neo4j for traversal, Cognito, SES, EventBridge, S3, CloudFront and Route 53.

Correctness taken seriously where it matters most - 3,000+ tests on Anvil including a Cypher conformance suite, fuzzing, property tests and simulated crash recovery; CI on every service with clippy warnings as errors.

Two decades of PHP before that, from Zend at Deakin University to Laravel and platform work at Localised and Vudoo, on MySQL, PostgreSQL and Oracle.

  • PHP - 90% - Primary language for almost 20 years - Zend and Laravel at Deakin, Localised and Vudoo.
  • NodeJS / TypeScript - 85% - Server side of every React Router and Remix app, ~150 Lambda handlers on ANZCAP, WebSocket game servers, and the tooling in this repository.
  • Python - 80% - Scripting, automation, and data processing tasks - and one of Anvil's plugin runtimes.
  • Rust - 85% - Anvil DB (160,000+ lines across 13 crates), the Aegis proxy and honeypots, and Foundry's chat server and WebRTC SFU.
  • Linux - 90% - Using Linux since the 90's - Solaris and Linux administration first, systemd units and install scripts for every Rust service since.
  • Graph databases & Cypher - 90% - Wrote a Cypher engine end to end for Anvil; Neo4j in production at Threeple, Localised, Bond and DTV, with DynamoDB streams projected into it.
  • Database internals - 85% - MVCC with version chains, write-ahead logging, ARIES recovery, B+ tree indexes, page cache, Raft replication and sharding - all built for Anvil and covered by 3,000+ tests.
  • REST & GraphQL APIs - 85% - Anvil's HTTP API with OpenAPI docs and an auto-generated GraphQL schema with subscriptions; 120+ routes on ANZCAP's REST API; AppSync before that.
  • Serverless (AWS Lambda) - 85% - Lambda behind API Gateway on ANZCAP, DTV, Bond and Threeple - CDK-defined, stream-triggered, with custom authorizers.
  • Auth & security - 85% - Argon2id, RS256 JWTs with JWKS, row-level security, OTP and OAuth2 flows, constant-time token checks, and SSH/DNS honeypots feeding nftables bans.
  • Real-time & networking - 80% - WebSocket servers, a pure-Rust WebRTC SFU speaking WHIP/WHEP, an axum forward proxy with TLS hot-reload, and hand-written SSH and DNS protocol handlers.
  • Event sourcing & git storage - 75% - Foundry appends every mutation to an event log snapshotted to git; Stencil uses a GitHub repository as its only database.

Frameworks

React everywhere it fits: React Router 7 in framework mode with server rendering on this site, Hammer, Stencil and Wreckr; Remix 2 on Architect for ANZCAP and the DTV platform; React Native via Expo with EAS builds; Tauri 2 for Foundry's desktop client and the game tools.

Rust services on axum and tokio - Anvil's server, the Aegis proxy, Foundry and the LOM game server - with rustls, russh and webrtc-rs where the job needs them.

Games and rich UI on their own stacks: Phaser for the LOM client, Svelte with PixiJS for the slot-game front ends, Three.js and OGL for WebGL work.

Vite builds everything; shadcn/ui on Radix and Base UI for primitives; Vitest, Playwright and Cypress for tests; two decades of Zend, Laravel and jQuery before React.

  • React - 90% - Primary framework for Web, Electron, and Tauri apps since 2018.
  • React Router 7 - 90% - Framework mode with server rendering on this site, Hammer, Stencil, Wreckr and the Anvil DB site - loaders, actions, and URL-driven state.
  • Remix - 85% - Remix 2 on AWS Lambda via Architect for ANZCAP, and the DTV streamer platform.
  • React Native - 90% - Primary framework for Mobile apps since 2016.
  • Expo - 90% - Favourite RN framework - using EAS for CI/CD build pipeline.
  • Tauri - 85% - My primary framework for cross-platform desktop apps - Hammer's desktop client, Foundry's client and the game tooling - lighter and faster than Electron.
  • Electron - 70% - Previously my primary desktop framework, now largely replaced by Tauri.
  • axum & tokio - 85% - The Rust web stack behind Anvil's HTTP and WebSocket server, the Aegis proxy, Foundry, and the LOM game server.
  • Express - 80% - Node game and API servers for the DTV platform - poker, blackjack and the main server.
  • Vite - 85% - Builds every current app, web and desktop alike; Vitest alongside it.
  • shadcn/ui, Radix & Base UI - 85% - Accessible primitives under the component libraries on every current React app.
  • Phaser - 65% - The LOM game client - an isometric multiplayer world talking to the Rust server.
  • Svelte & PixiJS - 75% - Slot-game front ends in a Storybook-driven monorepo of Svelte and PixiJS component packages.
  • Vitest, Playwright & Cypress - 70% - Unit and end-to-end suites on Hammer, ANZCAP, the DTV platform and the Adsellr monorepo.
  • Zend - 80% - A decade of experience in this framework at Deakin University.
  • Laravel - 70% - Used for various side projects.
  • jQuery - 90% - Used for many years.

DevOps

CI/CD platforms, infrastructure as code, deployment targets, and release and operations practice across the Rust services and the AWS, Vercel, Fly.io and Expo deployments.

  • GitHub Actions (ci/cd platforms) - CI on every React Router, Remix and Rust project. Anvil's pipeline runs rustfmt, Clippy with warnings as errors and the 3,300-plus test suite, then boots the release binary for an integration pass; Hammer runs Playwright end to end; Wreckr ships production and preview deployments to Vercel; ANZCAP's front end deploys per branch, one environment or tenant each.
  • AWS CodePipeline (ci/cd platforms) - CDK Pipelines for ANZCAP and the DTV platform: self-mutating, one pipeline per branch so each environment and tenant deploys independently, with manual approval gates on beta and production.
  • Atlassian Bamboo (ci/cd platforms) - Limited use at Deakin University for build and release automation.
  • Jenkins (ci/cd platforms) - Used heavily at Deakin University, especially for integration work inside Mule ESB and the Anypoint Platform.
  • AWS CDK (infrastructure as code) - Everything in TypeScript. ANZCAP's backend is 31 stacks: about 150 Lambdas behind one REST API composed across stacks to stay under CloudFormation's resource limit, 24 DynamoDB tables with streams, SES with DKIM, ACM, Route 53, SSM Parameter Store and AWS Backup - plus the DTV image proxy and infrastructure stacks.
  • Architect (infrastructure as code) - Remix on AWS Lambda through Architect for ANZCAP and the DTV platform - an app.arc per project, per-stage deploys, no servers to patch.
  • Self-hosted binaries & systemd (deployment targets) - Anvil, Aegis and Foundry install with a curl-pipe script into an FHS layout and run under hardened systemd units - NoNewPrivileges, ProtectSystem, setcap for privileged ports - with Let's Encrypt certificates picked up live.
  • Vercel (deployment targets) - The Anvil DB site and Hammer, which Vercel serves as the anvildb.com playground, Stencil sites, and Wreckr with production and preview pipelines.
  • Docker (deployment targets) - Multi-stage Dockerfiles with separate development and production dependency layers on the React Router apps; Compose for the LOM game server.
  • Expo EAS (deployment targets) - Build and submit pipelines for Wreckr Mobile and the Ultimate Pub Crawl app.
  • Fly.io (deployment targets) - Rats of Tobruk and earlier versions of this site.
  • Release engineering (release & operations) - Tag-driven GitHub releases cross-compiling five targets - Linux x86_64 and aarch64, macOS Intel and Apple Silicon, Windows - for Anvil and Aegis; Foundry adds .dmg, .msi and .exe desktop installers. 39 tags on Anvil, 27 releases of Foundry.
  • Network & TLS (release & operations) - TLS certificates reloaded on file change in Anvil, Aegis and Foundry; an SSH and DNS honeypot feeding nftables bans; coturn TURN for WebRTC calls; a hardened forward proxy with bearer-token auth.
  • Backups & recovery (release & operations) - Full and incremental backups with manifests and CRC verification in Anvil; hourly-to-monthly AWS Backup plans with point-in-time recovery on DynamoDB; Foundry snapshots its event log to git and restores by clone.
  • Observability (release & operations) - Prometheus metrics and structured tracing logs in Anvil; per-request tracing with redacted auth headers in Aegis; CloudWatch on the AWS stacks.

Other

AWS

Lambda, API Gateway, DynamoDB, Cognito, S3, CloudFront, Route 53, EC2, VPC, SES, ACM, SSM Parameter Store, Secrets Manager, AWS Backup, CloudWatch, IAM, EventBridge, SNS, CloudFormation, CDK, CodePipeline, CodeBuild, Amplify, AppSync, Neptune

Databases

Anvil DB, Neo4J, DynamoDB, PostgreSQL, Supabase, MySQL, SQLite, Oracle, MongoDB, Redis, Memcached

Rust

tokio, axum, axum-server, tower-http, hyper, reqwest, rustls, tokio-rustls, tokio-tungstenite, webrtc, russh, serde, serde_json, toml, tracing, tracing-subscriber, clap, anyhow, thiserror, futures-util, async-trait, memmap2, notify, jsonwebtoken, argon2, hmac, sha2, subtle, base64, uuid, chrono, rand, url, ipnet, tauri, aws-sdk, neo4j, criterion, proptest, wiremock, tempfile

Tools & Other

Git, GitHub, GitHub API, Vite, Biome, Knip, Vitest, Playwright, Cypress, Jest, Storybook, Tailwind CSS, Zod, GraphQL, Cypher, OpenAPI, Stripe, Adyen, Resend, SMTP, Docker, systemd, nftables, coturn, Let's Encrypt, Prometheus, Ollama, Claude Code, Figma, Postman, Jira, Confluence, Bamboo, Jenkins, Travis CI, Mule, Apache, npm, Webpack, Vue.js, Vim, VS Code

SELECT CATEGORY