~kris/dots

srice

srice/doc/bloggers/resources/research.md -rw-r--r-- 15.3 KiB
e98f3b03 — Kris Yotam chore: sync local state after restore (push updates, no pull) a month ago

#Blogger Automation Research

This is a source survey for bloggers whose sites behave like personal infrastructure: custom build systems, script libraries, link preservation, publishing checks, AI helpers, and command-line workflows.

#Gwern.net

Sources:

Patterns worth copying:

  • A sourced personal shell library for site work, not just a Makefile. Gwern's bash.sh has path conversion, colored check wrappers, Cloudflare cache expiry, PDF surgery, image composition, search helpers, rename helpers, tag helpers, and upload aliases.
  • A full sync script that behaves like a release engineer: dependency checks, disk-space checks, cleanup, process collision checks, priority lowering, infrastructure pulls, global text rewrites, compilation, metadata checks, backlink generation, sitemap work, link checking, and upload.
  • A rich publishing helper. Gwern's upload.sh lowercases filenames, normalizes extensions, converts media, OCR/compresses PDFs, strips metadata, handles name collisions, rsyncs, previews, adds small files to git, and keeps large files out of git.
  • Preemptive link archiving. LinkArchive.hs and linkArchive.sh map URL to stable local path by domain plus SHA1, use SingleFile for HTML, treat PDFs specially, OCR/compress PDFs, preview snapshots, and split huge single-file archives.
  • Link extraction as an archiving queue: find . -name "*.md" -type f -print0 | xargs -0 linkExtractor | filter-urls >> ~/.urls.txt.
  • Style as code: global rewrites for URLs, spelling, citation conventions, typography, link cruft, and metadata normalization.
  • Golden regression pages. Download known stress-test pages, strip cache-busting query strings, and diff rendered HTML against snapshots.
  • Time-gated checks. A helper like everyNDays 7 && expensive-audit keeps the default build fast.

Reusable commands:

blog-links content/**/*.md | sort -u > archive-queue.txt
while read -r url; do blog-archive-url "$url"; done < archive-queue.txt
blog-frontmatter
blog-linkrot content/**/*.md
blog-backlinks > backlinks.md

#Simon Willison

Sources:

Patterns worth copying:

  • Treat the blog as an application with a database. Simon's site is Django backed by PostgreSQL, exported to JSON backups, then published through Datasette surfaces.
  • Publish structured data as a first-class artifact. Datasette can turn SQLite files into searchable, filterable public websites and APIs.
  • Keep many feeds: all content, long posts, links, quotations, per-tag feeds, and series feeds.
  • Use AI from the command line through reusable templates and fragments, with prompts saved as named tools rather than pasted one-offs.
  • Publish small web tools with source links, commit history, and transcripts where useful.
  • Generated sections with stable markers. Simon's GitHub profile README bot replaces marked chunks from feeds, GraphQL, and Datasette JSON, then commits only when content changes.
  • Screenshot automation. shot-scraper multi shots.yml plus GitHub Actions can archive visual states after deploys.
  • Corpus-to-prompt helpers. files-to-prompt bundles selected files into clean model context.

Reusable commands:

llm --system 'Review this draft for weak claims and missing sources' --save blog-review
cat draft.md | llm -t blog-review
files-to-prompt content -e md -e mdx --markdown | llm -s 'Find stale claims and missing sources'
shot-scraper https://example.com/ -o screenshots/home.png
sqlite-utils insert blog.db posts posts.json --pk id
datasette publish cloudrun blog.db -m metadata.json

#Andy Matuschak

Sources:

Patterns worth copying:

  • Notes as public working memory, not just finished articles.
  • Atomic notes, dense links, and repeated revision beat chronological publication alone.
  • Treat note status as a first-class field. The 100x scripts should index drafts, flags, and backlinks rather than assuming everything is a finished post.
  • Idempotent generated backlinks for [[wiki links]]: note-link-janitor path/to/notes.
  • Notes can compile into interactive artifacts. Orbit's note-sync pattern treats Markdown prompts as source material for spaced review.

Reusable commands:

