Archive
Everything published on this site, newest first.
2026
FloatTube A YouTube window for macOS that floats above everything else Software Electron App Architecture The repeatable skeleton for a multi-window Electron + Vite + React app — three builds, a locked-down preload bridge, domain-scoped IPC, and the boot-time pitfalls that produce blank windows. Patterns Client ID Upsert Honour client-generated IDs when upserting entities — look up by ID, never mutate a loaded row's primary key, and replace rather than re-key when a natural key collides. Patterns Electron Release Pipeline GitHub Actions CI/CD for building, signing, distributing, and auto-updating an Electron app via S3/CloudFront Patterns Entity detail/edit uses a routed panel, not a dialog Drill into or edit an existing entity in a URL-driven detail panel; reserve dialogs for disposable create/confirm/wizard flows. Patterns Lambda Error Handling and Response Management Job-processing lambdas return success when execution completes normally; the job's outcome travels in the response payload, not as a thrown error. Patterns Local-First Persistence Client writes commit to the local store and return; a background drainer delivers them to the server. Patterns React-Query for decentralised state management Use React Query's request deduplication and cache invalidation to eliminate shared state — components fetch independently and stay in sync through query invalidation, not props or context. Patterns SceneKit Tips Pitfalls and patterns for SceneKit rendering — render thread vs MainActor, constraint closures and actor isolation, scene-clock gating, and bone manipulation. Patterns SwiftUI Navigation on Path-Bound Stacks Value-route every flow on a path-bound NavigationStack — an active view-destination link re-asserts its push whenever the path changes Patterns
Brainstorm Batch AI image generation powered by Google Gemini Software
AI-Managed Documentation That Lives in Your Codebase Embedding markdown documentation directly in your app and letting Claude maintain it produces docs that stay accurate, include real diagrams, and don't rot. Patterns
rokoko-ps5-controller-bridge Control Rokoko motion capture with a PS5 controller Software
Managing the LocalStack Lifecycle Treat LocalStack as disposable infrastructure. Destroy the container on every deploy and avoid partial teardowns. Patterns
A General-Purpose Async Loading Component for React Query One way to centralise loading, error, and retry UI for React Query without leaking query state into every component. Patterns
convar-strict Validate environment variables against .env.example Software
Demo Driven Development Building components in isolation with comprehensive demos catches edge cases that unit tests miss and ensures your UI handles failure gracefully. Patterns
Service Events: Rolling Your Own Event Logging A lightweight event tracking system built on DynamoDB that provides visibility across your services without the cost or complexity of third-party logging platforms. Patterns
E2E Testing with Playwright and Storybook A testing strategy that mirrors how you build UIs — composable, isolated, and resilient to change. Patterns
A Playbook for Side Projects How to spin up a scalable, high-quality, low-cost system to support that next business idea. Opinion
steal-port Kill whatever process is using a port Software
API Mocking Pattern for React and Storybook A clean pattern for swapping between real and mock APIs without polluting your components with mocking logic. Patterns
Data Model handling in TypeScript A pattern for shared, runtime-validated data models that catch issues early and keep frontend and backend in sync. Patterns
Environment Configuration Best Practices Fail fast with explicit values. No defaults, no fallbacks, no computed configuration. Patterns
Organising Environment Files As the number of apps, services and environments grow over time, these tips keep your environment configurations files more manageable Patterns 2025
Null vs Undefined null and undefined are not interchangeable. Treating them as such blurs intent, weakens APIs, and forces defensive code everywhere. Opinion
Lambda Tips Tips for making lambdas easier to debug and maintain. Patterns
Fixing Tailwind Culling in Monorepos A practical pattern for preventing Tailwind v4 from culling classes in shared monorepo components. Tips
Cancel Me A browser plugin to quickly cancel your subscriptions Software
Lambda Tips Tips for making lambdas easier to debug and maintain. Patterns
Fixing Tailwind Culling in Monorepos A practical pattern for preventing Tailwind v4 from culling classes in shared monorepo components. Tips
Cancel Me A browser plugin to quickly cancel your subscriptions Software 2024
SwiftUI: Tips and Tricks The following article lists some SwiftUI features and design patterns that I personally like to refer back to. The criteria was simply things that might not be immediately obvious to novice/intermediate Swift coder. Tips
Festive Photos AI-powered holiday photo transformations Projects
Blint Build with AI agents that follow your project’s rules Software NestJS: benefits, cheatsheet and tips NestJS is a great library for creating a web service. It strikes a nice balance between a comprehensive set of solutions to common problems, without feeling like a heavy framework. This article explains many of its features, before detailing some tips around things like seeding and AWS Lamda deployment. Tips
mktouch = make directory + make file A quick bash utility to make it fast and easy to create a new file within a new directory Tips
Importing Rokoko Character Animations into Xcode Using Blender How to import Rokoko motion capture animations onto a Mixamo-rigged character in Xcode, using Blender for retargeting and xcode-collada for DAE cleanup. Tips
xcode-collada Node CLI tool to prepare COLLADA files for Xcode Software
Importing Collada Characters and Animations from Mixamo into Xcode A guide to importing Mixamo characters into Xcode, covering common DAE file issues and how to resolve them with xcode-collada. Tips
365 Health iPhone fitness tracking app for year-round wellness Projects
Festive Photos AI-powered holiday photo transformations Projects
mktouch = make directory + make file A quick bash utility to make it fast and easy to create a new file within a new directory Tips
Importing Rokoko Character Animations into Xcode Using Blender How to import Rokoko motion capture animations onto a Mixamo-rigged character in Xcode, using Blender for retargeting and xcode-collada for DAE cleanup. Tips
xcode-collada Node CLI tool to prepare COLLADA files for Xcode Software
Importing Collada Characters and Animations from Mixamo into Xcode A guide to importing Mixamo characters into Xcode, covering common DAE file issues and how to resolve them with xcode-collada. Tips
365 Health iPhone fitness tracking app for year-round wellness Projects 2023
2020
2018
2013
Non-parametric decision trees and online HCI SIGCHI 2013, 2013 Publications Studying a head tracking technique for first-person-shooter games in a home setting INTERACT 2013, 2013 Publications The exploration of webcam enabled head-tracking in first-person-shooter games The Australian National University, 2013 Publications
2012
2011
2009
The Wiimote with multiple sensor bars: creating an affordable, virtual reality controller NZCHI 2009, 2009 Publications Be careful how you point that thing: Wiimote aiming for large displays OZCHI 2009, 2009 Publications Head tracking in first-person games: Interaction using a web-camera INTERACT 2009, 2009 Publications