Blog.

Long-form notes from building Kafka: rendering, type and audio in Kotlin Multiplatform, and the parts that only broke on a real phone.

  1. Word-level audio and text sync in Jetpack Compose: building Kafka's read-along

    How Kafka syncs audiobook narration to words in Compose on Android and iOS: player clocks, text geometry, page-follow, and the bugs between them. With real narration you can follow in the browser.

    10 minute read  ·  Jetpack Compose, Media3, AVPlayer

    Read the post
    White Nights on sepia paper with the spoken word marked
  2. A realistic page curl in Jetpack Compose, with one AGSL shader for Android and iOS

    The page curl in Kafka's reader: an AGSL RuntimeShader as a RenderEffect over the live page, fold-to-finger geometry solved every frame, the iOS path through Skia, and every bug a real phone found. With a page you can turn in the browser.

    13 minute read  ·  Jetpack Compose, Compose Multiplatform, AGSL

    Read the post
    A Kafka reader page mid-turn, rolled over itself with its mirrored print showing