Laravel audit-trail consolidation
A Laravel waste-permit application for a local-authority client, with skill and patience, optimised to smooth over deployment friction.
A Laravel application managing waste-permit licences for a local-authority client had evolved, over years of incremental change, to a point where two parts of the system handled overlapping responsibilities. The audit trail and the administrative permit-flow each owned subtly different versions of the same data. The agency running the project asked me to consolidate them without breaking the public-facing service.
The consolidation, in three parts:
Deploys had been a careful exercise. The team would routinely check the support inbox shortly after every release. After the consolidation, deploys became routine. The team's confidence in the platform grew, which had compounding effects: they deployed more freely, fixed bugs faster, and could work the codebase end-to-end with confidence.
The temptation in this kind of consolidation is to rewrite. The cheaper, safer move is usually the opposite: identify the actual shared responsibilities, extract them into clear services, write tests that pin down today's behaviour, and only then change anything. That is what we did. The test suite went in first as a frozen snapshot of how the system already behaved, then the consolidation changes landed on top, with the tests confirming nothing user-facing had changed by accident.
NDA local-authority work. The kind where what matters is not the flash of the build, but that real public-service work runs predictably year after year. The consolidation pulled the architecture into one clear single-responsibility design in one focused push, and left the agency well-positioned to maintain the codebase on their own.
All case studiesThis article was drafted with the help of AI to populate the page. I'm in the process of rewriting it - a principle I adhere to across all projects. AI produces boilerplate, not production-quality output.
Got a Laravel codebase that needs untangling without breaking the public flow? Get in touch.
Misbehaving stack? Codebase that won't play fair?