Astro won over Next for reasons rooted in the site’s own content model — everything’s a post with a pillar tag, and Astro’s typed content collections match that directly instead of needing a content library bolted onto a framework built around its own post types. Zero client JS by default also matched the typography-first design direction, and the simpler mental model matched a real, stated goal: if the stack stops being fun to tinker with, the project gets abandoned by October.

A quieter but more structural fix followed close behind. Pillar and format had been conflated into one taxonomy, with “teardown” sounding like a fifth pillar that overlapped all the others. Splitting them into two real axes — pillar is what a post is about, format is what it does — cleaned up navigation, gave the newsletter an unambiguous identity, and settled what this very build log actually is: pillar workshop, format log, series building-this-site.

The repo went public the same stretch, after one pre-flight check confirmed no secrets had ever touched the history. That turns the site’s own GitHub history into the first practical GitHub lesson for the audience, with a three-rung on-ramp — read the source, comment via GitHub Discussions, suggest an edit — spec’d out to build later.

Main takeaways

  • Astro’s content collections fit the four-pillar model well enough that the folder structure existed before the framework did.
  • Pillar (what a post is about) and format (what it does) are different axes — conflating them produces a junk-drawer taxonomy.
  • Making the repo public turns the site itself into the GitHub teaching prop, instead of writing an explainer nobody actually learns from.

What I got wrong

  • Almost let the deferred members-area question force the framework decision — correctly deferred instead, since it doesn’t tip the choice either way.
  • The pillar names themselves (“workshop,” “field notes”) read evocatively in a way that helped cause the pillar/format conflation in the first place — still open whether they read clearly to a first-time visitor.
  • status: draft hides posts from the site’s own pages but not from a now-public repo — decided that’s on-brand, but decided it after the fact.