← All workCOMMUNITY · AUTOMOTIVE·2023

Eternalgarage

Legacy WordPress rescue — A legacy WordPress community for car collectors had drifted into the danger zone: core, plugins and theme all out of date, with hacks layered directly into vendor code so nothing could be updated without breaking. The job was to stop the bleeding — stabilise it, speed it up, and make it safe to change again.

WordPressBuddyPressYouzifyMediapressPHP 8MySQLDockercURL
Eternalgarage
Sector
Community · Automotive
Year
2023
Role
Lead developer · rescue
Outcome
Google PageSpeed 31 → 89 · plugin hacks undone · CI/CD · moved to PaaS
The problem

What needed fixing.

The site worked the way a car with the oil light on works: fine until it isn't. Plugin code had been edited in place, so every update threatened to wipe the fixes. Performance was poor, the update path was broken, and there was no safety net — no CI, no clean environment, no way to make a change with confidence.

The approach

How I built it.

I undid the plugin hacks and rebuilt them as maintainable customisations so the update path worked again. I containerised the environment with Docker, moved the site to a managed PaaS, set up CI/CD, and worked through performance best practices — which took the Google PageSpeed score from 31 to 89. The result was a stable, fast, updatable site, and the foundation for the headless Drupal 11 rebuild that followed.

A car-collector social network held together by plugin hacks and optimism. Stabilised, sped up, and made updatable again — the prelude to a full rebuild.

Objectives
  • 01Stabilise a legacy WordPress community running on out-of-date core and plugins
  • 02Undo in-place plugin hacks so the site can be updated safely
  • 03Restore performance and a working deployment path
  • 04Lay the groundwork for a future modern rebuild
Key elements built
  • Plugin-hack removal — customisations rebuilt as maintainable, update-safe code
  • Dockerised environment and migration to managed PaaS
  • CI/CD set up where there had been none
  • Performance work: Google PageSpeed 31 → 89
  • A stable base for the Drupal 11 headless rebuild (see Eternalgarage v2)

A car community that had seized up

Eternalgarage is a social network for car collectors — profiles, galleries, garages, the back-and-forth of people who measure their weekends in restored sheet metal. It's a real community with real people in it, and by the time it reached me it had stopped turning over. Years of WordPress core, plugin and theme updates had been skipped. The site limped; the admin was afraid to touch it; and "launch" had quietly slipped off the calendar because nobody could promise the thing would still be standing the next morning.

The brief, stripped of politeness, was: make it safe to touch again. A site you can't update is a site that's already dying — it just hasn't been told yet. And it showed: a first load that crawled in at nearly three minutes, dragging forty plugins behind it. So the work wasn't a feature sprint. It was a revival: get it running, get it updatable, get the social layer behaving, and get it back to a launch you could actually stand behind.

Before / after
The same community, before and after: a first load from 2:47 down to 1.4s, and forty plugins decluttered to sixteen.

The hacks underneath

The social network ran on BuddyPress, with Youzify and Mediapress layered on top — a stack that does an enormous amount out of the box and absolutely resents being edited from the inside. That, of course, is exactly what had happened. To force behaviour the plugins were never built for, someone had gone in and edited plugin internals directly. It worked, briefly, in the way a bolt-on supercharger works briefly on an engine that wasn't built for it. The cost was that the site could no longer be updated: every plugin update would silently overwrite the customisations and break things, so updates simply stopped. And once updates stop on a public WordPress site, the clock starts on security too.

Diagnosing that — separating the genuine custom behaviour the community depended on from the hacks that were holding it hostage — was most of the early work. You can't just revert to stock; people rely on what's there. You have to understand precisely what each modification was doing before you can move it somewhere it'll survive an update.

Putting the customisations back where they belong

So I unpicked the hacks one at a time and moved the behaviour out into the theme and the plugins' proper extension points — hooks, filters, child-theme overrides — the seams these tools give you precisely so you never have to edit them in place. Once the customisations lived outside the plugin code, the long-deferred work could finally happen safely: core, plugin and theme updates that had been frozen for years; custom-theme bug fixes; reworked feature and module behaviour; a handful of new features the community had been asking for; and a responsive theme that, at last, behaved on a phone instead of fighting it.

Off the floor and onto a platform

Stability isn't only a code problem. The site moved onto a proper PaaS with CI/CD, so deployments stopped being a manual act of faith over FTP and became something repeatable — push, build, deploy, and know what's running. With the updates landed and the hosting sane, I worked through the performance best practices the site had simply never had: caching, asset handling, image delivery, the unglamorous list that separates a fast site from a slow one.

The number that tells the story best is Google PageSpeed: 31 → 89. Same community, same content, finally running. Better-looking, far more stable, genuinely faster — and, the point of the whole exercise, a site its owners could run and update themselves without fear.

PageSpeed 31 → 89
Google PageSpeed, before and after: 31 to 89. The clearest single mark of a site that went from limping to running.

The rescue bought the time

A rescue isn't the destination — it's what you do so there's still a patient to treat. WordPress, stabilised and updatable, gave Eternalgarage room to breathe and a community that stayed. The long game was always a rebuild on a modern stack, and that became the next chapter: a headless-ready Drupal 11 platform carrying the same community forward. This card is the before. The build is the after.

Full stack
WordPressBuddyPressYouzifyMediapressPHP 8MySQLDockercURL

Got something with similar shape? I read every message personally.

Start a project →