Skip to content

Writing

Blog

Some articles are also available in Romanian.
androidkotlinprivacy

How to Detect and Redact Personal Data in Plain Text on Android

How Security Sentinel finds emails, phone numbers, ID numbers, IP addresses, API keys and passwords in plain text with regex, libphonenumber and ML Kit, then redacts exactly what you choose.

October 15, 2026Read →
androidkotlinprivacy

Remove Metadata from PDF and DOCX Files Without Changing What You See

How Security Sentinel finds and removes author names, file paths, comments, tracked changes, hidden text and auto-run scripts from PDF and Word documents on Android, without redrawing the pages.

October 15, 2026Read →
androidkotlinprivacy

Remove Photo Metadata on Android Without Re-encoding the Image

Strip EXIF, XMP, and IPTC metadata from JPEG and HEIC photos in Kotlin without recompressing pixels, while keeping orientation. A technical case study of Security Sentinel.

September 23, 2026Read →
kotlin-multiplatformwidgetkitjetpack-glance

Countdown Widgets with Kotlin Multiplatform, WidgetKit, and Glance

Build native countdown widgets with shared Kotlin date logic, iOS WidgetKit timelines, and Android Glance updates. A technical case study of Near & Dear.

September 14, 2026Read →
kotlin-multiplatformcompose-multiplatformgame-development

Procedural Adventure Level Generation in Kotlin

Build a deterministic adventure level generator in Kotlin with seeded randomness, progressive unlocks, and Compose retry state, using PickPerfect as a case study.

September 11, 2026Read →
kotlin-multiplatformandroidiossqldelightoffline-first

Building an Offline-First App — No Backend, No Auth, No Cloud

BoxIndex is a home inventory app with no login screen, no server, and no subscription. Here's what that forces you to think about as a developer.

April 11, 2026Read →
kotlin-multiplatformcompose-multiplatformandroidiosdeep-linking

End-to-End QR Deep Linking in a Kotlin Multiplatform App

How we wired QR code generation, custom URL schemes, and cross-platform deep link routing in BoxIndex — a KMP app built with Compose Multiplatform.

April 8, 2026Read →
jetpack-composecompose-multiplatformandroidkotlindebugging

Why I Threw Away Material Slider — and the Stale Closure Bug That Made Me

Building a custom gradient slider in Jetpack Compose Multiplatform, and the one-liner that fixed a subtle, maddening bug.

April 3, 2026Read →
kotlin-multiplatformcompose-multiplatformandroidioshaptics

Cross-Platform Haptics in Kotlin Multiplatform: One Interface, Two Engines

How PickPerfect calls hapticTick() from shared Compose code while each platform does its own thing under the hood.

April 1, 2026Read →