## Beeminder (2026-07-24) A commitment device: set a numeric goal, draw a yellow brick road toward it on a graph, and pay real money if you fall off. The two goals riding on this repo, one on commit count and one on cumulative word count via `/urlminder.txt`, are both Beeminder goals, and both exist because [[gitminder|the old commit tracker]] stopped working and something had to replace it. The word-count goal is specifically an Odometer-type goal, via [[urlminder|URLminder]]: it reads a running total off a public URL rather than a daily delta, which is why the feed can only ever grow, never shrink, no matter how many old [[values|entries]] get lightly edited later. See [[static-site-generators]] for the mechanics of how that feed gets built. It's not the first attempt at a word-count goal. The old [Draft](https://web.archive.org/web/20230104023309/https://draftin.com/) editor used to report daily word count automatically before it shut down, and [[bearminder]] was a since-abandoned Swift macOS app meant to send Bear's word count the same way. URLminder against a static feed turned out to need neither a dedicated app nor a service that could disappear. ## Colour Theory (2026-07-24) Gruvbox's rainbow accent set doubles as the symbol taxonomy's colour legend, see [[values]] for the entry that started this. One per [[symbol-taxonomy|entry type]]: red for quotes, yellow for bookmarks, green for notes, blue for diary entries, purple for snippets, and the muted gray reserved for stubs like [[bearminder]]. Light and dark mode swap the whole palette via `prefers-color-scheme`, so nothing in [[css-hover-footnote|the footnote CSS]] needs a manual override. Everything reads off `--fg` / `--bg` / `--panel` / `--border`. [values]: values "values" [symbol-taxonomy|entry type]: symbol-taxonomy "Symbol Taxonomy" [bearminder]: bearminder "bearminder" [css-hover-footnote|the footnote CSS]: css-hover-footnote "CSS Hover Footnote" ## Commonplace Book (2026-07-24) Long before "[[digital-garden|digital garden]]" was a term, readers kept commonplace books: bound notebooks of quotations, observations, and excerpts copied out by hand, organized under personal headings so they could be found again later. John Locke published an indexing method for his own in 1706. This site attemps to be a descendant of that practice, with [[stub-pages|stub pages]] and search standing in for a hand-written index. [digital-garden|digital garden]: digital-garden "Digital Garden" [stub-pages|stub pages]: stub-pages "Stub Pages" ## CSS Hover Footnote (2026-07-24) The trick behind [[values|the footnotes on this site]] and the hover previews in notes like [[colour-theory]] is the same adjacent-hover pattern, just with different content in the hidden span. It's [AetherAnne's pattern](https://aetheranne.ca/blog/tutorials/how-to-display-footnotes-on-hover-without-javascript/) for footnotes without JavaScript, wired through `markdown-it`'s renderer overrides here instead of hand-written HTML: ```css .fn-wrapper { position: relative; display: inline-block; } .fn-content { display: none; position: absolute; bottom: 100%; left: 0; max-width: 30ch; } .fn-wrapper:hover .fn-content, .fn-wrapper:focus-within .fn-content { display: block; } ``` The reference *and* the hidden content are wrapped in one `position: relative` span. `.fn-content` needs a positioned ancestor to anchor `position: absolute` against, and same-level siblings don't count. See [[symbol-taxonomy]] for other design patterns, and [[transclusion]] for the other place this hover pattern is reused. [values|the footnotes on this site]: values "values" [colour-theory]: colour-theory "colour-theory" [symbol-taxonomy]: symbol-taxonomy "Symbol Taxonomy" [transclusion]: transclusion "Transclusion" ## Digital Garden (2026-07-24) A digital garden is a website that grows in public instead of publishing in the finished, dated-post format of a blog. Entries get revised in place, start rough and get filled in over time, and are organized by association rather than chronology. This site is one, in the same family as the older [[commonplace-book|commonplace book]] tradition and the note-linking discipline of a [[zettelkasten]]. Gardens link inward to their own other entries. Every [[bearminder|dead link]] is an invitation to plant something new. See [[static-site-generators]] for why 11ty specifically, and [[stub-pages]] for the mechanism that keeps the garden's edges from ever going dead. [commonplace-book|commonplace book]: commonplace-book "Commonplace Book" [zettelkasten]: zettelkasten "Zettelkasten" [bearminder|dead link]: bearminder "bearminder" [static-site-generators]: static-site-generators "Static Site Generators" [stub-pages]: stub-pages "Stub Pages" ## Eleventy Interlinker (2026-07-24) Obsidian-style wikilinks, backlinks, and embeds for Eleventy. Used for both dead-link reporting and stub-generation. The `resolvingFns` is why I use this instead of the lighter `eleventy-plugin-backlinks` alternative. It makes the hover-preview excerpts on wikilinks possible. The dead-link-to-[[stub-pages|stub]] pipeline is the other reason. See [[static-site-generators]] for why that works because the whole site rebuilds from scratch on every commit. [[foam]] also reads the same wikilinks in the editor, giving authoring a graph and backlinks panel before this plugin runs a build. [stub-pages|stub]: stub-pages "Stub Pages" [static-site-generators]: static-site-generators "Static Site Generators" [foam]: foam "Foam" ## First Commit (2026-07-24) Hello, world! This is my attempt of creating scaffolding for a digital garden. I'm cautiously optimistic. There are a handful of entries based on the nature of the site itself. For example, [[values]] links out, [[bearminder]] is currently a stub,[[colour-theory]] and [[symbol-taxonomy]] cross-reference each other, and this all uses 11ty plugins and markdown instead of databases. [values]: values "values" [colour-theory]: colour-theory "colour-theory" [symbol-taxonomy]: symbol-taxonomy "Symbol Taxonomy" [bearminder]: bearminder "bearminder" ## Foam (2026-07-24) Foam is a VSCode extension for markdown-based personal knowledge bases: wikilinks, backlinks panel, graph visualization, orphan and placeholder panels. Read from the same flat `src/notes/*.md` files this site already builds from. No server, no separate app, just an editor plugin that works alongside [[eleventy-interlinker]]. Foam is for authoring: link autocomplete, go-to-definition, a live graph while writing. The Eleventy build is for publishing: it turns dead links into [[stub-pages|stub]] page via `scripts/generate-stubs.mjs`, and what renders the hover-preview excerpts described in [[transclusion]]. Foam's own placeholder panel flags the dangling links for editing, but it doesn't write files. Workspace config lives in `.vscode/settings.json`: `foam.files.exclude` keeps `_site/`, `node_modules/`, and `src/inbox/` out of Foam's graph so it only ever sees the real note corpus, the same scope [[static-site-generators]] describes for the build itself. [eleventy-interlinker]: eleventy-interlinker "Eleventy Interlinker" [stub-pages|stub]: stub-pages "Stub Pages" [transclusion]: transclusion "Transclusion" [static-site-generators]: static-site-generators "Static Site Generators" ## Gitminder (2026-07-24) My old `/github` [[beeminder|Beeminder]] goal tracked commits across every repository on GitHub, until GitHub's API changed to only allow tracking one repository at a time. Most active projects had already moved to GitLab and Source.tube anyway. The repository of this site acts as the replacement for that. Tracking the commits, but also tracking the word count with [[urlminder|URLminder]]. This note started life as a dead [[values|link]] and was itself generated as a [[stub-pages|stub]] before being filled in. [beeminder|Beeminder]: beeminder "Beeminder" [values|link]: values "values" [stub-pages|stub]: stub-pages "Stub Pages" [urlminder|URLminder]: urlminder "URLminder" ## On Writing Daily (2026-07-24) "Inspiration is for amateurs. The rest of us just show up and get to work. If you wait around for the clouds to part and a bolt of lightning to strike you in the brain, you are not going to make an awful lot of work. All the best ideas come out of the process; they come out of the work itself." —Chuck Close. See [[values]] for how this quote turned into [[first-commit]]. [values]: values "values" [first-commit]: first-commit "First Commit" ## Static Site Generators (2026-07-24) A static site generator takes markdown and templates and compiles them into plain HTML files with no server-side code and no database. For a [[digital-garden|digital garden]] that's meant to be worked on continuously, the boring reliability is a great asset. I use 11ty (Eleventy) instead of Hugo, Jekyll, or a hand-rolled build script. The [[eleventy-interlinker]] is great for wiki-links plus backlinks are most of what this site needed to not be a plain blog. The frontmatter schema, the `type`-as-tag grouping entries on the homepage, and the [[symbol-taxonomy|symbol system]] all lean on 11ty's data cascade doing the boring parts. Nothing is dynamic. Search has to be either client-side JS or an external index. The [[stub-pages|stub]] pipeline means a link doesn't resolve until its stub file exists on disk, so `npm run build` has to run Eleventy twice with the stub script in between, first pass to write the dead-link report, second pass once those files exist. A little inelegant but not worth a custom plugin until the site is large enough for that cost to matter. [digital-garden|digital garden]: digital-garden "Digital Garden" [eleventy-interlinker]: eleventy-interlinker "Eleventy Interlinker" [symbol-taxonomy|symbol system]: symbol-taxonomy "Symbol Taxonomy" [stub-pages|stub]: stub-pages "Stub Pages" ## Stub Pages (2026-07-24) A problem that wiki-linked [[digital-garden|digital garden]] run into is figuring out what happens when you reference a note that doesn't exist on disk yet. A traditional website would 404. This site turns it into a stub instead. A stub is a minimal file with `type: stub` and no body, so the link resolves, the target page exists, and it immediately starts collecting backlinks even though nothing has been written yet. The dead-link scanner reads raw markdown source, not rendered HTML, so it doesn't know the difference between a real wikilink and a double-bracket example inside a code span for illustration. A stub is a to-do list item as much as it is a page. The next daily entry could just as easily be filling one in as starting something new. [digital-garden|digital garden]: digital-garden "Digital Garden" ## Symbol Taxonomy (2026-07-24) I'm using single-character symbols, one per `type` as a quick visual cue: | type | symbol | example | | -------- | ------ | ------------------------ | | quote | > | [[on-writing-daily]] | | bookmark | ⚹ | [[eleventy-interlinker]] | | note | ● | [[values]] | | diary | 🜁 | [[first-commit]] | | snippet | 🜃 | [[css-hover-footnote]] | | stub | ☉ | [[bearminder]] | I'm using plain Unicode over emoji because they're stylable with CSS, consistent across OS and browser, and readable in a plain-text RSS feed or terminal. A fast, simple alternative to a heavy SVG icon set. You can read more about this idea [here](https://brennan.day/blogging-with-magic-unicode-simple-doesnt-have-to-mean-boring/).The color part of the system is in [[colour-theory]]. Placeholder, not final: the specific symbols above are a first draft. [on-writing-daily]: on-writing-daily "On Writing Daily" [eleventy-interlinker]: eleventy-interlinker "Eleventy Interlinker" [values]: values "values" [first-commit]: first-commit "First Commit" [css-hover-footnote]: css-hover-footnote "CSS Hover Footnote" [bearminder]: bearminder "bearminder" [colour-theory]: colour-theory "colour-theory" ## Transclusion (2026-07-24) Transclusion is including a document's content inside another by reference, rather than by copy, so the excerpt is from the source. Don't repeat yourself! Ted Nelson coined the term decades before wiki software made it common; [Gwern.net](https://www.gwern.net/) is the best-known modern example, popping up a preview of practically any link on hover. For this site, at build time every wikilink gets a hidden sibling `` holding the first forty or so words of its target note, styled with the same adjacent-hover trick as [[css-hover-footnote|the footnote CSS]]. Hover any link in this paragraph, like [[colour-theory]] or [[symbol-taxonomy]], and the preview should appear without a single line of client-side JavaScript. CSS-only means no images, no multi-paragraph excerpts, and the excerpt text is a naive strip of markdown syntax rather than a proper render, so things like tables show up a little mangled. Good enough. [css-hover-footnote|the footnote CSS]: css-hover-footnote "CSS Hover Footnote" [colour-theory]: colour-theory "colour-theory" [symbol-taxonomy]: symbol-taxonomy "Symbol Taxonomy" ## URLminder (2026-07-24) A [[beeminder|Beeminder]] integration that counts the words at any publicly accessible URL, normally used with Google Docs. Raw HTML inflates the count, but it's accurate with plain text, which is the reason `/urlminder.txt` exists as a route on this site, rather than pointing URLminder at a rendered HTML page. The goal it drives is an [Odometer](https://help.beeminder.com/article/68-odometer-goals) type: the number can only go up, never down, matching the fact that `/urlminder.txt` only ever grows as [[values|notes]] get written. [beeminder|Beeminder]: beeminder "Beeminder" [values|notes]: values "values" ## Values (2026-07-24) The first entry. This site exists for [[gitminder]] as the daily-commit driver for [[beeminder|two Beeminder goals]], and it leans on wiki-links ,like [[colour-theory]] to connect ideas as they accumulate, in the tradition of a [[digital-garden|digital garden]] more than a blog.[^1] The design is deliberately boring. A flat [[symbol-taxonomy|symbol taxonomy]] instead of category folders, [[css-hover-footnote|pure-CSS footnotes]] instead of a JS dependency, and a stub for every dead link instead of a 404. Read [[eleventy-interlinker]] for the plugin doing most of the actual work, and [[on-writing-daily]] for an example quote.[^2] None of this matters if the habit doesn't survive contact with a busy week, see [[first-commit]] for day one. [^1]: Footnotes are pure CSS here: hover the reference to preview it inline, or jump to the bottom like normal. [^2]: A second footnote, to confirm multiple footnotes on the same page don't collide. Each hidden `.fn-content` span is keyed by its own footnote id. [gitminder]: gitminder "Gitminder" [beeminder|two Beeminder goals]: beeminder "Beeminder" [colour-theory]: colour-theory "colour-theory" [digital-garden|digital garden]: digital-garden "Digital Garden" [symbol-taxonomy|symbol taxonomy]: symbol-taxonomy "Symbol Taxonomy" [css-hover-footnote|pure-CSS footnotes]: css-hover-footnote "CSS Hover Footnote" [eleventy-interlinker]: eleventy-interlinker "Eleventy Interlinker" [on-writing-daily]: on-writing-daily "On Writing Daily" [first-commit]: first-commit "First Commit" ## Zettelkasten (2026-07-24) Niklas Luhmann kept a slip-box of roughly 90,000 index cards over his working life, each one a single idea, each one cross-referenced to others by hand-written note numbers. He credited it, half-jokingly, with most of his output as a sociologist. The idea is connection between notes is where new thinking actually happens. Wiki-links are the same idea with the cross-referencing done automatically. [[values]] pointing at [[colour-theory]] pointing at [[symbol-taxonomy]] is a slip-box relationship; the [[eleventy-interlinker]] resolves the reference and builds the backlink at compile time, instead of manually by hand. Luhmann's cards were atomic, with one idea each. Entries here are looser, closer to a [[commonplace-book|commonplace book]] than a true zettelkasten. [values]: values "values" [colour-theory]: colour-theory "colour-theory" [symbol-taxonomy]: symbol-taxonomy "Symbol Taxonomy" [eleventy-interlinker]: eleventy-interlinker "Eleventy Interlinker" [commonplace-book|commonplace book]: commonplace-book "Commonplace Book" ## John Darnielle on Revision (2026-07-25) "When you write, you are in some way correcting on your earlier attempts. I hope for myself that that is true. Because I don't want to do the same thing twice. If I'm doing something in the same vein, I want it to be better than the previous time. It says that 'neither impulse can win. They can only conspire to push the style forward.' I think that is true. If you land on a side, you become still. You become static. It's funny. Everybody wants franchises, right? People want to read books in series. And I have very little interest in this. That's not a comprehensible aesthetic urge to me, the desire to hear the ninth story, see the ninth movie." —John Darnielle of The Mountain Goats ## One Movie in a Lifetime (2026-07-25) "A director makes only one movie in his life. Then he breaks it into pieces and makes it again." —Jean Renoir (the filmmaker, son of the painter) ## Stories Are Inevitable (2026-07-25) "Stories are inevitable, if they're good, but they're not predictable." —Andrew Stanton, 2012 TED talk, "The Clues to a Great Story"