← Back to blog

From Webflow to Full Control: How We Rebuilt Our Website in One Day

Pantalytics preaches data ownership and open source — so we had to practice what we preach. In one day, we migrated our website from Webflow to Astro + Directus + Coolify: new positioning, additional pages, privacy-friendly analytics and a security audit included.

1. Practice What You Preach

Pantalytics advises clients on data ownership, open-source tooling and European hosting. But our own website ran on Webflow — an American platform where your content is locked in a proprietary format. Exporting is only possible via their API, and then you get JSON with custom objects that can't be imported anywhere else. That's inconsistent with what we sell.

We'd had it on the roadmap for a while, but it was time to actually do it: completely rebuild the website on a stack that fits our principles. Open source, self-hosted, European-hosted, fully exportable.

2. Not Just a Migration — A Repositioning

This wasn't a matter of moving HTML from A to B. Pantalytics has shifted over the past year from "data consultancy" to Agentic AI + Odoo. The website needed to reflect that.

New pages that didn't exist in Webflow:

  • Cases — four concrete project descriptions with results
  • Approach — what a collaboration looks like, from intake to delivery
  • Contact — with form and direct contact details
  • Privacy — GDPR-compliant privacy statement

The existing content was rewritten, not copied. The 81 blog posts were exported via the Webflow API with a Python script, transformed to clean HTML, and imported into Directus via bash scripts.

3. Why This Stack

Every technology choice has a concrete reason. No "it's popular" or "we already know it" — but a deliberate trade-off based on our principles.

Astro 5 (instead of Next.js or Nuxt)
A marketing website doesn't need JavaScript in the browser. Astro is the only framework that sends 0 KB JavaScript to the client by default. Next.js always ships a React runtime, even if you only build static pages. Astro doesn't. Static site generation builds all our 43 pages in ~1.5 seconds. File-based routing, no dependency on React or Vue unless you explicitly add it.

Directus 11 (instead of Strapi, Payload or Contentful)
Directus is truly open source — you can self-host it without limits and without missing paid features. Strapi and Payload are "open-core": essential functionality sits behind a paywall. Contentful is fully proprietary. Directus runs on PostgreSQL. That means: your data sits in a standard relational database that you can export with pg_dump, query with SQL, or connect to any other system. No proprietary data format.

Coolify v4 (instead of Vercel or Netlify)
Coolify is an open-source, self-hosted Platform-as-a-Service. It offers the same developer experience as Vercel — git push triggers a deploy — but runs on your own server. No vendor lock-in, no US cloud dependency, full control over your deployment pipeline.

Hetzner CAX11 (instead of AWS or GCP)
German data center, GDPR by design. The CAX11 is an ARM64 server with 2 vCPUs and 4 GB RAM for EUR 3.29 per month. That's not a typo. On it run Coolify, Directus, PostgreSQL, Redis, Traefik and the website itself — all at the same time.

PostHog EU (instead of Google Analytics)
Open-source analytics with an EU-hosted instance. No cookies needed for basic analytics, so no cookie banner. Google Analytics sends visitor data to the US — that doesn't fit our principles.

Brevo (instead of SendGrid)
Brevo (formerly Sendinblue) is a French company. GDPR-compliant transactional email. SendGrid is Twilio, American, and falls under the CLOUD Act.

4. One Day, Start to Finish

This is what actually happened, in chronological order.

Morning

  • Webflow API export — Python script that fetches all 81 blog posts, categories and metadata and transforms them to Directus-compatible JSON
  • Directus setup — collections, relations, permissions and content import via bash scripts
  • Astro frontend — layouts, components, pages, design tokens, self-hosted fonts (Lexend and Instrument Sans as woff2, no Google Fonts CDN)

Afternoon

  • Dockerfile — multi-stage build: Node 20 for the Astro build, Caddy 2 Alpine for serving static files
  • Coolify deployment — server provisioning on Hetzner, Directus as one-click service, website as Dockerfile app
  • DNS and SSL — domain pointing to Hetzner, Let's Encrypt certificates via Traefik, routing configuration

