How to automatically keep AGENTS.md and AI instructions in shape, using PR review history
Write
Code review comments are the rules you forgot to write down
From messy inbox to actionable board, with one AI skill
Automating the unglamorous half of building a project
How to import multiple iOS signing certificates to CI
Exporting two iOS signing certificates together stopped working and broke a CI setup. How to fix importing multiple signing certificates.
Sliding Doors: ten years of RSS-Parser
Ten years since the first commit of RSS-Parser: a reflection on the library's journey and the sliding-doors moments that shaped a career.
Building Shellporter: From Idea to Production in a Week
Building Shellporter, a macOS menu bar app that opens a terminal in the project directory of the active IDE window, from idea to production in a week.
Sunsetting spoton: Android 16 killed the hotspot toggle trick
Sunsetting spoton, a Wear OS app to toggle the phone hotspot from the wrist, after Android 16 made its core trick impossible.
Accessing native macOS API in Compose Multiplatform
Accessing native macOS APIs like iCloud from a Compose Multiplatform desktop app through a native dylib and JNI, with a FeedFlow example.
Testing a Gradle Plugin that interacts with Git
How to test a Gradle plugin that interacts with a Git repository, using the KMP Framework Bundler plugin as a real-world example.
The curious case of a weird VerifyError crash
Hunting down a nasty runtime VerifyError crash that appeared with R8 enabled after updating the Android Gradle Plugin to 8.7.
From an Android to a Kotlin Multiplatform library
Migrating an existing Android library, RSS-Parser, to Kotlin Multiplatform: the challenges involved and the solutions applied.
Watch out for transitive dependencies: an “obvious” rant
A short rant sparked by a weird crash: always double-check what changes when updating a library, since hidden bugs might be lurking.
Don’t let Maven block you!
CI build failures often come from a Maven repository failing to serve a dependency. How to avoid getting blocked when that happens.