About
I build thoughtful, performant web applications from database to UI. Passionate about clean architecture, great developer experience, and shipping things that actually work.
- TypeScript
- PostgreSQL
- AWS (Lambda, DynamoDB)
- React
- Python
- Node.js
- REST APIs
- Git
Experience
Migrated the React front-end from JavaScript/Material UI/CRA to a full TypeScript, Shadcn, Tanstack Router/Query stack built with Vite. Developed and optimised serverless Python Lambda APIs, including a migration from Python 3.9 to 3.14. Managed third-party EV charger integrations via OCPI and direct APIs. Mentored team members across front-end and back-end.
- TypeScript
- Python
- React
- AWS Lambda
- DynamoDB
- TailwindCSS
- Cognito
Built a full-stack debt-splitting app using Next.js 14 with both static and dynamic server components. Engineered SQL queries for managing user debt and balances. Implemented Agile methods within a team of 5 with daily stand-ups and continuous deployment to Vercel.
- Next.js
- PostgreSQL
- TypeScript
- TailwindCSS
- NextAuth.js
- Cypress
- Jest
Worked in a team of 2 to refactor an entire codebase to TypeScript for improved type safety. Implemented component testing with Vitest and React Testing Library (82% front-end coverage) and API testing with SuperTest and Jest (86% back-end coverage).
- React
- TypeScript
- Vite
- Vitest
- Jest
- Supertest
- MongoDB
Projects
A personalised TV tracking app — browse, rate, and organise the shows you love. Built with a modern fullstack architecture.
- Next.js
- Drizzle
- React
Short term role at OnTrial. Developed and maintained a subscription tracking system.
- TypeScript
- Node.js
- MongoDB
An interactive deep-dive experience. Explore procedurally generated cave systems in the browser.
- C#
- Unity
- 2D
Readings
Traditional logs lie to you. The case for wide events and why structured logging alone isn't enough.
- Observability
- Engineering
How inline scripts placed after elements can fix hydration mismatches before the first paint.
- React
- Performance
Leave the code better than you found it — the case for incremental improvement over big-bang refactors.
- Best Practices
- Refactoring