Skip to content
Portfolio

V2 — Cloudflare Pages Migration (Current)

Version 2 splits the infrastructure by workload type. Static frontends are built and served from Cloudflare Pages. The Hetzner VPS remains online for backend services, dynamic applications, APIs, and any page that is not a pre-rendered static build.

This replaces the v1 model where every site — including fully static documentation — ran as a Docker container behind Nginx Proxy Manager.


Version 1 treated the documentation site like a dynamic app: GitHub Actions built the project, copied dist/ to the VPS over Tailscale, and Nginx routed traffic to an nginx container. That added operational overhead for a site that is 100% static HTML, CSS, and JavaScript at build time.

Static frontends belong at the edge. Backend logic belongs on a server you control. Mixing both on the same VPS made every doc update touch Docker, NPM, TLS, and a custom deploy pipeline.

The new model:

WorkloadPlatformExamples
Static frontendsCloudflare Pagesdocs.pablorosi.dev, pablorosi.dev
Backend & dynamic appsHetzner VPSAPIs, databases, admin tools

The Hetzner server is not decommissioned — it shifts from hosting everything to backend-only, which is a better fit for future non-static projects.


  • Zero Maintenance: No need to manage Nginx certificates or OS updates for the frontend. Cloudflare handles TLS, CDN, and static hosting for Pages projects.
  • Cost-Effective: Zero operational cost for static frontends using Cloudflare’s Always Free tier.
  • Performance: Static assets are served from the edge, achieving near-instant load times globally with zero server overhead.
  • Simpler deploysgit push triggers build and publish; no Tailscale, SCP, or docker compose for docs.
  • Preview URLs per branch for review before merge.
  • Smaller attack surface on the VPS — no docs container or NPM proxy host for static sites.
  • Clear separation — frontend and backend can evolve independently.