The Situation
Graham Sanderson Interiors sells made-to-measure curtains, blinds, cushions, fabrics, and wallpapers. The site is not a standard e-commerce catalogue. It is a bespoke ordering system built around the specific logic of made-to-measure products, with complex pricing calculators determining quantities and costs for every item. Years of development, and significant financial investment, had gone into making it work exactly as the business needed it to.
The site had been built on ExpressionEngine 2 and had never been upgraded. When the original agency decided they could no longer support ExpressionEngine development, they offered the client a rebuild in Shopify. The client declined. Shopify could not replicate the complexity of what had been built. The pricing calculators, the product logic, the ordering workflows, the back-end management tools were not generic features that could be swapped out for a platform template. They were the result of years of deliberate, expensive development, built to a specification the client had authored themselves. Replacing them was not an option. The client went looking for an independent ExpressionEngine specialist and found Expression 37.
When we ran a diagnostic scan of the existing hosting environment, what we found was serious. The server had been set up by the previous agency as a custom configuration and had never been actively maintained. Running outdated software across the entire stack and failing on multiple security checks, the infrastructure had been deteriorating for years without anyone looking after it. It was, as we described it at the time, a hut on a set of stilts in the middle of the ocean, waiting to collapse.
While the audit was underway, a second problem arrived. Opayo, who provided the payment gateway, attempted to migrate the client from their legacy gateway API to a newer version. The migration failed. The site, stuck on ExpressionEngine 2 and running on outdated server infrastructure, could not support the new API. For a day or two, the site was unable to take payments. Opayo intervened, restored the old gateway to get transactions running again, but gave the client a hard condition: the site would need to be ready for the new Opayo API by March 2024, or they would close the old one down. The client came to us in December 2023 with two serious problems, a fast-approaching deadline, and a site that had already lost the ability to take payments once.
What We Did
Before any upgrade work began, we produced a full audit of the site. Every add-on, every custom plugin, and every area of bespoke development was documented, giving the client a clear picture of what the migration would involve and what needed careful handling before any work started.
The migration from ExpressionEngine 2 to ExpressionEngine 7 was a major undertaking. The site ran on more than 70 third-party add-ons and over 10 bespoke custom plugins. Each one was assessed, updated, or rebuilt. The biggest challenge was the e-commerce store. The Expresso Store module had been heavily customised over the years to handle the made-to-measure ordering logic, and that customisation had to be brought forward intact. The pricing calculators, the product filtering, the cart and checkout behaviour all required substantial rework to function correctly on the new platform.
The site was moved to a new, properly configured server environment. The security issues identified in the scan were resolved as part of the migration, replacing years of unmanaged custom infrastructure with a stable, modern hosting setup. Full-page caching was implemented using LiteSpeed, with cache warming scripts to keep performance consistent across the product catalogue.
Testing ran over a number of weeks. Lisa Sanderson (Company Director) was involved throughout, working through the ordering workflows with us to confirm everything behaved correctly before the site went live. The upgraded site launched on ExpressionEngine 7 and connected to the new Opayo gateway API, meeting the March 2024 deadline.
Across the migration, the work delivered:
- Full migration from ExpressionEngine 2 to ExpressionEngine 7
- 70+ third-party add-ons assessed, updated or replaced
- 10+ bespoke custom plugins rebuilt for EE7 compatibility
- Expresso Store module rewritten to preserve complex made-to-measure pricing and ordering logic
- Site moved to a new, secure, actively managed server environment, replacing unmanaged custom infrastructure
- Full-page caching implemented via LiteSpeed, with cache warming for consistent performance across the catalogue
- Payment gateway connected to new Opayo API, ahead of the March 2024 deadline
The Outcome
Graham Sanderson Interiors came to us with a site that had never been upgraded, a server that had been quietly failing for years, and a payment gateway that had already broken. They left with a fully upgraded ExpressionEngine 7 platform, every custom intact, a secure modern hosting environment, and a live connection to the new payment gateway, with the deadline met.
The years of investment in the ordering system was not lost. The made-to-measure pricing logic, the product management workflows, the customer ordering journey: all of it came forward. What the business had spent years building was preserved and put onto infrastructure that can actually support it.
If you operate a business-critical website that has not been touched in years, and whose original developers are no longer available to you, that situation is worth sitting with. The infrastructure ages quietly. The software falls behind. The dependencies drift. Nothing breaks until something does, and by then the exposure has been building for a long time. For Graham Sanderson Interiors, two separate problems converged at once. The fact that neither resulted in permanent damage or a missed deadline was not an accident.
We have continued working with Graham Sanderson Interiors on a monthly retainer since the launch. That relationship has included further development, performance work, and more recently a full payment gateway migration from Opayo to Stripe.
What the business has as a result:
- ExpressionEngine 2 to EE7 migration completed, all bespoke development preserved
- Custom e-commerce store fully operational, made-to-measure ordering logic intact
- Secure modern server environment, replacing years of unmanaged custom infrastructure
- Payment gateway connected to new Opayo API, March 2024 deadline met
- Full-page caching delivering significantly improved load times across the product catalogue
- Ongoing monthly retainer providing continuity of specialist support
We delivered. Here is the evidence.
Visit the live site →


