{
  "version": "https://jsonfeed.org/version/1.1",
  "title": "cairn.pub",
  "description": "cairn's own site: the Waymark template wearing the cairn theme, managed by cairn's own admin.",
  "home_page_url": "https://cairn.pub",
  "feed_url": "https://cairn.pub/feed.json",
  "items": [
    {
      "id": "https://cairn.pub/posts/how-this-site-works",
      "url": "https://cairn.pub/posts/how-this-site-works",
      "title": "How this site works",
      "summary": "A tour of cairn.pub as a deployment: one Worker, markdown in git, a live admin.",
      "date_published": "2026-07-18T00:00:00.000Z",
      "content_html": "<p>This site is the thing it describes, so it makes a decent tour of what a cairn deployment actually is.</p>\n<p>The site itself is a Waymark scaffold in a single repository, the same starting point the tutorial produces, consuming <code>@glw907/cairn-cms</code> from npm. The content model is the stock set, deliberately unmodified: Posts (this page is one), Pages (the home page is one), and the embedded-only Fragments they can share. What’s composed rather than stock is the routing. The home page’s route pulls a Pages entry and the latest posts through the same delivery exports any site gets, and the blog receives the template’s archive; the point of the arrangement is that a site can rearrange cairn’s pieces without touching its internals.</p>\n<p>The whole thing, public pages and admin both, deploys as one Cloudflare Worker. Beside it sit three stores: a D1 database for the editor list and sign-in sessions, an R2 bucket for media bytes, and the git repository, which holds every word. The sign-in email goes out through Cloudflare’s Email Sending. There is no server anywhere, and no content database; the markdown files are the content. One screen in the admin, Signups, isn’t cairn’s at all: it’s a custom screen mounted through the extending seam, reading its own separate database, there to show where a real site’s domain features go.</p>\n<p>The editor at <a href=\"/admin\">/admin</a> is not a demo. Posts like this one are written in it, saved as private drafts, and published from it, and each publish becomes a commit in the site’s repository through a GitHub App, authored in the writer’s name. A deploy then carries it live. When something needs investigating, the engine’s structured logs name each auth and publish event, queryable from the Cloudflare dashboard.</p>\n<p>The chrome you’re reading, serif headings and warm paper, is the cairn theme over neutral Waymark; <a href=\"/posts/waymark-and-the-cairn-theme\">the previous post</a> tells that story. And the <a href=\"/help\">/help</a> pages serve more than this site: they’re the standing editor orientation a cairn site’s developer can point their admin’s support contact at.</p>\n<p>That’s the deployment. A more precise version of everything above lives in <a href=\"/docs\">the docs</a>, and the tutorial that builds one from an empty directory is <a href=\"https://github.com/glw907/cairn-cms/blob/main/docs/tutorial/build-your-first-cairn-site.md\">Build your first cairn site</a>.</p>",
      "tags": [
        "engineering"
      ]
    },
    {
      "id": "https://cairn.pub/posts/waymark-and-the-cairn-theme",
      "url": "https://cairn.pub/posts/waymark-and-the-cairn-theme",
      "title": "Waymark and the cairn theme",
      "summary": "Why cairn’s starter template went neutral, and where its identity moved.",
      "date_published": "2026-07-17T00:00:00.000Z",
      "content_html": "<p>Waymark didn’t start out neutral. The first version of cairn’s starter template shipped wearing the project’s own identity: a display serif called <a href=\"https://fonts.google.com/specimen/Fraunces\">Fraunces</a>, paper with a warm tint, a handful of typographic gestures in the prose. It looked good, and that was the problem. A starter template is the beginning of somebody else’s site, and a template with a strong identity gets adopted whole; six months later a dozen sites all look like the demo, because replacing the look is work their owners never got around to.</p>\n<p>So the template was neutralized on purpose. What ships now is a humanist sans on plain paper, complete but quiet: the layout, the archive, the components, the reading surface, all present, none of them insisting on a personality. The identity didn’t disappear, though. It moved into one file.</p>\n<p>That file is <a href=\"https://github.com/glw907/cairn-cms/blob/main/examples/cairn-theme/cairn.css\">the cairn theme</a>, and this site wears it. Applying it is an import line:</p>\n<pre class=\"shiki cairn-roles\" tabindex=\"0\"><code><span class=\"line\"><span class=\"cairn-tok-punct\">@</span><span class=\"cairn-tok-keyword\">import</span><span class=\"cairn-tok-punct\"> '</span><span class=\"cairn-tok-string\">./theme.css</span><span class=\"cairn-tok-punct\">'</span><span class=\"cairn-tok-punct\">;</span></span>\n<span class=\"line\"><span class=\"cairn-tok-punct\">@</span><span class=\"cairn-tok-keyword\">import</span><span class=\"cairn-tok-punct\"> '</span><span class=\"cairn-tok-string\">./cairn.css</span><span class=\"cairn-tok-punct\">'</span><span class=\"cairn-tok-punct\">;</span></span>\n<span class=\"line\"></span></code></pre>\n<p>The serif headings, the warm paper, the way pull quotes sit in the text: all of it comes from that one stylesheet. Delete the line and this becomes the stock template again, unchanged everywhere else.</p>\n<figure class=\"cairn-place-wide\"><img src=\"/media/waymark-neutral-vs-cairn-theme.34e3da03558a57e3.png\" alt=\"The neutral Waymark home beside the same page wearing the cairn theme.\" width=\"2562\" height=\"802\"><figcaption>The same Waymark site, shown neutral and with the cairn theme’s one added CSS file.</figcaption></figure>\n<p>The arrangement is the restyle story told as a working example rather than a promise. Waymark’s surfaces read every color and size from tokens in one <code>theme.css</code>, so a re-skin edits tokens instead of hunting through components, and in the template’s own CI two gates hold the seam: one fails the build if a literal color sneaks onto the public surface, and one proves every shipped pairing clears the WCAG AA contrast floor, in both sRGB and display-P3.</p>\n<p>Your site will not look like this one unless you want it to. Start at <a href=\"/waymark\">the Waymark page</a>, see the neutral template, and read <a href=\"https://github.com/glw907/cairn-cms/blob/main/docs/guides/make-waymark-your-own.md\">the restyle guide</a> with the cairn theme open beside it as the worked example.</p>",
      "tags": [
        "design"
      ]
    }
  ]
}