I’m a front-end oriented full stack web developer with over twenty years’ experience working for digital agencies and publishing houses in London and Brighton.


I’ve worked on projects for the BBC, Legal & General, Diageo, Zurich Insurance, Volvo, Sony, EDF, BT and the House of Windsor. I build beautiful, user friendly, feature-rich desktop and mobile web apps, and love using new browser technologies like WebGL, Web Audio and Web Components to surprise and delight the end user.

I am available for freelance and contract projects, working in-house or remotely. Please get in touch if you would like to work with me.




Excellent with React, Redux, jQuery and Three.js. Some Lodash, RxJS and Immutable
Experienced with Vue, Bootstrap, Express and WordPress. Some Gatsby and Angular
Build Stack
Uses NPM, Gulp, Webpack, Rollup, Babel, Terser, JSDoc, ESLint, Selenium, Jest, Jenkins
Fluent in JavaScript, HTML, CSS and PHP. Some GraphQL, SQL, TypeScript and bash
Skilled in Git, Atom, VS Code, Adobe Animate, XD, Photoshop, InDesign and Illustrator
BA (Hons) Graphic Communication with Painting and Photography
Other skills
Professional experience in photography and retouching, illustration and icon design, sub-editing and proofreading, motion graphics, 3D and UX design, Agile and Scrum

Web apps

‘geodata.studio’, layered 3D data visualised on a globe in Three.js, React and Redux
‘Group Protection’, an insurance sales tool prototype for Legal & General in Vue
‘Bar Sim Game’, award winning financial simulation for Diageo, in Three.js and React
Animated 3D guide with video and minigames for EDF, built in TypeScript and Angular
‘Cell Survivor’, an educational game for AIDS Alliance, using CoffeeScript and Phaser
‘Dream Vacation’ for US travel agent RCI, using Node and a Mongo database
Drag-and-drop email composer for web-marketers SmartFocus, based on WordPress
Suite of multilingual data-capture iPad apps for Winsor & Newton, with PHP backend
In-store touchscreen catalogue for footwear brand Kurt Geiger, built in ActionScript
‘Smarter Living’, a lifestyle and pension calculator for Zurich Insurance, using jQuery
‘Preview’, a magazine and e-zine with embedded video for Blockbuster, built in Flash
‘Body Shape Challenge’, a browser game for New Look, shortlisted for an APA Award


A WooCommerce site where users create custom books. The backend then generates press-ready PDFs, and FTPs them to a print-on-demand service
A Digital Asset Management theme which automatically captures media metadata
‘Don’t Quote Me’, a shareable random quote generator built for Tesco and Blinkbox
Lookabout, a plugin where 3D portraits in a gallery respond to cursor movement
Site with innovative page transition system for property company Thackeray Estates
Broo, a custom WordPress theme and plugins based on Bootstrap, for fashion commentator Caryn Franklin and childrens’ charity Arms Around The Child
Promotional microsite with HTML5 animations for the Ford B-Max launch campaign
E-commerce site for London hi-fi retailer Audio Gold, in WordPress and WooCommerce
Custom web design and build for fashion label Mark Fast, using a bespoke PHP CMS
Site with custom event-listing for London music venue Green Note, using Joomla

Graphic design

Brand redesign for GVA, then the UK’s largest independent commercial estate agent
Visual identity and brand guidelines for MSK, Japan’s largest photovoltaics specialist
Design of award-winning customer magazines for Britannia, Land Rover and Volvo
Template design for a major brand refresh of Radio Times at BBC Worldwide
Won an award for brand development of the Skytours brochure at Thomson Holidays


Case Study

Bar Sim Game

Won the Immersive/Learning Simulation Award at DevLearn DemoFest 2018

This multiplayer HTML5 serious game combines a custom 3D framework with an advanced business simulation, to provide a fun and social learning tool for Diageo staff.

Bar Sim Game was designed to reinforce learning during a two-day training course. It’s played by four teams of three people, where each team has a laptop and controls the marketing budget of a simulated bar. The goal is to maximise end-of-year profit, with help from a facilitator who can monitor their progress in real time.

An outline for the game mechanic and learning objectives had been agreed before I came on board. I produced a detailed functional spec and wireframes, wrote all of the code, and worked with the client’s art director on graphic design and photography.

I created a custom framework on top of Three.js, which allowed us to create the 3D bar scene very quickly, and add real photos of Diageo’s staff drinking at the bar! I also built a custom business simulation, which models bar staff and customer behavior, footfall and stock levels, to realistically calculate sales and profit.

Developed during this project

For high performance animated 3D scenes, with optional physics, shadows and focus
Each minute is simulated, using a repeatable sequence of seeded random numbers
An ASCII interface helps visualise and balance the game’s simulation dynamically
Automated deployment to staging and production servers, using GitHub webhooks
Switch between source ES6, concatenated ES6, transpiled ES5 and minified ES5
Case Study

