How this site is deployed
Every version is checked, built, released and then monitored. Here is the path from a commit to zapz.work.
Live version
This page was built from this commit: 7de3617, .
Diagram
Step by step
Push
I push to the main branch of the GitHub repository. Only this branch goes to production.
GitHub Actions CI
Lint (
astro checkand an automatic review of the texts), a static Astro build, then tests on the built site: internal links, valid HTML, and a search for secrets, IP addresses and private paths. Lighthouse CI fails if a page drops below 90 in performance or below 95 in accessibility, best practices and SEO.Docker image
A multi-stage build: Node builds the site, nginx serves it. On the main branch, the image is published to GitHub Container Registry, tagged with the commit.
Hosting
The site runs on Cloudflare Workers: the build files are served as the Worker's static assets, and its code handles redirects (www to the bare domain, http to https, old URLs, trailing slash), security headers, caching of versioned files and the 404 page.
Release
A script run from my server starts from the exact export of the commit, reinstalls dependencies, rebuilds and runs the tests again, publishes with
wrangler deploy, then checks the pages, redirects and 404 online. A version that fails the tests is not published. The CI has the same release job, active once the Cloudflare token is set in the GitHub secrets. Rollback: the previous Worker version.Monitoring
A personal server checks zapz.work every 15 minutes (French and English pages, status 200) and alerts me if it fails. A fuller GitHub Actions workflow (title, sitemap, robots, resume) runs on demand: monitoring uses no CI minutes.
The site
- Astro with static output and Tailwind CSS. The only JavaScript follows the system light or dark theme.
- The same content in French and English, with hreflang, sitemap, robots and one Open Graph image per language.
- The PDF resume is generated from the site's resume page, so it never contradicts the site.
- Moved from Vercel to Cloudflare Workers on 5 November 2026, when the free account went over its usage quota. The DNS zone was copied to Cloudflare before the switch, email records included: no email was lost.