[{"content":"This one\u0026rsquo;s ai-slop, as advertised on the about page — I paired with Claude Code to build this site\u0026rsquo;s entire publishing pipeline, and it seemed only right to have it write up its own plumbing.\nHere\u0026rsquo;s what\u0026rsquo;s actually running under the hood.\nHugo, with PaperMod The site is a static Hugo build using the PaperMod theme, installed as a proper git submodule (not vendored — git submodule update --remote themes/PaperMod pulls upstream changes when I want them). Two sections get custom layouts instead of PaperMod\u0026rsquo;s defaults:\nTIL gets a topic-pill row up top (tag names with counts, sorted by frequency) above a compact chronological list — lifted straight from the look of til.simonwillison.net. Quotes skips the usual title/breadcrumbs/table-of-contents entirely and just renders a blockquote plus author, source link, and date. Everything else — Posts, the About page, tag pages, search — uses PaperMod\u0026rsquo;s stock layout.\nGitHub Actions, not a gh-pages branch Deploys go through GitHub\u0026rsquo;s \u0026ldquo;Pages via Actions\u0026rdquo; workflow: push to master, a GitHub Actions job builds the site with Hugo and deploys the result directly. No public/ folder committed to the repo, no gh-pages branch to keep in sync — public/ and resources/ are gitignored, and CI is the only thing that ever generates them.\nSearch PaperMod ships a client-side Fuse.js search that indexes every page on the site via a generated index.json. I didn\u0026rsquo;t have to configure anything for TIL or Quotes to show up in search results — it\u0026rsquo;s automatic for any section, present and future.\nWriting in Obsidian The actual writing happens in Obsidian, in a vault folder with one subfolder per content type:\ntil/ → short \u0026#34;today I learned\u0026#34; notes posts/ → long-form posts (like this one) quotes/ → quotes worth remembering plus a standalone About.md for the about page. Templater templates for each type stamp in the right frontmatter and file it into the right folder automatically, so starting a new TIL or quote is just \u0026ldquo;new note from template,\u0026rdquo; not \u0026ldquo;remember the exact frontmatter schema.\u0026rdquo;\nThe sync script A scripts/publish.sh script is the bridge between \u0026ldquo;notes in Obsidian\u0026rdquo; and \u0026ldquo;live on taude.xyz.\u0026rdquo; It rsyncs markdown out of each vault folder into the matching content/ folder in the Hugo repo, cleans up a few Obsidian-isms along the way — flattens wikilinks, converts ![embeds](embeds) to normal markdown image syntax, and fixes the quoted draft: \u0026quot;true\u0026quot; string Templater writes into a real YAML boolean, since a quoted string doesn\u0026rsquo;t reliably behave like a boolean to Hugo — then builds the site locally with hugo --minify so a broken template fails on my machine instead of in CI. If the build\u0026rsquo;s clean, it shows me what changed and asks before committing and pushing.\nIt\u0026rsquo;s one-way and additive on purpose: deleting a note from the vault doesn\u0026rsquo;t delete it from the published site. If something needs to come down, that\u0026rsquo;s a deliberate edit to content/, not a side effect of vault housekeeping.\nMaking it repeatable The last piece was turning all of that into a Claude Code skill — a markdown file describing the whole flow (where content lives, how to run the sync, how to verify the GitHub Actions deploy actually succeeded) that lives in this repo and is symlinked into ~/.claude/skills. So \u0026ldquo;publish my blog\u0026rdquo; is now a thing I can just say, in any session, and have it done the same way every time — instead of re-explaining the pipeline from scratch.\n","permalink":"http://taude.xyz/posts/the-tool-stack-behind-this-blog/","summary":"\u003cp\u003eThis one\u0026rsquo;s ai-slop, as advertised on the \u003ca href=\"/about/\"\u003eabout page\u003c/a\u003e — I paired\nwith Claude Code to build this site\u0026rsquo;s entire publishing pipeline, and it\nseemed only right to have it write up its own plumbing.\u003c/p\u003e\n\u003cp\u003eHere\u0026rsquo;s what\u0026rsquo;s actually running under the hood.\u003c/p\u003e\n\u003ch2 id=\"hugo-with-papermod\"\u003eHugo, with PaperMod\u003c/h2\u003e\n\u003cp\u003eThe site is a static \u003ca href=\"https://gohugo.io/\"\u003eHugo\u003c/a\u003e build using the\n\u003ca href=\"https://github.com/adityatelange/hugo-PaperMod\"\u003ePaperMod\u003c/a\u003e theme,\ninstalled as a proper git submodule (not vendored — \u003ccode\u003egit submodule update --remote themes/PaperMod\u003c/code\u003e pulls upstream changes when I want them). Two\nsections get custom layouts instead of PaperMod\u0026rsquo;s defaults:\u003c/p\u003e","title":"The tool stack behind this blog"},{"content":" You can\u0026rsquo;t trust code that you did not totally create yourself.\n","permalink":"http://taude.xyz/quotes/ken-thompson-on-trust/","summary":"\u003cblockquote\u003e\n\u003cp\u003eYou can\u0026rsquo;t trust code that you did not totally create yourself.\u003c/p\u003e\n\u003c/blockquote\u003e","title":""},{"content":"Wired up a script that rsyncs markdown out of my taude.xyz Blog vault folder straight into the Hugo repo\u0026rsquo;s content directory, then builds and pushes. Turns out Hugo slugifies filenames automatically, so Obsidian\u0026rsquo;s spaces-and-caps note titles turn into clean URLs for free.\n","permalink":"http://taude.xyz/til/publishing-from-obsidian/","summary":"\u003cp\u003eWired up a script that rsyncs markdown out of my taude.xyz Blog vault\nfolder straight into the Hugo repo\u0026rsquo;s content directory, then builds and\npushes. Turns out Hugo slugifies filenames automatically, so Obsidian\u0026rsquo;s\nspaces-and-caps note titles turn into clean URLs for free.\u003c/p\u003e","title":"Publishing from Obsidian"},{"content":"Short, quick notes on things I learn day to day go here.\n","permalink":"http://taude.xyz/til/hello-til/","summary":"\u003cp\u003eShort, quick notes on things I learn day to day go here.\u003c/p\u003e","title":"Hello, TIL"},{"content":"I can\u0026rsquo;t believe it\u0026rsquo;s been about 14 years since I was heavily involved in blogging and writing. I think the energy it takes being a manager as a natural introvert took away a lot of extracurricular activities like maintaining a blog, writing a lot of software after work, etc. But this new world of assisted-AI really changes that.\nI have so many ideas, that I\u0026rsquo;m now able to experiment with. I was always first a product builder and engineer second. With AI, I\u0026rsquo;m able to build tools, experiment, publish summaries and findings, and all that good mundane activity that AI simplifies, all while managing teams and all dealing with all the people/org/cross-team collaboration the job entails.\nI really want to get back to creating a part of the web that\u0026rsquo;s mine, not controlled by any social media algorithm.\nBe sure to checkout my About page.\n","permalink":"http://taude.xyz/posts/welcome-back-taude/","summary":"\u003cp\u003eI can\u0026rsquo;t believe it\u0026rsquo;s been about 14 years since I was heavily involved in blogging and writing.  I think the energy it takes being a manager as a \u003ca href=\"https://www.verywellmind.com/how-introverts-can-make-great-leaders-12013240\"\u003enatural introvert\u003c/a\u003e took away a lot of extracurricular activities like maintaining a blog, writing a lot of software after work, etc.  But this new world of assisted-AI really changes that.\u003c/p\u003e\n\u003cp\u003eI have so many ideas, that I\u0026rsquo;m now able to experiment with.  I was always first a product builder and engineer second. With AI, I\u0026rsquo;m able to build tools, experiment, publish summaries and findings, and all that good mundane activity that AI simplifies, all while managing teams and all dealing with all the people/org/cross-team collaboration the job entails.\u003c/p\u003e","title":"Welcome back, Taude."},{"content":"git worktree add ../hotfix main checks out a second working copy of the repo in a sibling directory, sharing the same .git history. Handy for jumping onto a hotfix without stashing whatever you\u0026rsquo;re mid-way through.\n","permalink":"http://taude.xyz/til/git-worktrees/","summary":"\u003cp\u003e\u003ccode\u003egit worktree add ../hotfix main\u003c/code\u003e checks out a second working copy of the\nrepo in a sibling directory, sharing the same \u003ccode\u003e.git\u003c/code\u003e history. Handy for\njumping onto a hotfix without stashing whatever you\u0026rsquo;re mid-way through.\u003c/p\u003e","title":"Using git worktrees to avoid stashing"},{"content":"Not new, but I\u0026rsquo;m light on content. I told my team about this trick the other day, and it\u0026rsquo;s one of my favorites: using duckdb to ingest various CSV exports from various sources and then using SQL to poke at that data.\nDetails from the docs over at: DuckDB CSV Import\nBut in short, I export various datasets from Snowflake pretty regularly, from different databases and datasets that aren\u0026rsquo;t naturally joined; I download various JSON reports from APIs and convert the Results to CSV. Then I bring them both into duckdb:\nCREATE TABLE tenantInformation AS SELECT * FROM read_csv(\u0026#39;global_tenan_list.csv\u0026#39;); CREAT TABLE regionalErrors AS SELECT * from read_csv(\u0026#39;regionMapping.csv\u0026#39;); Select * from ... Well, you can take it from here.\n","permalink":"http://taude.xyz/til/duckdb-and-native-csv-tables/","summary":"\u003cp\u003eNot new, but I\u0026rsquo;m light on content. I told my team about this trick the other day, and it\u0026rsquo;s one of my favorites: using duckdb to ingest various CSV exports from various sources and then using SQL to poke at that data.\u003c/p\u003e\n\u003cp\u003eDetails from the docs over at: \u003ca href=\"https://duckdb.org/docs/current/guides/file_formats/csv_import\"\u003eDuckDB CSV Import\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eBut in short, I export various datasets from Snowflake pretty regularly, from different databases and datasets that aren\u0026rsquo;t naturally joined; I download various JSON reports from APIs and convert the Results to CSV.  Then I bring them both into duckdb:\u003c/p\u003e","title":"DuckDB and Native CSV Tables"},{"content":"The hottest new programming language is English\n","permalink":"http://taude.xyz/quotes/karpathy-2023-01-24-151418/","summary":"\u003cp\u003eThe hottest new programming language is English\u003c/p\u003e","title":""},{"content":"Hi, I\u0026rsquo;m Taude (pronounced like Claude, but with a T). I\u0026rsquo;ve been spelling my name this way on the internet since the mid-90s, and is only coincidently rhyming with Claude in this new AI world.\nI formerly blogged at Simplified Chaos during the peak blogging era of rich Internet apps, wrote about my cycling shenanigans on double-hop photos, that eventually morphed into #20poundskull and covering cyclocross for various media outlets, and of course racing a lot of cyclocross, and traveling to Europe to make the cult classic, and greatest cyclocross movie of all time, Das Pro und The Rookie (would link that, but Vimeo changes their hosting policies and it\u0026rsquo;s currently locked down).\nOther then my former cycling glory 😁, I write about the things I\u0026rsquo;m learning, currently around AI (like everyone else), and software, management (can\u0026rsquo;t believe I\u0026rsquo;ve been managing at various org-levels for over 11 years now) plus whatever else sticks: quick TIL notes, longer posts, and short quotes worth remembering.\nAll my writing in \u0026ldquo;posts\u0026rdquo; will be my own, but there will be some ai-slop, here and there, and it\u0026rsquo;ll be labeled as such, since part of the purpose of this blog is to publish all the things I need to remember. A big inspiration for all this is Simon Willison\u0026rsquo;s blog.\nI really want to get back to creating a part of the web that\u0026rsquo;s mine, and not controlled by any social media algorithm. The new era of AI and agents, and easy automation is enabling this.\nThis site is built with Hugo and the PaperMod theme, and I write most of it in Obsidian before publishing it here. More details over at The tool stack behind this blog.\nYou can find me on GitHub, or reach me at taudep@gmail.com.\n","permalink":"http://taude.xyz/about/","summary":"\u003cp\u003eHi, I\u0026rsquo;m Taude (pronounced like Claude, but with a T).  I\u0026rsquo;ve been spelling my name this way on the internet since the mid-90s, and is only coincidently rhyming with Claude in this new AI world.\u003c/p\u003e\n\u003cp\u003eI formerly blogged at \u003ca href=\"https://simplifiedchaos.tumblr.com/\"\u003eSimplified Chaos\u003c/a\u003e during the peak blogging era of rich Internet apps, wrote about my \u003ca href=\"https://doublehop.blogspot.com/2009/09/more-bacons-2009-vermont-50-race-report.html\"\u003ecycling\u003c/a\u003e \u003ca href=\"https://doublehop.blogspot.com/2010/08/2010-d2r2-randonnee-ride-report.html\"\u003eshenanigans\u003c/a\u003e on \u003ca href=\"https://doublehop.blogspot.com/2010/12/20skulls-end-of-season-thoughts.html\"\u003edouble-hop photos\u003c/a\u003e, that eventually morphed into #20poundskull and \u003ca href=\"https://www.google.com/search?q=todd+Prekaski+cyclocross+site%3Ahttps%3A%2F%2Fvelo.outsideonline.com\u0026amp;sca_esv=8371335fcf8fca6e\u0026amp;biw=1355\u0026amp;bih=730\u0026amp;sxsrf=APpeQns7SvXxMjc5PbhOd8TADIAeNZ08tw%3A1784731507796\u0026amp;ei=c9dgaoCPMJDk5NoPn4y08Q0\u0026amp;ved=0ahUKEwjAlKr8wuaVAxUQMlkFHR8GLd4Q4dUDCBA\u0026amp;uact=5\u0026amp;oq=todd+Prekaski+cyclocross+site%3Ahttps%3A%2F%2Fvelo.outsideonline.com\u0026amp;gs_lp=Egxnd3Mtd2l6LXNlcnAiPHRvZGQgUHJla2Fza2kgY3ljbG9jcm9zcyBzaXRlOmh0dHBzOi8vdmVsby5vdXRzaWRlb25saW5lLmNvbUjmaVCcAViRZXABeAGQAQCYAWegAYMOqgEEMzAuM7gBA8gBAPgBAvgBAZgCAaACBMICChAAGEcY1gQYsAPCAg0QABiABBiKBRhDGLADwgIZEC4YgAQYigUYQxjHARjRAxjIAxiwA9gBAcICGRAuGEMYxwEY0QMYgAQYigUYyAMYsAPYAQGYAwCIBgGQBgu6BgQIARgIkgcBMaAHuxSyBwC4BwDCBwMyLTHIBwOACAE\u0026amp;sclient=gws-wiz-serp\"\u003ecovering cyclocross for various media\u003c/a\u003e outlets, and of course \u003ca href=\"https://www.tumblr.com/chandlerdelinks-blog/40699823530/20poundskull-every-race-has-a-back-row?source=share\"\u003eracing a lot of cyclocross\u003c/a\u003e, and traveling to Europe to make the cult classic, and greatest cyclocross movie of all time, Das Pro und The Rookie (would link that, but Vimeo changes their hosting policies and it\u0026rsquo;s currently locked down).\u003c/p\u003e","title":"About"},{"content":"Archivore Archivore is an attempt to automate information gathering from things I\u0026rsquo;ve read on the web. It\u0026rsquo;s goal is to search my browser history (usually that\u0026rsquo;s kept in a Sqlite database), and to harvest all the links I\u0026rsquo;ve gone to at news.ycombinator, reddit (list of technology sub-reddits I follow), or interesting tweets, and automatically build and maintain my Karpathy inspired LLM Wiki.\nFuture Goals include: automatic writing, summarization of findings into ai-slop, posting on various social media sites, and generic bot-behavior, but hopefully very fine-tuned that it\u0026rsquo;s not a total mess. ","permalink":"http://taude.xyz/experiments/","summary":"\u003ch1 id=\"archivore\"\u003eArchivore\u003c/h1\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/taudep/archivore\"\u003eArchivore\u003c/a\u003e is an attempt to automate information gathering from things I\u0026rsquo;ve read on the web.  It\u0026rsquo;s goal is to search my browser history (usually that\u0026rsquo;s kept in a Sqlite database), and to harvest all the links I\u0026rsquo;ve gone to at news.ycombinator, reddit (list of technology sub-reddits I follow), or interesting tweets, and automatically build and maintain my Karpathy inspired \u003ca href=\"https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f\"\u003eLLM Wiki\u003c/a\u003e.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eFuture Goals include: automatic writing, summarization of findings into ai-slop, posting on various social media sites, and generic bot-behavior, but hopefully very fine-tuned that it\u0026rsquo;s not a total mess.\u003c/li\u003e\n\u003c/ul\u003e","title":"Experiments"}]