# Blogger Toolbelt Patterns ## Draft Lifecycle ```sh blog-new "Title" content/drafts blog-draft-index blog_reading_time content/drafts/*.md blog_tk_context content/drafts/*.md ``` ## Link Work ```sh blog-links content/**/*.md | sort -u blog_domain_counts content/**/*.md blog_archive_queue archive-queue.txt content/**/*.md blog_archive_all archive-queue.txt blog-linkrot content/**/*.md | tee linkrot.txt ``` ## Metadata Hygiene ```sh BLOG_REQUIRED_FIELDS="title date status tags" blog-frontmatter btitles btags bdates ``` ## Publishing Checks ```sh blog-build-check blog-rss-check public/feed.xml blog-stats git diff --word-diff=color -- '*.md' '*.mdx' blog-future-dates ``` ## AI Review ```sh llm --system 'Review this blog post for weak claims, missing evidence, and structure problems. Return concrete fixes.' --save blog-review cat content/drafts/post.md | llm -t blog-review blog-ai-review content/drafts/post.md files-to-prompt content -e md -e mdx --markdown | llm -s 'Find stale claims and missing sources' ``` ## Screenshots ```sh blog-screenshot http://127.0.0.1:8000/ screenshots/local-home.png shot-scraper multi shots.yml ``` ## Gwern-Inspired Archive Queue ```sh find content notes -type f \( -name '*.md' -o -name '*.mdx' \) -print0 | xargs -0 blog-links | cut -f1 | sort -u > archive-queue.txt while read -r url; do blog-archive-url "$url" done < archive-queue.txt ``` ## Database Publishing ```sh sqlite-utils insert blog.db posts posts.json --pk id datasette blog.db datasette publish cloudrun blog.db -m metadata.json ``` ## Scheduled Maintenance ```sh python build_readme.py git add -A git commit -m "Updated content" || true blog-linkrot content/**/*.md | tee linkrot.txt blog-screenshot https://example.com screenshots/home.png ``` ## Org And Literate Pipelines ```sh python build.py ninja emacs --batch -l publish.el -f org-publish-all make tangle-build ``` ## Wikilink Preprocessing ```sh rg -n '\[\[[^]]+\]\]' content notes ./bin/convert_wikilinks_to_refs.sh ./bin/add_hugo_frontmatter.py ``` ## Visual Explanations ```sh python -m cProfile -o output.prof script.py flameprof output.prof --format log > output.folded flamegraph.pl output.folded > profile.svg ``` ## Search Surfaces ```sh blog_find 'claim|citation needed|TODO' blog_titles | fzf blog-links | fzf blog_domain_counts | sed -n '1,50p' ```