blog-draft-index
blog-backlinks > backlinks.md
blog_find 'evergreen|atomic|status'

#Maggie Appleton

Sources:

Patterns worth copying:

  • Digital garden maturity states. Drafts can be marked as seed, budding, evergreen, archived, or private instead of a binary published/draft flag.
  • Visual and conceptual metadata matter. Garden pages use state, topic, and relationship as interface primitives.
  • Keep a public list of other gardens as research fodder.
  • Content-derived garden indexes. Maggie's V3 scripts generate links, topics, webmentions, and small "smidgeon" drafts before Astro preview/build.

Reusable commands:

rg -n 'status:|growth:|stage:' content notes garden
blog-frontmatter
blog-draft-index

#Tom MacWright

Sources:

Patterns worth copying:

  • Simple, fast, personal site with a clear stance on writing and tooling.
  • Public archive pages and "recently" posts as a low-friction cadence.
  • Explicit disclosure about AI usage. If AI is part of the writing pipeline, make that policy visible and use scripts for review, not silent authorship.
  • Linkrot repair as PRs, not silent rewrites. notfoundbot can upgrade HTTP to HTTPS, find Wayback captures, and propose small diffs.
  • Markdown AST plus MagicString minimal URL rewrites is the right shape for future citation/link tools.
  • Tiny personal desk tools around existing CLIs, for example gh search prs ... | jq ..., translate well to draft queues and publish checklists.

Reusable commands:

blog-new "Recently"
blog-stats
blog-ai-review draft.md

#Robin Sloan

Sources:

Patterns worth copying:

  • AI revision loops should be auditable. Sloan's script preserves the first plan and every revision file, making each model pass inspectable.
  • Separate "plan the revision" from "apply the revision" so model edits can be evaluated rather than blindly accepted.

Reusable commands:

blog-ai-review draft.md > review.txt
cp draft.md draft.v1.md

#Derek Sivers

Sources:

Patterns worth copying:

  • Plain text as durable source of truth.
  • Site as personal database: articles, book notes, translations, now pages, project pages, and direct sales.
  • Terminal-first stack: Vim, PostgreSQL, Ruby/Go, Sinatra, OpenBSD, mutt, Beancount, sox, ffmpeg, mpv, mupdf, ssh.
  • Public code and public ideas as an operating principle.
  • Unusual architecture: Go servers route requests to PostgreSQL functions that generate HTML and headers. scripts/tap wraps pgTAP tests in rollback transactions.
  • Clear anti-AI disclosure: "Everything here is written by me, personally, not an AI."

Reusable commands:

blog-new "Now"
blog_words
blog_find 'plain text'

#Brendan Gregg

Sources:

Patterns worth copying:

  • Posts that ship with reusable diagnostic scripts become long-lived references.
  • Visualization generators are publishing tools: data in, SVG out, explanation around it.
  • Keep a script archive next to explanations so readers can reproduce the picture.
  • Keep intermediate folded/text artifacts because they are grep-able and reusable.
  • Test visualization scripts with fixture inputs, collapsed expected outputs, and SVG generation.

Reusable commands:

python -m cProfile -o output.prof script.py
flameprof output.prof --format log > output.folded
flamegraph.pl output.folded > profile.svg

#Org Mode Static-Site Builders

Sources:

Patterns worth copying:

  • A self-contained private source repo with bib, bin, blog, css, cv, html, img, lisp, and pages.
  • make plus Emacs batch mode as a static-site compiler.
  • Custom export backend, sitemap generator, CSS/JS minification, MathJax hosting, publication lists from BibTeX, and preprocessing/postprocessing passes.
  • Jethro Kuan generates build.ninja from build.py, then runs many Emacs batch Org exports in parallel before Hugo builds.
  • Rakhim's braindump pipeline is explicit: clean copy heading backlinks wikilinks frontmatter build publish.
  • Sacha Chua uses literate Emacs publishing: Make runs Emacs batch to tangle Sacha.org into Sacha.el, export HTML, and create backlinks from generated files to source sections.

Reusable commands:

make
emacs --batch -l lisp/build-site.el -f org-publish-all
blog-rss-check public/feed.xml

#Patrick McKenzie

