Backend engineer from Melbourne with 20+ years of shipping production systems. I've been building in Spring Boot and Laravel, lately I've also been putting AI agents to work on things of questionable importance.
I like problems without straightforward solutions. Cracking open challenging issues with clever algorithms is immensely satisfying! It's always enjoyable to learn something new. Recently I've employed Bayesian tuning, integer linear programming, multi-agent pipelines, explainable boosting machines, quaternions and L-systems.
I'm also into creative coding and generative art - some examples are further down the page.
| Project | Description |
|---|---|
| BitBrush | Real-time collaborative pixel canvas. REST APIs for canvas state, WebSocket/STOMP for live broadcasts, thread-safe placement banking. Spring Boot · WebSocket/STOMP · Postgres · Flyway · Fly.io |
| Mystery-Manager | Allocates bulk produce overage into mystery boxes that customers actually want. Bayesian hyperparameter tuning picks the weights, an ILP solver does the allocation and a glass-box ML model finds the gaps. Python · Optuna · PuLP/HiGHS · EBM · Ordinal regression |
| apples-to-apples | AI-driven pricing pipeline. Playwright feeds 3 LLM stages with 8 parallel agents. Deterministic cross-validation of output with graceful fallback, trend analysis and audit trail. Python · Playwright · LLM orchestration · AI-drive SWOT analysis |
| Zeroshot (fork) | Extended an open-source multi-agent engine with parallel analyst clusters, real-time subagent tracking and parameterised templates. Added a framework-agnostic quality gate system. JavaScript · Multi-agent architecture |
| Clippy's Revenge | Terminal visual effects plugin for tattoy: fire, alien invaders, hungry microbes and one very angry paperclip destroy your work! Python · Rust · tattoy plugin protocol · JSON stdin/stdout |
| mark-dingwall.github.io | Personal site with shader magic, portfolio showcase, creative coding sketches and a realtime multiplayer canvas. JavaScript · Processing · GSAP · GLSL |
![]() cubeworms See it live · Get the code |
![]() BitBrush See it live · Get the code |
![]() Clippy's Revenge Get the code |
![]() flowsphere See it live · Get the code |
![]() forest See it live · Get the code |
![]() microbes See it live · Get the code |
![]() magnetites See it live · Get the code |
![]() portfolio See it live · Get the code |
PHP Laravel Java Spring Boot JavaScript React Express.js Next.js SQL Postgres TypeScript Python Shell











