Built to be rebuilt
How we build and run it
Everything we run sits in Europe, on a mix of managed cloud services and rented servers that we manage ourselves, and every server is described in code. No server was ever configured by hand. If the whole platform disappeared tomorrow, it could be rebuilt from the repository and a backup, because that is exactly what we did when we moved datacenters.
- Every server defined in code. Zero configured by hand.
- Backups several times an hour, encrypted, stored with a second provider.
- Failed releases roll themselves back in about one second.
- Rebuilt in a different datacenter, from code and a backup.
- Servers are interconnected over private networks, not the public internet.
Infrastructure you could rebuild from scratch
Everything runs in Europe on rented infrastructure: managed cloud services where a provider does the job best, and rented servers that we manage ourselves. Every server, firewall rule and service is defined in code and version controlled. Nothing is clicked together in a control panel, and nothing lives only in someone's head.
The servers sit behind a load balancer, so adding capacity means starting another one rather than rebuilding anything. Nothing scales on its own: that is a deliberate choice. It keeps a young project cheap to run, and leaves room to grow on the day it is not one.
That claim was tested the hard way. The entire platform was moved between datacenters by destroying every server and rebuilding it from the repository, with a database upgrade folded into the same window. It came back from code and a verified backup.
Code
Every server and setting, in version control
Terraform
Builds the servers, network and firewall
Ansible
Sets up each server: web server, database, updates
What runs online
Visitors
Load balancer
Spreads the traffic
Private network
Web servers
Database
Routing and workers
Route planning and background jobs
Encrypted backups
At a second provider
Releases that undo themselves
A new version is built in its own folder while the current one keeps serving traffic. When it is ready, a single pointer switches over instantly. The new release is then health checked, and if it fails, the pointer flips straight back to the previous version without anyone being called.
Rolling back is not a rebuild. It is the same one second switch, available at any time.
Your data, copied several times an hour
Everything is backed up several times an hour. Exactly how often depends on how recoverable that data is: something the platform could rebuild by itself in the worst case can stand a longer gap than something a person entered once and would never enter again. Everything is encrypted before it leaves the server and stored with a second, independent provider, so a bad day at one company cannot take both the platform and its backups.
Restoring is a single command, and it has been run for real, not just written down.
Watching for silence
Anyone can alert on a server that catches fire. The harder failure is the backup that quietly stops running. Every backup job here has to check in when it starts and when it finishes, and a missed check in raises an alarm on its own.
Alongside that, each server reports its own health, application errors are collected as they happen, and third party packages are scanned continuously for known vulnerabilities and supply chain compromises.
A vulnerability that turns up does not wait to be noticed: security updates are applied automatically. Scanning tells you something is wrong - this fixes it, including on a Sunday morning. That cover is bought rather than assumed: patching runs for the whole set of open-source packages a server actually uses, not only the small core that gets it by default. Nothing quietly falls out of support while it is still running.
Credentials nobody can read by accident
Production credentials are encrypted at rest and never stored in readable form. Infrastructure keys and application keys live in separate places, so neither system can reach the other's secrets. And nothing that touches a credential can print it into a log.
Privacy by design, not in the fine print
The cheapest data to protect is the data you never collected. So the first question in a design here is not how we secure something, it is whether we need to hold it at all. That decision is made early, because early is the only time it is cheap: it shapes what a product is allowed to be - a map of places rather than of people - and it sits in the design rather than in a setting somebody could switch off later.
Where something does have to be recognised, it is done without keeping the person, and for no longer than the job needs. Visitor statistics run on a server we manage ourselves, without cookies, so no third party watches your visitors. All of it sits in Europe.
Client work is held to the same standard, and you can point it at your own site: the GDPR Privacy Check shows what a page really loads, and who it tells about your visitors.
In short
- Hosting
- Managed cloud and rented servers in Europe, load balanced, all defined in code.
- Deployment
- Instant switch over with automatic rollback.
- Backups
- Encrypted, several times an hour, stored off provider.
- Monitoring
- Per server health, error tracking, and dead man alarms on every backup.
- Security
- Private networking, encrypted credentials, automatic security updates.
- Privacy
- No personal data where it is not needed, statistics without cookies, all of it in Europe.
Want this standard on your own project?