Skip to content
Call 03333 20 97 97
bristol.digital: empowering ideas
Legacy PHP rescue and modernisation

Portfolio

Twenty-five years of PHP, from bespoke code in the early 2000s to Laravel today.

I've spent my career inheriting systems: taking over code nobody else understood, upgrading old PHP, cleaning up after attacks, and leaving behind something documented and maintainable. Often as the only developer, doing what a team would.

What follows is a selection, with the stacks and methods behind it.

One person, a whole team's worth of roles

On most projects, the work below is split between a business analyst, a designer, a front-end developer, a back-end developer, a database specialist, a DevOps engineer, a security specialist, a project manager and a marketer. On many of mine, it was all me.

Role a team would hire What it looked like in my projects
Business analysis Turning a paper-based process, a spreadsheet or a 30-page form into a clear specification
Design Front-end interfaces, brand-led marketing sites, admin screens staff can use without training
Architecture and databases Database design for live, mission-critical systems; polymorphic models to keep data clean; multi-site and multi-language platforms
Development Full-stack PHP, mostly Laravel, plus Symfony, CodeIgniter, Zend, WordPress, Magento, Joomla and Go
Integration Payment gateways, accounting, credit-checking and insurance services, property portals, maps, email and SMS
DevOps and hosting Server builds, load balancing, deployment, Docker, Google Cloud, AWS and DigitalOcean
Security Penetration-test findings implemented, server hardening, and recovery from attack
Project leadership Technical lead in client meetings, code review, coding standards, and training colleagues
Marketing Brand naming for search, SEO, Google Ads campaigns and conversion optimisation
Continuity Documented recovery procedures so a system never depends on one person

Selected work

Live scoring for national athletics events

Replacing a paper system that ran under pressure. Three panels of specialist judges and a safety judge score each live two-minute performance, with around 300 performances per event, so the system is mission-critical. I designed the interfaces, architected the database and built it. The audience sees the running order in real time and coaches see provisional placings. A second phase let coaches register and manage squads and pay online, and later work added event entry, team rosters, wristband orders and PDF score sheets. Laravel, MySQL and PostgreSQL, test-driven development, Sass, jQuery, Bootstrap, Nginx, Amazon S3.

A letting agency, run by software

An entire letting business automated, then rebuilt as cloud software. For a three-branch agency with 15 staff: tenancy creation, renewal, change and cancellation documents; properties published automatically to the website and portals such as Rightmove; supplier quotes and works orders; payments, invoices and reports; and matching prospects to properties. The client's site held a top Google position, with a clear effect on the business. Later refactored into a multi-user Laravel software-as-a-service application, with a REST API, a directory of 28,000 agents, a load-balanced server and documented recovery procedures. Laravel 4 to 5, REST APIs, load balancing, PDF generation, automated email.

Public sector: the Planning Inspectorate (GOV.UK)

An upgrade delivered five weeks early. Upgraded a GOV.UK site from PHP 5.4 to 7.2 and its WordPress REST API to version 2, with automated API testing as a bonus. Introduced Git and trained the client team in it. Later: implemented penetration-test findings and accessibility requirements across the English and Welsh websites, and built a stateless, multi-stage, multi-language appeals form, using the GOV.UK Design System. WordPress, PHP 7, REST API, Postman, Git, GDS design patterns, accessibility.

Public sector: Defra and the Animal and Plant Health Agency

Inside a large, fully agile team. Development and debugging of a substantial bespoke ordering system for vets and farmers to order animal tests, on site with the client: weekly sprints, daily stand-ups, multiple teams and bespoke API integrations. Laravel, Jira, Vagrant, Xdebug, Gulp, Sass, GDS patterns.

BBC Good Food: a commenting and reviews service

From rapid prototype to API. For the backend of BBCGoodFood.com's comments, questions, reviews, tips and ratings: a rapid prototype in Laravel, then the service in Symfony's API Platform with generated API documentation, a schema migrated from MySQL to MongoDB as requirements changed, automated integration tests and code-quality checks, running in Docker. Symfony API Platform, Doctrine, MongoDB, Docker, Postman, GitFlow.

University recovery after an attack

Around 200 websites restored. At Queen Mary University of London, after an attack by Anonymous: repairing cross-site scripting and SQL injection vulnerabilities, hardening servers and installing certificates across bespoke, WordPress and Zend Framework sites, plus a command-line tool to find every site's owners and contact them. PHP, Linux server administration, Bash, SSL, security repair.

Taking control of an inherited platform

