<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Fabian Kirchhoff</title>
    <link>https://fabkho.dev</link>
    <description>Blog posts by Fabian Kirchhoff about Vue, Nuxt, TypeScript, and developer tools.</description>
    <language>en</language>
    <atom:link href="https://fabkho.dev/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title><![CDATA[Announcing Dynamic Changes in Vue with aria-live]]></title>
      <link>https://fabkho.dev/blog/use-announcer-nuxt</link>
      <guid>https://fabkho.dev/blog/use-announcer-nuxt</guid>
      <description><![CDATA[How to make dynamic content changes visible to screen readers using aria-live regions, and how to wrap it into a reusable composable.]]></description>
      <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
      <author>Fabian Kirchhoff</author>
    </item>
    <item>
      <title><![CDATA[Keyboard Navigation in Composite Widgets]]></title>
      <link>https://fabkho.dev/blog/keyboard-navigation-composite-widgets</link>
      <guid>https://fabkho.dev/blog/keyboard-navigation-composite-widgets</guid>
      <description><![CDATA[Roving tabindex vs aria-activedescendant — when to use each pattern, with interactive demos and implementation examples.]]></description>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <author>Fabian Kirchhoff</author>
    </item>
    <item>
      <title><![CDATA[Typesense Schema Migrations in Laravel]]></title>
      <link>https://fabkho.dev/blog/typesense-schema-migrations-laravel</link>
      <guid>https://fabkho.dev/blog/typesense-schema-migrations-laravel</guid>
      <description><![CDATA[How to patch Typesense collections at deploy time using Laravel migrations instead of flushing and re-indexing.]]></description>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <author>Fabian Kirchhoff</author>
    </item>
  </channel>
</rss>