The start: a single-page app selling a responsiveness promise
Stiperstone Managed Services sells managed IT, cyber security and cloud to UK SMEs. The proposition is responsiveness: when something breaks, somebody answers.
The site it had was a Hostinger Horizons export, a React single-page app that assembled itself in the browser. Every service, every bundle, every FAQ was written into page markup. It worked, in the sense that it displayed. But it was slow to arrive, awkward for search engines to read, and structurally impossible to maintain without a developer.
The problem with content living in markup
Websites do not go out of date because time passes. They go out of date because somebody edits them.
When a service name is written into nine different page files, a rename updates seven of them. The other two sit there for a year, quietly contradicting the rest of the site, until a prospect notices and asks which version is true. Multiply that across services, bundles, prices, FAQs and stats, and a site that launched accurate is wrong within a year.
The middle: what we actually built
1. Put every piece of content in one file
Company information, services, bundles, sector bundles, FAQs, testimonials and statistics all live in a single data file. The pages read from it. Nothing is written twice.
Changing a service name is one edit. Adding an FAQ is one edit. The 29 pages regenerate from the same source, so they cannot disagree with each other, because there is only one of each fact.
2. Write tests for the content, not just the code
Four test suites run against the build. They check the data is the shape the pages expect, that the structured data is valid, that every icon referenced actually exists, and that the contact form payload still matches what the endpoint receives.
That last one matters more than it sounds. The most expensive website bug is not a visual one. It is a form that looks like it submitted and quietly does not, and it is usually caused by a field being renamed on one side and not the other. A test catches that in seconds. Without one, you find out when you ask why the enquiries stopped.
3. Static pages, islands only where they earn it
Every page is server-rendered HTML. React appears in three places: the mobile navigation, the contact form and the group cards. Everything else is markup and small vanilla scripts.
4. Make the tiers comparable
Service bundles are laid out so a buyer can see what they get at each level and place themselves before contacting anyone. This is a small content decision with a disproportionate commercial effect: it removes the enquiries that were only ever going to discover you were out of range, and it makes the remaining first calls much shorter.
5. Build the machine layer in from the start
llms.txt, per-route structured data, organisation and location markup. For a managed service provider this is no longer optional. A meaningful share of supplier shortlists now begin with somebody asking an AI assistant who provides IT support in their area, and assistants read structured content, not design.
The end: what it left them with
29 static pages generated from one file, with tests standing between a careless edit and a live mistake. The site is handed back in a state where changing a service is genuinely a one-line job, which is the difference between a website that stays true and one that slowly becomes a liability.