Full-Stack Software Engineer

Building digital experiences that matter

Specializing in React and Next.js, I bring 7 years of expertise in building responsive, accessible, and scalable interfaces for complex, data-heavy products. I thrive on translating designs into seamless user experiences.

About

Background

With a strong foundation in JavaScript and component-driven development, I excel at creating scalable, user-centric applications. My experience spans React, Next.js, Node.js, and cloud services, with a focus on clean architecture and high-quality code.

Currently

Based in Leicester, I collaborate with cross-functional teams to deliver features for Cromwell's large-scale ecommerce platform. My role involves API-driven front-end engineering, testing, and ensuring customer-focused delivery.

Projects

I learn by building — working on projects to test ideas, explore patterns, and stay sharp with the tools I enjoy. Here are a few of them:

Unsplash Image Engine

Unsplash Image Engine

A fast Node.js application which uses the Unsplash API to find and display high-resolution images via a responsive EJS interface.

nodeexpressjavascriptbootstrapejs
Sliders Game

Sliders Game

A sliding puzzle game featuring random tile generation and a leaderboard. Position the pieces into the correct order in the fewest possible moves.

javascriptmongodbcss
All-in-one Search

All-in-one Search

A verstile tool which makes searching multiple channels quick and easy.

javascriptcss
QuickEmoji

QuickEmoji

A lightweight React app with autocomplete that helps you quickly find emojis by name and copy them to your clipboard in one click.

reactcss
Marble Solitaire

Marble Solitaire

A fast-paced, JavaScript logic game where players try to clear the board within a 100-second countdown. Featuring a responsive design and a MongoDB-powered leaderboard.

javascriptcssmongodb
Rapid HTMX Search

Rapid HTMX Search

A fast, reactive movie finder showcasing HTMX in action — delivering server-driven UI updates through seamless HTML swaps without the overhead of a heavy client-side framework.

expresshtmxtailwindomdb-api
Dynamic Wave Pool

Dynamic Wave Pool

An interactive animation experiment using conic gradients to simulate wave patterns. Customise speed, color, and geometry in real-time to explore the power of pure CSS motion.

javascriptcss
AI Task Studio

AI Task Studio

An AI-powered tool that uses the Model Context Protocol (MCP) to manage tasks through a chat interface, integrating OpenAI with an MCP server to interpret requests and execute actions

nodeexpressopen-ai
Psychedelic Avocados

Psychedelic Avocados

A hypnotic wave of 20 psychedelic avocados - made purely with CSS

css
Emoji Explorer

Emoji Explorer

Explore hundreds of different emojis and play them like a slide show

JavaScriptcss
JavaScript Clock

JavaScript Clock

A digital and analogue clock made with just 20 lines of JavaScript

javascriptcss
Mixology Search Lab

Mixology Search Lab

A sleek interface for discovering drinks via the CocktailDB API, allowing users to explore an extensive, open-source collection of global cocktail recipes and ingredients.

javascriptbootstrapcss
Interactive Circles

Interactive Circles

A grid of interactive coloured circles that change size and opacity based on the position of the cursor

javascriptcss
Animated wave of balls

Animated wave of balls

Customize the curve shape, horizontal span and size of these animated balls

JavaScriptCSS
Traffic lights

Traffic lights

Using the CSS animation property to animate a set of traffic lights at night

css
Trailing spiral

Trailing spiral

Click and drag to see a trail of fading circles, like a slinky! Made with just 18 lines of JavaScript.

javascriptcss
CSS Clock

CSS Clock

A CSS analogue clock which accurately shows the time

javascriptcss
Pure CSS modals

Pure CSS modals

These modals work with the `:target` pseudo-class, are made with pure CSS, fully responsive and easy to customise.

css
ChatsApp

ChatsApp

A simple, real-time messaging app built with Socket.io, Node and Express. To view this project, follow the steps from the README.

nodeexpressjavascriptsocket.io
Google Loader

Google Loader

A looping animation for a Google loading screen with adjustable animation speed using a slider

javascriptcss
Single Snake

Single Snake

Based on the Snake game - with just one block

javascriptcss
Word Randomiser

Word Randomiser

Type some words and see the letters randomise until they resolve

javascriptcss