Sources:

Patterns worth copying:

  • Publish narrow, production-adjacent gists when the main site code is private.
  • Export Markdown versions of posts for readability, LLM context, or archival use, with allowlisted frontmatter and per-post opt-outs.
  • Publish hashes for important public claims or documents.

#Dan Luu

Sources:

Patterns worth copying:

  • Performance posts should be reproducible: WebPageTest runs, screenshots, each intervention, each latency delta.
  • Minimal static-site maintenance is a scriptable discipline: remove unused JS, move blocking JS to the footer, combine/minify assets, remove webfonts, consider inline CSS for single-entry visits.
  • Maintain lightweight bibliographies as public gists.

#Julia Evans

Sources:

Patterns worth copying:

  • Keep a tiny post generator task, such as a Rake new_post, so filenames and frontmatter are never hand-typed.
  • Prefer durable static binaries for authoring tools when language environments become fragile.
  • Use single-command small frontend builds: esbuild script.js --bundle --minify --outfile=bundle.js.
  • Debug toolchain weirdness with system tools such as strace -e openat -f.

#Xe Iaso

Sources:

Patterns worth copying:

  • Document agent/developer entrypoints in AGENTS.md.
  • Future-dated content guard: block future dates unless the PR body contains an explicit "DO NOT MERGE until YYYY-MM-DD UTC" line.
  • Validate MDX tags with a small dedicated checker.
  • Keep diagrams as source plus output, for example .dot beside .svg.

Reusable commands:

blog-future-dates
BLOG_ALLOW_FUTURE_DATES=1 blog-future-dates

#Eli Bendersky

Sources:

Patterns worth copying:

  • Keep a separate code-for-blog repo organized by year and article.
  • Article directories should include runnable examples, Makefiles, tests, benchmarks, generated plots, and README notes.
  • For diagram-heavy or benchmark-heavy posts, publish generation scripts, not only final images.

#Buster Benson

Sources:

Patterns worth copying:

  • Treat a personal canon as a repo: beliefs, ideas, changelog, yearly review commits, and public feedback.
  • The "public accountable self" idea maps cleanly to versioned beliefs.md, ideas.md, and annual review indexes.

#Nikita Voloboev

Sources:

Patterns worth copying:

  • flow.toml as a task-runner control plane with commands for setup, dev, spec printing, deploy, and AI-backed commits.
  • Build CLIs to temporary directories, run them, clean up, and install short symlink aliases.
  • Generate prompt text from Markdown specs with a command like spec-print note.md --stdout --no-clipboard.

#Phil Eaton

Sources:

Patterns worth copying:

  • A one-file Go static-site compiler is enough for many personal sites.
  • Emit per-section output, sitemap, and robots files without adopting a large framework.

#Linus Lee

Sources:

Patterns worth copying:

  • JSONL is a good microblog database.
  • make watch with entr and a tiny formatter target gives a fast authoring loop.
  • A small custom static-site generator can be maintained like any other personal tool.

#Cross-Cutting Ideas

  • new: create a dated draft with title, status, tags, canonical slug.
  • index: list drafts by age, word count, status, and TODO flags.
  • links: extract all external links with source file references.
  • archive: save every external link locally before publication.
  • title: fetch a page title and normalize it for citation notes.
  • frontmatter: fail fast on missing title/date/status/tags.
  • rss: validate Atom/RSS as part of the build.
  • linkrot: run a polite status checker on changed posts.
  • backlinks: generate a reverse-link report for notes.
  • stats: count posts, words, links, domains, and TODO flags.
  • ai-review: use a CLI LLM as a skeptical editor, never as silent author.
  • build-check: run whatever the repo provides: Makefile, npm, Hugo, Jekyll, frontmatter, RSS, stats.
  • future-dates: block scheduled posts unless explicitly allowed.
  • screenshot: archive visual states after deploys.
  • spec-print: turn Markdown notes/specs into reusable AI prompts.
  • wikilinks: convert [[Page]] and ![[file.png]] before build.
  • tangle-build: tangle literate source and publish generated HTML/PDF.
  • db-test: run database-backed site tests inside rollback transactions.