<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Dev Blog</title>
    <description>A developer blog about software engineering</description>
    <link>https://www.windybank.net</link>
    <atom:link href="https://www.windybank.net/feed.xml" rel="self" type="application/rss+xml"/>
    <language>en-us</language>
    <lastBuildDate>Mon, 11 May 2026 02:59:23 GMT</lastBuildDate>
    
    <item>
      <title><![CDATA[SwiftData + DataThespian: Thread-Safe Persistence]]></title>
      <description><![CDATA[How to use SwiftData safely in Swift 6 with strict concurrency using the DataThespian wrapper.]]></description>
      <link>https://www.windybank.net/blog/swiftdata-datathespian</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/swiftdata-datathespian</guid>
      <pubDate>Sat, 17 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>SwiftData</category>
      <category>concurrency</category>
    </item>
    <item>
      <title><![CDATA[Project Generation with Tuist]]></title>
      <description><![CDATA[How to define iOS projects as Swift code, with reusable templates and consistent configuration.]]></description>
      <link>https://www.windybank.net/blog/project-generation-tuist</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/project-generation-tuist</guid>
      <pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>Tuist</category>
      <category>tooling</category>
    </item>
    <item>
      <title><![CDATA[Snapshot Testing SwiftUI: Multi-Device, Multi-Theme]]></title>
      <description><![CDATA[Quick tips for setting up comprehensive snapshot testing across devices and color schemes.]]></description>
      <link>https://www.windybank.net/blog/snapshot-testing-swiftui</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/snapshot-testing-swiftui</guid>
      <pubDate>Mon, 12 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>testing</category>
      <category>SwiftUI</category>
    </item>
    <item>
      <title><![CDATA[XCUITest Page Objects: Maintainable iOS UI Testing]]></title>
      <description><![CDATA[How to use the Page Object pattern to write UI tests that don't break with every UI change.]]></description>
      <link>https://www.windybank.net/blog/xcuitest-page-objects</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/xcuitest-page-objects</guid>
      <pubDate>Sun, 11 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>testing</category>
      <category>XCUITest</category>
    </item>
    <item>
      <title><![CDATA[Integrating Apple's JournalingSuggestions API]]></title>
      <description><![CDATA[A comprehensive guide to parsing journaling suggestions, handling 11+ content types, and navigating Swift 6 concurrency challenges.]]></description>
      <link>https://www.windybank.net/blog/journaling-suggestions-api</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/journaling-suggestions-api</guid>
      <pubDate>Fri, 09 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>SwiftUI</category>
      <category>JournalingSuggestions</category>
    </item>
    <item>
      <title><![CDATA[Live Activities in iOS: From Concept to Lock Screen]]></title>
      <description><![CDATA[A practical guide to implementing Live Activities with ActivityKit, including navigation display and Dynamic Island integration.]]></description>
      <link>https://www.windybank.net/blog/live-activities-ios</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/live-activities-ios</guid>
      <pubDate>Thu, 08 Jan 2026 00:00:00 GMT</pubDate>
      <category>iOS</category>
      <category>SwiftUI</category>
      <category>ActivityKit</category>
    </item>
    <item>
      <title><![CDATA[Why CLI Tools Beat MCP for AI Coding Assistants]]></title>
      <description><![CDATA[Comparing native CLI tools and Agent Skills to the Model Context Protocol - when simpler is better.]]></description>
      <link>https://www.windybank.net/blog/cli-tools-over-mcp</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/cli-tools-over-mcp</guid>
      <pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate>
      <category>AI</category>
      <category>tooling</category>
      <category>Claude Code</category>
    </item>
    <item>
      <title><![CDATA[Geohash-Based IDs: A Clever Pattern for Location Data]]></title>
      <description><![CDATA[How to use geohashing to create unique, deterministic identifiers from coordinates without a central database.]]></description>
      <link>https://www.windybank.net/blog/geohash-based-ids</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/geohash-based-ids</guid>
      <pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate>
      <category>Next.js</category>
      <category>GIS</category>
      <category>patterns</category>
    </item>
    <item>
      <title><![CDATA[Hello World]]></title>
      <description><![CDATA[Welcome to my developer blog. This is my first post.]]></description>
      <link>https://www.windybank.net/blog/hello-world</link>
      <guid isPermaLink="true">https://www.windybank.net/blog/hello-world</guid>
      <pubDate>Sun, 04 Jan 2026 00:00:00 GMT</pubDate>
      <category>welcome</category>
      <category>meta</category>
    </item>
  </channel>
</rss>