{
  "blyg": "0.3",
  "id": "10m8e5k9504kppzhvdqh9d2a3k",
  "kind": "thread",
  "origin": "https://featherandwire.dev/blyg/",
  "page": "https://featherandwire.dev/articles/building-this-site/",
  "author": {
    "name": "Christopher Chalcraft",
    "url": "https://featherandwire.dev/"
  },
  "created": "2026-09-30T00:00:00Z",
  "updated": "2026-09-30T00:00:00Z",
  "version": 1,
  "content_md": "# How this site is built\n\nI rebuilt this site from scratch with three goals: it should be **simple**,\n**fast**, and **easy to maintain** — including by AI agents working from my\nnotes. Here's the shape of it.\n\n## Content is just Markdown\n\nEvery article is a single Markdown file in `src/content/articles/`. The\nfilename is the URL slug, and a small block of frontmatter carries the\nmetadata:\n\n```yaml\n---\ntitle: How this site is built\ndescription: A short summary used in listings and meta tags.\npubDate: 2026-09-30\ntags: [meta, astro, web]\ndraft: false\n---\n```\n\n[Astro content collections](https://docs.astro.build/en/guides/content-collections/)\nvalidate that frontmatter against a schema at build time, so a typo in a date\nor a missing field fails loudly instead of shipping broken.\n\n## No CSS framework\n\nThe styling is hand-written CSS with a small set of design tokens — colors, a\ntype scale, spacing — defined once as custom properties. Light and dark themes\nare the same tokens with different values. There's no build step to understand\nand nothing to purge.\n\n## Deployed on Cloudflare Pages\n\n`astro build` emits a fully static site to `dist/`, which Cloudflare Pages\nserves from its edge for free. A push to the main branch triggers a rebuild.\n\n## Built to be extended by agents\n\nAdding a post is: drop a Markdown file in one folder, fill in the frontmatter,\ndone. That's deliberate — I keep working notes elsewhere and let an agent turn\nthem into drafts here, following the conventions documented in\n`CONTRIBUTING.md` and the behaviors under `.agents/`.\n",
  "content_html": "<h1>How this site is built</h1>\n<p>I rebuilt this site from scratch with three goals: it should be <strong>simple</strong>,\n<strong>fast</strong>, and <strong>easy to maintain</strong> — including by AI agents working from my\nnotes. Here’s the shape of it.</p>\n<h2 id=\"content-is-just-markdown\">Content is just Markdown</h2>\n<p>Every article is a single Markdown file in <code>src/content/articles/</code>. The\nfilename is the URL slug, and a small block of frontmatter carries the\nmetadata:</p>\n<pre class=\"astro-code astro-code-themes gruvbox-dark-hard gruvbox-dark-medium\" style=\"background-color:#1d2021;--shiki-dark-bg:#282828;color:#ebdbb2;--shiki-dark:#ebdbb2; overflow-x: auto; white-space: pre-wrap; word-wrap: break-word;\" tabindex=\"0\" data-language=\"yaml\"><code><span class=\"line\"><span style=\"color:#EBDBB2;--shiki-dark:#EBDBB2\">---</span></span>\n<span class=\"line\"><span style=\"color:#8EC07C;--shiki-dark:#8EC07C\">title</span><span style=\"color:#A89984;--shiki-dark:#A89984\">:</span><span style=\"color:#B8BB26;--shiki-dark:#B8BB26\"> How this site is built</span></span>\n<span class=\"line\"><span style=\"color:#8EC07C;--shiki-dark:#8EC07C\">description</span><span style=\"color:#A89984;--shiki-dark:#A89984\">:</span><span style=\"color:#B8BB26;--shiki-dark:#B8BB26\"> A short summary used in listings and meta tags.</span></span>\n<span class=\"line\"><span style=\"color:#8EC07C;--shiki-dark:#8EC07C\">pubDate</span><span style=\"color:#A89984;--shiki-dark:#A89984\">:</span><span style=\"color:#D3869B;--shiki-dark:#D3869B\"> 2026-09-30</span></span>\n<span class=\"line\"><span style=\"color:#8EC07C;--shiki-dark:#8EC07C\">tags</span><span style=\"color:#A89984;--shiki-dark:#A89984\">:</span><span style=\"color:#A89984;--shiki-dark:#A89984\"> [</span><span style=\"color:#B8BB26;--shiki-dark:#B8BB26\">meta</span><span style=\"color:#A89984;--shiki-dark:#A89984\">,</span><span style=\"color:#B8BB26;--shiki-dark:#B8BB26\"> astro</span><span style=\"color:#A89984;--shiki-dark:#A89984\">,</span><span style=\"color:#B8BB26;--shiki-dark:#B8BB26\"> web</span><span style=\"color:#A89984;--shiki-dark:#A89984\">]</span></span>\n<span class=\"line\"><span style=\"color:#8EC07C;--shiki-dark:#8EC07C\">draft</span><span style=\"color:#A89984;--shiki-dark:#A89984\">:</span><span style=\"color:#D3869B;--shiki-dark:#D3869B\"> false</span></span>\n<span class=\"line\"><span style=\"color:#EBDBB2;--shiki-dark:#EBDBB2\">---</span></span></code></pre>\n<p><a href=\"https://docs.astro.build/en/guides/content-collections/\">Astro content collections</a>\nvalidate that frontmatter against a schema at build time, so a typo in a date\nor a missing field fails loudly instead of shipping broken.</p>\n<h2 id=\"no-css-framework\">No CSS framework</h2>\n<p>The styling is hand-written CSS with a small set of design tokens — colors, a\ntype scale, spacing — defined once as custom properties. Light and dark themes\nare the same tokens with different values. There’s no build step to understand\nand nothing to purge.</p>\n<h2 id=\"deployed-on-cloudflare-pages\">Deployed on Cloudflare Pages</h2>\n<p><code>astro build</code> emits a fully static site to <code>dist/</code>, which Cloudflare Pages\nserves from its edge for free. A push to the main branch triggers a rebuild.</p>\n<h2 id=\"built-to-be-extended-by-agents\">Built to be extended by agents</h2>\n<p>Adding a post is: drop a Markdown file in one folder, fill in the frontmatter,\ndone. That’s deliberate — I keep working notes elsewhere and let an agent turn\nthem into drafts here, following the conventions documented in\n<code>CONTRIBUTING.md</code> and the behaviors under <code>.agents/</code>.</p>\n",
  "content_hash": "sha256:62d20e8dd9a58e2cc951c5ce827282c2258446644886e3ce94b09a4aef489424",
  "media": [],
  "transclusions": [],
  "changelog": [
    {
      "version": 1,
      "at": "2026-09-30T00:00:00Z",
      "note": null
    }
  ]
}
