About me

I build web applications that solve real business problems.

For the past four years I've been re-engineering a legacy B2B platform used by major European tour operators, taking an IE-only codebase to a modern front end without interrupting the business that runs on it.

As a freelance developer I designed and delivered a recruitment platform end to end: Next.js front end, serverless Node.js back end, PDF generation, transactional email and a CI/CD pipeline, without storing any candidate data. One developer, about three months.

On the side I've published four VS Code extensions with over 17,000 installs, all born from real workflow problems. I also work daily with AI development tools (Claude Code, GitHub Copilot) to ship better code, faster.

Based in the UK, available for remote or hybrid roles with enterprise software teams.

Tech stack

Frontend

React Next.js Angular Vue.js TypeScript JavaScript HTML5 CSS3 SASS Tailwind CSS

Backend

Node.js Express REST APIs GraphQL

DevOps & Tools

Git GitHub Actions Docker CI/CD Webpack Parcel npm

Other

VS Code Extension API Redux RxJS Jest Vitest Playwright Agile/Scrum

Published VS Code extensions

Open-source tools for everyday work in the editor

17K+
Installs
4
Published Extensions
2
Registries
100%
Open Source (MIT)

Projects

VS Code Todo extension screenshot
TypeScript Node.js Angular Cloudflare Workers MCP

VS Code Todo (Extension + PWA)

A todo and notes extension for VS Code (9,000+ installs) and Plans, a PWA that opens the same lists on a phone. One TypeScript monorepo: an Angular app built twice (webview and PWA), a shared sync engine that merges edits through a GitHub Gist with a three-way merge, a Cloudflare Worker that relays GitHub's OAuth device flow for the PWA, and a local MCP server that lets AI agents read and update the lists.

CargoCrew recruitment platform screenshot
Next.js Tailwind CSS Netlify Functions

CargoCrew (Client Project)

A recruitment platform for airport logistics, built solo as a freelance project. A multi-step form collects personal details, a photo taken with the device camera and a digital signature. A serverless Node.js function turns them into a PDF, emails it to the agency, and sends the driver the list of documents to reply with. Nothing is stored on the platform.

Last Log extension screenshot
Node.js TypeScript

Last Log (VS Code Extension)

A TypeScript VS Code extension that provides easy access to the most recent log files. Additionally, it offers optional automated cleanup of older files and empty directories based on configurable age settings. It works with any file type but can be configured to target specific file extensions.

Smart XML Diff screenshot
TypeScript Node.js

Smart XML Diff (VS Code Extension)

A TypeScript VS Code extension for intelligent XML comparison that focuses on meaningful structural differences. The extension intelligently sorts distinct sibling nodes, normalizes formatting, and standardizes whitespace to highlight only structural and content differences. It leverages VS Code's native diff view with context menu integration and optional attribute sorting.

Multi-Projects Diff screenshot
TypeScript Node.js Worker Threads

Multi-Projects Diff (VS Code Extension)

A TypeScript VS Code extension that compares the active file with the same file in other projects. One-click actions open split-screen diffs, sync content and manage files. Diffs run in parallel on Node worker threads, so the editor stays responsive. Zero telemetry, MIT licensed.