2 min read

Astro Blog Publishing System

This blog is the publishing system behind jaimemguajardo.com: a fast place for writing about projects, documenting what I am learning, and sharing work while it is still fresh.

It keeps the public request path deliberately small. Astro turns Markdown and MDX into static HTML ahead of time, and Cloudflare serves the finished assets globally. There is no application server or database required to render a page.

  1. 01 Write Markdown in GitHub
  2. 02 Commit Push to main
  3. 03 Verify Check, test, build
  4. 04 Publish Cloudflare static assets
jaimemguajardo.com Fast, static pages
Feeds after deploy Readers + Kit-approved posts
A commit is the trigger. The live deployment is the publishing boundary.

How publishing works

GitHub is both the editor and the source of truth. I can create or update a Markdown file from a computer or phone and commit it to main. That commit starts Cloudflare Workers Builds.

The production command runs content validation, Astro checks, ESLint, Vitest, the static build, and a final artifact verifier. Only then does Wrangler upload the verified dist/ directory to the production Worker. Cloudflare activates the new static assets as one deployment, so readers never see a half-finished release.

Drafts and subscriber updates

Publishing is fail-closed. A post appears publicly only when its frontmatter contains the literal value draft: false. Draft routes are excluded from the production build, the sitemap, and both feeds.

The public /feed.xml contains published writing for feed readers. /rss.xml is intentionally stricter: it is generated only for production and contains only posts that are both published and explicitly marked notifySubscribers: true. Kit polls that live feed, which means a saved draft or failed deployment cannot create a subscriber email.

Why this stack

The site keeps Astro Nano’s restrained interface while adding a publishing contract around it. The result is cheap to serve, quick to load, easy to edit from GitHub, and flexible enough to link to projects that run on their own subdomains or infrastructure.