Family boatyard
A boatyard, three languages, one pipeline
A traditional boatbuilder needed a website that would outlive the person who built it. The result costs a few euros a month and hasn't needed attention since.
The situation
A family-run boatyard — five generations of building and restoring wooden vessels — had a website that had stopped being maintainable. The domain returned an error page for months without anyone noticing. Nobody was sure who could publish a change, and the hosting arrangement was inherited rather than chosen.
They needed three things: a site in three languages, somewhere reliable to host it, and an arrangement that wouldn’t quietly rot again.
What was built
A static website — pages generated ahead of time rather than assembled on every visit — served from object storage behind a content delivery network, with an automatically renewing TLS certificate and DNS managed alongside it. All of it defined in Terraform, in a repository the owner has.
Publishing works like this: a change is merged, and a pipeline builds the site, publishes it, and clears the cache. Proposed changes get their own preview link first, so what’s about to go live can be looked at before it does. Authentication to the cloud account uses short-lived credentials issued per run — there are no permanent access keys to leak.
Three languages are handled natively, with translated content and interface strings kept side by side.
One problem worth recording
The root domain returned 403 Access Denied while the www version worked.
The cause was a detail that catches people regularly: the CDN had been pointed at the
storage bucket’s API address rather than its website address. Those two endpoints behave
differently — only the website one honours redirect rules — so the redirect from the bare
domain to www was being silently ignored, and visitors got a permissions error.
Repointing the CDN at the website endpoint fixed it. It is written down now, along with the trade-off it implies, so it doesn’t have to be diagnosed a second time.
Where it ended up
Running cost is a few euros a month. There is no server to patch and no content management system to keep upgraded. Certificates renew without anyone being reminded. The whole thing can be rebuilt from the repository if it ever needs to be.
That same setup is what scales to a group with several brands: the infrastructure is one reusable module, so the next site is a configuration file rather than a new project.
Client details omitted deliberately. Happy to talk through the technical specifics on a call.