Group Protection

Legal & General

Legal & General needed a simple way to sell complex life assurance. I used Vue to rapidly develop an MVP, working closely with a small, diverse team of financial experts.

Using agile and rapid development techniques, this prototype passed through multiple iterations, but took just six days to build. It provided a minimal viable product which Legal & General could use for initial user-testing and focus groups.


Uses advanced customised RangeSlider components for intuitive visual feedback
Excel import
Transforms L&G’s Excel spreadsheets into JavaScript data using a custom CSV Parser
Financial calculations are run on Decimal.js objects, not native JavaScript numbers
The codebase is self contained and well commented, for a straightforward handoff
Case Study

Cell Survivor

AIDS Alliance
Watch the making-of video or just play it online

Cell Survivor is a retro-style online game. It’s fun to play but also carries a serious message, and has helped to raise awareness of HIV among young people around the world.

International charity AIDS Alliance needed an impactful, social media savvy way of reaching teenage boys, as part of their campaign for World AIDS Day.

I was given complete creative freedom but limited time and budget. I devised a simple but unique game mechanic, inspired by the body’s immune-defence system, and went on to design and build a game which balances education and entertainment.

In Cell Survivor you play a cell nucleus which can defend itself from HIV and other infections using condoms and antiretroviral pills. Each level introduces a new defensive technique, applicable in the game and also the real world.

Project lifecycle

I put together the pitch, including PSD mockups and target audience analysis
A unique circular take on ‘Breakout’, inspired by receptors on a white blood cell wall
I used Photoshop to create all sprites and graphic elements from scratch
Re-imagined the client’s brand as a 1980s arcade title, like Konami or Atari
Weighted each level to keep it challenging without alienating inexperienced players
I run and maintain the ‘high scores’ server, and test the game on a monthly basis

Maximum reach

Icons position themselves depending on landscape or portrait orientation
Uses Google Translate to switch between 100 languages, from Albanian to Zulu
Tested on IE11, Edge 13+, Firefox 12+, Chrome 15+, Opera 15+, Safari 6+
Tested on Windows XP+, OS X 10.6+, Android 4.4+, iOS 4+
Case Study

Dream Vacation


A web app I built with Express, Mongo and jQuery which was the centerpiece of a ten week promotional campaign. 150,000 users registered and designed their dream holidays.

To celebrate their 40th anniversary, US travel agent RCI ran a competition over ten weeks and gave away 40 holidays. Users were encouraged to invite thier friends to enter the competition using in-app Facebook, Twitter, and Email integrations. The app tracked each invitation, and rewarded users when one of thier invitees registered.

I was provided with wireframes, artwork and a functional spec. I built and deployed the app, tuned its performance during the campaign, and compiled analytics results.

App architecture

The backend’s written in JavaScript, running on a Node HTTPS server on a CentOS box
Data is stored as JSON objects in Mongo, a high-performance NoSQL database
Advanced server-side routing and request handling is provided by Express
The app uses Mustache, a template syntax for injecting content into static HTML

External APIs

Facebook’s Graph API is used to send invitation messages to users’ Facebook friends
Users can tweet an invitation on their Twitter feed at the click of a button
The app uses the Nodemailer package to send invitations to users’ email contacts
A service called HelloWorld records competition entries over a secure connection
Comments and customer satifaction scores are collected from an OpinionLab popup
App usage is tracked with micro-conversion tracking tags and Google Analytics
Case Study


Arms Around The Child

I developed a suite of custom WordPress plugins, along with a custom WordPress theme based on Bootstrap, to create this lightweight, easy-to-update, responsive website.

Arms Around The Child raises funds for projects in India and Africa to help lift children out of poverty. Analytics indicated that donations at armsaroundthechild.org were increasingly being made using tablets and mobile devices, so we chose to rebuild the site from the ground up, using responsive techniques.

The Creative Director at Kandi Media designed the new site, providing visuals in PDF format. I reworked the visuals for three screen widths: desktop, tablet, and mobile. From these I built ‘broo-aatc’, a WordPress child theme which extends ‘broo-base’, a general purpose parent theme I had developed in early 2013.

Developed during this project

Language and locale tools, for maintaining US and UK versions of the site
Dynamic social media buttons, including Facebook Like and Twitter Tweet
An image slider based on Bootstrap’s carousel component
A modified Bootstrap carousel which dynamically fills all available window space
A variable-column gallery with popup Bootstrap modal dialogs

Best practice

Future Proof
Extensive use of plugin hooks for hassle-free WordPress upgrades
Clean Code
HTML, CSS and JavaScript source files are properly indented and well commented
Tested on all modern browsers and devices
Includes CSS for screen readers and visually impaired users