A tax publisher
Their public sites, rebuilt, and the platform behind them.
The client's name is withheld at their request. They're a Dublin tax publisher, with members in Ireland and the UK, and our primary client. We look after their tech.
For years their public website lived inside an app built in 2019, alongside the system staff used to manage content and the members' login. It showed its age: visitors got an empty page until their browser had done the work of drawing it, and the tools it was built with had stopped getting updates years ago.
We moved their public pages out of the old app. Where Ireland and the UK used to have an app each, one application now serves both countries, each at its own address, so a change made once reaches both. The old addresses redirect, so nothing anyone had linked to or bookmarked broke. And where the old app pulled in well over a hundred outside packages, the new sites run on the framework and little else, so there's far less to keep up with.
Since then the sites haven't stood still: hundreds of changes, each one tested before it reaches both countries. We've kept them up to date without downtime and tightened their security, and uptime monitoring tells us when a site goes down. And an enquiry is never lost: if sending fails, the form tries again.
Pages now arrive ready to read. Both sites are fast on a phone, and get full marks for accessibility and search.
The old app was a single-page app from 2019, built on a toolchain that stopped getting updates in June 2020. About 122,000 lines served the public site, the content system and the members' login from one router. The HTML it sent was an empty root and “You need to enable JavaScript to run this app.”, with page titles set in the browser after load.
The new sites are Astro on Cloudflare, upgraded a major version while live, and deployed once per country from one repo. One setting, the region, decides the URL, locale, SEO details, legal copy, spam-check keys and support contacts, so the two sites can't drift apart. After each deploy, smoke tests check both live sites.
The old app listed 118 runtime dependencies, among them nine chart libraries, three rich-text editors and thirteen table plugins. Its source and assets came to about half a gigabyte before installing any of them, though that also held the CMS and the members' area. The new sites ship two: the framework and its sitemap plugin. Everything else is build and test tooling.
Content is read through one repository layer and filtered by region, so its source can move to a CMS without touching the pages. The longest texts come from the client's CDN, cleaned for reading and given a navigation tree.
The code is organised by feature, and pages only render what a feature hands them. What doesn't change is prerendered; only what must run on each request runs on the server. Config and every form submission are validated before anything runs, a failed send retries with backoff, and server code keeps its tests beside it.
Every response carries strict security headers and a request ID, so a problem can be traced to the request that caused it.
The home page is about 17KB of HTML on both domains. Google's page test on mobile, 15 October 2026: 100 for performance, best practices and SEO on the Irish site, and 98 for performance on the UK one.