I’m a mobile engineer from Indonesia. I write Kotlin and Dart, and I keep running into the same problem: every new app starts by rebuilding things the last app already had. So I’ve started building those things once, properly, for both Kotlin Multiplatform and Flutter.
Curious by nature, practical by choice.
These are part of SRC Tool, a small family of open-source libraries. Each one is designed once and implemented natively for both Kotlin Multiplatform and Flutter.
Camouflage: one set of components, any look
A component library where what a component is stays fixed, and how it looks comes from a swappable Skin and Theme. A new app gets a new Theme, not a new set of PrimaryButtons.
Sinew: the layers every app needs, already wired
A plug-and-play app architecture that connects data → domain → presentation. It covers response mapping, paging, error types, an HTTP client with token refresh and secure storage, so you stop rewriting them for every project. Sinew ships the mechanism; the app ships the configuration.
- Simple over clever, but not shallow. I try to keep both simplicity and depth.
- Developer experience matters as much as user experience.
- Design first, then code. Both libraries above started as design notes before any code was written.
Mostly in: Kotlin · Kotlin Multiplatform · Jetpack Compose · Dart · Flutter
I write about developer experience, KMP and testing on Medium and Dev.to, and I hang out on Discord.
Away from the keyboard: story-driven games, strategy, and books on psychology, history and manga.




