
When Roger came to us with the idea for Rogonneur, a community-driven cycling tour platform, he was clear about one thing from the first conversation: he wanted every byte of user data to live in the EU.
This wasn't a compliance requirement. Rogonneur isn't the kind of platform that has a regulator asking where its data sits, and Roger wasn't trying to satisfy one. It was a value decision. In the current political and social climate, a growing number of people are looking for European alternatives to the default American cloud, and Roger was one of them. He wanted the platform his community funds to run on European infrastructure, operated by European companies. Our job was to turn that preference into a stack that actually works.
A note on where we stand as a company: we're not dogmatic about this. On other projects we run on AWS when it's the right tool, including cases where a regulatory framework points us there. For Rogonneur there was no such obligation. The brief was European-first for reasons of principle, not law, so that's what we designed around. What follows is an honest walkthrough of how that played out: what we picked, what it cost, and where we deliberately didn't draw the line.
The biggest decision was the host. The default for European startups has become “AWS Frankfurt,” which technically puts data in the EU but whose legal entity is Amazon Web Services, Inc. (Seattle), subject to the US CLOUD Act. That was exactly the kind of ambiguity Roger wanted to avoid.
We chose Hetzner Cloud, a German company with data centers in Nuremberg and Falkenstein. The setup runs on Arm-based instances with a private network connecting each environment, S3-compatible object storage for media uploads and database backups, and full-server snapshots for weekly backups.
The cost difference is real. The production environment runs for under €25 a month including storage and backups, where a comparable setup on a hyperscaler would cost several times that. But cheaper infrastructure isn't a free lunch, and we'll come back to the full picture later.
Each environment is split into a public-facing web tier and a private application tier, connected over a private network. The web tier is the only thing exposed to the internet. Everything sensitive, the application backend and the database, sits behind it on a network the public internet has no route to. Deploys are orchestrated from inside that private network, so images never travel through a public registry.
The whole topology is described in OpenTofu (the open-source fork of Terraform). One pull request, one apply, and we can rebuild either environment from scratch in about fifteen minutes.
Beyond hosting, we audited every service the application talks to and matched each one to the same European-first brief:
None of these stores user data outside European soil. PostHog technically offers a US instance; we explicitly picked the EU one, which runs in Frankfurt. Mollie was the most interesting choice: its fees are roughly comparable to Stripe, and it supports every European payment method Roger's users actually reach for. SEPA Direct Debit and iDEAL still matter a lot in the Netherlands and Germany.
We didn't go dogmatic. Three US-based services are still in the stack, each kept for a specific reason:
The principle we applied: user data stays in the EU, while operational metadata can live where it makes practical sense. Anyone claiming to be “100% European” while hosting on GitHub is either overstating it or running on something like Codeberg. Both are fine; we chose neither.
Trust that matches the audience. Rogonneur's community cares about where their routes, their photos, and their payments live, and the answer is now simple and consistent: on European infrastructure, operated by European companies, with a short list of exceptions that never touch personal data. For a platform funded by the people who use it, that alignment between values and stack is worth more than any single feature.
A stack that is cheaper to run, with honest caveats. The raw infrastructure bill is genuinely lower than the hyperscaler equivalent, and by a wide margin at this scale. But going European-first is not purely a discount. It costs more up front in research and vendor evaluation, since these companies are smaller and less documented than the American defaults. It costs more in implementation and operations, because we run our own PostgreSQL and lean on fewer managed services. And it carries more uncertainty, since some of these vendors are less battle-tested than an AWS or a Stripe. The net is still favorable for a project of this size, but it's a trade, not a free win, and it's worth going in with eyes open.
We'd consider Scaleway (France) alongside Hetzner from day one. It's more expensive but offers managed PostgreSQL, which would simplify the backup story. A likely future shape is compute on Hetzner with a managed database on Scaleway.
We'd also look harder at Codeberg or Forgejo for source control. We didn't, and we don't regret GitHub, since the developer experience is genuinely better. But if the question ever comes up, “why is the code on a US service,” the answer should be more considered than “because that's where everyone is.”
The default cloud isn't always the right cloud. For Rogonneur, “European compute and European data services” wasn't a constraint we fought against. It was a starting point that clarified the choices, gave Roger a stack that reflects what his community values, and kept the vendor list short enough to reason about.
If you're building something with a European audience, especially one that cares where its data lives, it's worth asking the question Roger asked us: does this vendor need to be where it is, or is it just a default nobody questioned? Sometimes the honest answer reshapes the stack, often for the cheaper and almost always for the simpler. And sometimes the right call is still the American default. The point is to choose on purpose.