I made a safety first content modelling tool that extends Craft MCP. Create, modify and delete fields, entry types and sections from an AI assistant
Agency
(Abstrakt)
Earth's Best
Full build and creative front end development for US based global food brand, Earth's Best. Thoughtfully developed UI with numerous micro-animations and interactions to sell the "playtime" brand
Commercial
Latch
Design consultation, full build, hosting and delivery for the Latch design agency; specialising in branding for property, hospitality and F&B
Agency
(Subism)
ClearBank
Design and development consultation, content modelling, full build and front-end for fintech organisation, ClearBank.
Agency
(Abstrakt)
Abstrakt
Consulting, R&D, prototyping and development of interactive 3D overlays for UK web development agency, Abstrakt.
Personal
Night Room
Exploratory audiovisual experience made with Three and React Three Fiber. Night Room is a soporific analog escape for sleepless summer nights.
Personal
Serein
React / Next web app for record label, Serein. Installable as PWA and featuring a fully streamable catalog with slideout player drawer. Howler for audio, zustand for state and framer motion
Personal
Solaris
Audiovisual / spatial audio experiment depicting the solar system. Solaris uses positional audio attached to each planetary object to place the listener at the centre of the sound stage.
How to use LLMs like Claude, Codex to improve the accessibility of your web pages, where they shine, where they fail and a skill for producing good quality a11y audits
JULY 2026
Blender to transparent video with cross-browser support
How to render Blender scenes with a transparent background and encode them as cross browser friendly video files with alpha transparency
JULY 2026
One canvas & multiple three.js scenes with Lit
A pattern for orchestrating multiple threejs scenes on one canvas with Lit. Each scene is its own isolated component thanks to Reactive Controllers.
JUNE 2026
Alpine.js and Lit compared
A comparison and overview of Lit and Alpine.js, strengths and weaknesses and when I tend to each for one over the other.