<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Caleb Dudley - Blog</title>
      <link>https://calebdudley.dev/blog/</link>
      <description>Caleb Dudley — Software Engineer focused on DevOps, .NET, Python, Linux, and IoT.</description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://calebdudley.dev/blog/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Tue, 28 Jul 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Launching my personal website</title>
          <pubDate>Tue, 28 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://calebdudley.dev/blog/personal-website/</link>
          <guid>https://calebdudley.dev/blog/personal-website/</guid>
          <description xml:base="https://calebdudley.dev/blog/personal-website/">&lt;p&gt;I&#x27;m staking out my claim on the internet: finally launching a personal website instead of just pointing people at LinkedIn.&lt;&#x2F;p&gt;
&lt;p&gt;I&#x27;ve heard an optimistic vision for the AI future - everybody is able to self-host open source tools and build their own software to get free of big tech control. So I guess this is me doing my part 😉&lt;&#x2F;p&gt;
&lt;p&gt;Built it the same way as the last few side projects: primarily driving Claude Code running on my project VPS from my phone. Bio, work history, a projects page linking out to the other things I&#x27;ve been building.&lt;&#x2F;p&gt;
&lt;p&gt;Here&#x27;s what&#x27;s running under the hood:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Blog: running on &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.getzola.org&#x2F;&quot;&gt;Zola&lt;&#x2F;a&gt;, a Rust-based static site generator. I write a post in markdown, it renders to plain HTML at build time.&lt;&#x2F;li&gt;
&lt;li&gt;CI&#x2F;CD: same pattern as the contraction timer — merge to main deploys prod, push to any other branch deploys to a test environment automatically. Two separate Azure Static Web Apps, one shared GitHub Actions. This works well for my workflow to collaborate with AI.&lt;&#x2F;li&gt;
&lt;li&gt;Link previews: I&#x27;ve added Open Graph tags so sharing the link doesn&#x27;t just show bare text. I&#x27;d always wondered how those link previews worked... now I know. I even found a cool tool that will show you what they look like on different platforms: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.opengraph.xyz&#x2F;url&#x2F;https%3A%2F%2Fcalebdudley.dev&quot;&gt;opengraph.xyz&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;It&#x27;s nothing crazy, but it feels to good to have a platform for sharing that I control.&lt;&#x2F;p&gt;
&lt;p&gt;Check it out: https:&#x2F;&#x2F;calebdudley.dev&lt;&#x2F;p&gt;
&lt;p&gt;Any bugs I missed? Or SEO advice so it shows up when someone searches me?&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>A contraction timer, and my first PWA</title>
          <pubDate>Sun, 26 Jul 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://calebdudley.dev/blog/contraction-timer-pwa/</link>
          <guid>https://calebdudley.dev/blog/contraction-timer-pwa/</guid>
          <description xml:base="https://calebdudley.dev/blog/contraction-timer-pwa/">&lt;p&gt;After seeing my friend Michael Dennis&#x27;s recent presentation on Progressive Web Apps, I&#x27;ve decided to dip my toes in while creating something useful: a pregnancy contraction timer! Super simple, client-side only application that I hammered out with Claude Code.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;contraction-timer.calebdudley.dev&quot;&gt;Try it out&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s hosted on Azure as a static web app, complete with a build pipeline and test environment. It&#x27;s even got dark mode!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ca1ebd&#x2F;contraction-timer&quot;&gt;Source code&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;It allows you to edit contractions, which the app I had used previously decided was a paid feature… hence the rebuild.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Down the AI rabbit hole</title>
          <pubDate>Sun, 07 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://calebdudley.dev/blog/down-the-ai-rabbit-hole/</link>
          <guid>https://calebdudley.dev/blog/down-the-ai-rabbit-hole/</guid>
          <description xml:base="https://calebdudley.dev/blog/down-the-ai-rabbit-hole/">&lt;p&gt;Decided to jump down the AI rabbit hole! I set up an openclaw instance on my desktop, then got annoyed by it and made it set up a Hermes instance in the cloud which I&#x27;ve had a slightly better experience with so far.&lt;&#x2F;p&gt;
&lt;p&gt;Now I&#x27;ve got it integrated with Claude Code&#x2F;GitHub and spinning up remote sessions I link into with my phone. It&#x27;s been pretty cool to drive from my phone on these small side projects I&#x27;ve had in my head for a while!&lt;&#x2F;p&gt;
&lt;p&gt;So far I&#x27;ve got a good start on:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ca1ebd&#x2F;updateme&quot;&gt;updateme&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; — a simple CLI tool (written in Python) to get an info dump: the weather, headlines, and market performance.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ca1ebd&#x2F;myworld&quot;&gt;myworld&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; — an opinionated container that has the tools I like using bundled in. Right now just vim and updateme, but I have a note-taking process I&#x27;ll build in at some point and will remember more tools to add over time.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ca1ebd&#x2F;lycus&quot;&gt;Lycus&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt; — Ansible automation to rebuild my Hermes server (I named it Lycus) once it breaks… my plan is to let it do whatever it wants until it gets sufficiently broken, and then just spin up a new instance and pull my customizations in. I&#x27;ll just pack up and jump to a new timeline like Rick and Morty.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</description>
      </item>
    </channel>
</rss>