The first of five developers to get it moving. As lead Laravel developer on a pharmaceutical company's multi-language content platform, where compliance matters: a poorly written, undocumented codebase brought under control, duplicated code merged, multi-language support rebuilt, server and deployment diagrams drawn, and code from third-party agencies reviewed. I also represented the project as technical lead in client meetings. Laravel, Git, code review, refactoring, documentation.

A Go API behind a trade e-commerce site

Live stock levels, built across two languages. A bespoke business-to-business shop in PHP, hosted on Google Cloud, reading live stock levels from an API written in Go. PHP, Go, Google Cloud Platform, Vue.js, AMP.

More, briefly

  • Lush (retail): Laravel and Lumen microservices, migration to Google Cloud, API documentation, continuous integration, and Go
  • Property: holiday-rental and letting portals with booking calendars, maps, PayPal, currency conversion, SMS and PDF automation
  • Healthcare software: a subscription platform for chiropractors to produce patient exercise sheets, from brand name and design to the drag-and-drop builder
  • Retail and manufacturing e-commerce: a multi-site cloud ordering platform with full revision history, integrated with the client's tills and payment gateway; B2B uniform ordering for 30 leisure centres, integrated with Sage
  • Financial products: an application integrating credit-checking and insurance services
  • Courts: one-to-one and group training of judges and clerks at the Royal Courts of Justice, and sensitive data migration

Tech stack

Depth across the whole stack, not a list of buzzwords. These are tools I've used to deliver real work.

Languages and frameworks

PHP (object-oriented, since the early 2000s) with Laravel (from 4.2 onwards), Lumen, Symfony and API Platform, CodeIgniter, Zend Framework, WordPress (plugins, themes, REST API), Magento and Joomla. Go for APIs and microservices. JavaScript with Vue.js, React and jQuery.

Front end

HTML5 and CSS, Sass and Less, Bootstrap and Foundation, Gulp and Laravel Elixir, AMP, accessibility to government standards, and the GOV.UK Design System.

Data

Relational database design in MySQL and PostgreSQL (including PostGIS for location data), MongoDB, Doctrine, and migrations between them.

APIs and integration

Building and consuming REST APIs, Swagger/OpenAPI documentation, Postman testing. Payments with Stripe, PayPal, GoCardless and Sage Pay; accounting with Xero and Sage; SendGrid, Facebook and Google Maps APIs; property portals, credit checking and insurance services.

Infrastructure and DevOps

Linux server builds and hardening (Ubuntu, CentOS, RHEL), Apache and Nginx, Docker, Kubernetes exposure, Vagrant, Bash. Google Cloud Platform, AWS, DigitalOcean and Cloudflare. Load balancing, backups and restore testing, DNS and domain management (a Nominet registrar), and performance tuning.

Quality and delivery

Test-driven development with PHPUnit, Behat and PHPSpec, continuous integration, code-quality tools, Git and GitFlow, Composer and code review.


Methods

Agile, when it helps; common sense always

I've worked in fully agile teams, with weekly sprints, stand-ups and Jira, and I bring the useful parts to every project: short cycles, working software early, and feedback from real users. On my own projects that means building a first version quickly and improving it in steps, rather than a long plan that's out of date by launch.

Prototype first

Several projects started with a rapid prototype to settle the requirements before the real build, so the expensive decisions are made with something working in front of people.

Tests as a safety net

Test-driven development and automated API testing, so changes are safe, especially on systems a business depends on.

Leave it better than I found it

Duplicated code merged, Git introduced, coding standards written down (PSR for PHP), and recovery procedures documented so the client is never dependent on me.

Exponential thinking

A certified ExO Consultant and ExO Sprint Coach with OpenExO: designing for the technology that will exist in two years, not the technology of five years ago.


Qualifications and training

  • ExO Sprint Coach, OpenExO, 2020: certified to run a ten-week exponential technology sprint
  • ExO Consultant, OpenExO, 2019: among the first ten in the UK
  • Google Cloud Platform specialisation: developing, deploying, debugging and securing applications
  • Google Ads qualified individual, managing budgets up to £750 a day
  • Nominet registrar
  • Zero to Dangerous, Flow Research Collective, 2020: neuroscience-based peak performance

Away from the screen

Illustration of a touring cyclist with four loaded panniers

I play classical piano, and write apps to help musicians practise. I've cycled from the south of England to Spain, and back, at around 100 miles a day with four loaded panniers. Somehow it felt effortless.


Book a free conversationLegacy System Assessment, from £2,500

Call Book a free conversation