I'm a London-based software engineer building web, mobile and desktop apps with React, React Native and TypeScript. Lately much of my work is with AI: shipping LLM-powered features, building MCP servers and agent tooling, and setting teams up to get real value from coding agents. I trained as a professional musician, and I love nothing more than projects that bring code and music together.

All projects →

Latest post

All posts →

Skills

Day to dayExperiencedWorking knowledge

Languages

The fundamentals, plus Rust where performance matters.

  • TypeScript
  • JavaScript
  • HTML
  • CSS
  • Rust
  • Python
  • SQL
  • WebAssembly
  • Sass
  • Kotlin
  • Swift

Web & mobile

Cross-platform apps from one codebase, on iOS, Android, web and desktop.

  • React
  • React Native
  • Expo
  • Next.js
  • Redux
  • SWR
  • React Navigation
  • React Router
  • Vite
  • Tailwind CSS
  • Reanimated
  • Skia
  • Tauri
  • Web Audio
  • Web Workers
  • PWAs
  • Accessibility
  • Web performance

AI & agents

Shipping LLM features and making coding agents genuinely useful on a team.

  • Claude API
  • Claude Code
  • MCP servers
  • Multi-agent workflows
  • Agent skills & rules
  • AI regression testing
  • Structured outputs
  • Vision models
  • Prompt engineering
  • GitHub Copilot

Back end & data

Lean APIs, offline-first sync and the services around them.

  • Node.js
  • Fastify
  • PostgreSQL
  • PowerSync
  • REST APIs
  • Firebase
  • InstantDB
  • Google Cloud
  • AWS S3
  • Docker
  • RevenueCat

Testing & delivery

From unit tests to device farms, through CI to the app stores.

  • Vitest
  • Jest
  • Playwright
  • Appium
  • Testing Library
  • WebdriverIO
  • Cucumber (Gherkin)
  • Storybook
  • GitHub Actions
  • GitLab CI/CD
  • Bitrise
  • EAS Build & Update
  • Vercel
  • Railway
  • Datadog
  • PostHog
  • Google Analytics
  • Braze

Ways of working

Working closely with design, product, QA and stakeholders.

  • Jira
  • Confluence
  • Figma
  • Agile delivery
  • Stakeholder demos
  • UX & design input
  • Code review
  • Cross-functional teams
  • Technical communication
  • Teaching