Evening

  • PostHog integration — analytics script added, EU instance configured
  • Auto-deploy pipeline — Directus Flow that triggers a Coolify webhook on every blog post change: content to live in ~60 seconds
  • Security audit — HTTP headers checked, Directus permissions tightened, firewall rules on the Hetzner server

5. What We Ran Into

No migration without problems. These are the five issues that cost the most time, with their solutions.

ARM64 and PostgreSQL
Coolify's default Directus template uses postgis/postgis with platform: linux/amd64. On an ARM64 server, that crashes immediately. Solution: replace with postgres:16-alpine, which has native ARM64 images.

Directus 11 Breaking Changes
Directus 11 fundamentally changed the permission model. Permissions are linked to policies, not roles. The public policy must be looked up via the /policies endpoint. Singletons use PATCH, not POST.

Auto-deploy Trigger Type
Directus Flows have different trigger types. A trigger of type "action" doesn't execute request operations — it logs them but doesn't send them. After an hour of debugging, it turned out that the trigger type "filter" does work correctly for webhook calls to Coolify.

Docker Networking During Build
Astro fetches content from Directus during the build. But localhost:8055 is not reachable from a Docker build container. Solution: use the sslip.io URL of Directus, which routes via Traefik.

Thumbnail Relation in Directus
A file field in Directus requires an explicit relation to directus_files plus the special: ["file"] attribute. Without that attribute, you can select a file but not save it. This is nowhere clearly documented.

6. The Result

AspectWebflowNew Stack
HostingUnited StatesGermany (Hetzner)
Data ownershipLimited (proprietary format)Full (PostgreSQL + REST API)
AnalyticsNonePostHog EU (privacy-first)
Vendor lock-inYesNo (everything open source)
CMSVisual, limitedHeadless, API-first
Auto-deployN/AContent to live in ~60s
PerformanceGoodLighthouse >90, 0 KB JS
Cost~$30/month~EUR 5/month
Security auditNot possibleHeaders, permissions, firewall audited

The website loads faster, costs less, and we have full control over every layer: from the database to the deployment pipeline.

7. AI as Development Partner

Claude Code was used throughout the entire process — architecture decisions, implementation, deployment debugging, security audit. What normally takes a week was done in one day.

Not because AI writes perfect code. It doesn't. But it eliminates the repetitive parts: generating boilerplate, looking up configuration options, diagnosing API errors, composing security headers. You focus on the decisions, the AI handles the execution.

Specifically: the Webflow export script, the Directus import scripts, the Astro components, the Dockerfile, the Caddyfile — all generated and iteratively improved with Claude Code. The architecture choices and content strategy are human; the implementation is a collaboration.

But there's a tension. Claude Code is from Anthropic, an American company. The same logic we used to replace Webflow — data ownership, European hosting — also applies to our AI tooling. We're actively exploring European and open-source alternatives for our development process. Data sovereignty is not a one-time project, it's an ongoing process. Every step counts.

8. Takeaways

  • Practice what you preach forces better decisions. If you advise clients on data ownership, your own infrastructure should reflect that.
  • Self-hosting is surprisingly accessible in 2026. Coolify makes deployment as easy as Vercel, but on your own server.
  • AI accelerates the entire process, not just code writing. Architecture choices, debugging, security audits, documentation — AI is useful in every phase.
  • Data sovereignty is an ongoing journey. You don't replace all your tools at once. But every step — from Webflow to Astro, from Google Analytics to PostHog, from SendGrid to Brevo — brings you closer to full control.
  • You don't need a big budget, you need clear principles. Our entire stack costs less than EUR 10 per month. The investment is in knowledge and time, not licenses.

9. Want to Get Started?

Pantalytics helps companies with the same transition: from US-hosted, closed-source platforms to an open, European stack with full data ownership. Whether it's your website, your CMS, your analytics or your complete IT infrastructure.

Curious what we can do for your organization? Get in touch for a no-obligation conversation.