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.
Featured project
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
