<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Vipul Kumar, notes</title>
    <link>https://vipulkumar.dev/blog/</link>
    <atom:link href="https://vipulkumar.dev/blog/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Long-form engineering posts from building Kafka, a Kotlin Multiplatform reading app.</description>
    <language>en</language>
    <lastBuildDate>Fri, 23 Oct 2026 12:00:00 +0530</lastBuildDate>
    <item>
      <title>Word-level audio and text sync in Jetpack Compose: building Kafka&#x27;s read-along</title>
      <link>https://vipulkumar.dev/blog/read-along-audio-text-sync-compose/</link>
      <guid isPermaLink="true">https://vipulkumar.dev/blog/read-along-audio-text-sync-compose/</guid>
      <pubDate>Fri, 23 Oct 2026 12:00:00 +0530</pubDate>
      <author>vipulyaara@gmail.com (Vipul Kumar)</author>
      <category>Jetpack Compose</category>
      <category>Kotlin Multiplatform</category>
      <category>Audio</category>
      <description>How Kafka syncs audiobook narration to words in Compose on Android and iOS: player clocks, text geometry, page-follow, and the bugs between them.</description>
    </item>
    <item>
      <title>A realistic page curl in Jetpack Compose, with one AGSL shader for Android and iOS</title>
      <link>https://vipulkumar.dev/blog/page-curl-jetpack-compose/</link>
      <guid isPermaLink="true">https://vipulkumar.dev/blog/page-curl-jetpack-compose/</guid>
      <pubDate>Thu, 22 Oct 2026 12:00:00 +0530</pubDate>
      <author>vipulyaara@gmail.com (Vipul Kumar)</author>
      <category>Jetpack Compose</category>
      <category>AGSL</category>
      <category>Compose Multiplatform</category>
      <description>How I built a live page curl in Jetpack Compose and Compose Multiplatform: AGSL RuntimeShader as a RenderEffect, fold-to-finger geometry, and the bugs.</description>
    </item>
  </channel>
</rss>
