FlowTab(
items = tabs,
selected = current,
onSelect = { current = it },
indicator = Indicator.Ripple,
style = FlowTabStyle.Glass // Haze-backed blur, optional
)Most navigation bars marry you to a navigation library. This one doesn't — pure state in, callbacks out. It drops into Navigation3, Decompose, Voyager, PreCompose, Appyx or plain Compose state with no adapters.
| 🎭 Glassmorphism Real blur via Haze, not a fake overlay |
🔍 Expandable search Grows out of the bar, callback-driven |
✨ 3 indicators Ripple · Dot · Line + count & dot badges |
📱 One source set Android + all three iOS targets |
Annotate your screens. NavEase generates the rest.
Compose navigation is boilerplate: route constants, manual argument parsing, type-unsafe string keys, and one giant NavHost every screen has to be registered in by hand. NavEase deletes that layer — routes, arguments and the graph itself are generated at compile time, so a broken route is a build error instead of a crash in production.
| ❌ Plain Compose Navigation | ✅ With NavEase | |
|---|---|---|
| Routes | Hand-written string constants, duplicated across the codebase | Generated from the annotation on the screen itself |
| Arguments | Manual parsing and unchecked casts out of the bundle | Typed accessors, generated alongside the route |
| Graph | One giant NavHost, every screen registered by hand |
Assembled at compile time — nothing to register |
| A typo costs | A crash, in production, on a screen you didn't test | A build error, on your machine, in seconds |
Paired with FlowTab-CMP it's the other half of one problem — FlowTab handles what navigation looks like, NavEase handles how it's wired.
|
🔐 SecureVault-KMP val vault = SecureVault("com.acme.auth")
vault.put("session", token)
val s: String? = vault.get("session")One coroutine-first API, two real platform backends — |
📿 Prayer-Times-KMM val times = PrayerTimes(
coordinates = Coordinates(23.81, 90.41),
method = CalculationMethod.KARACHI
)Adhan-inspired astronomical math ported to common Kotlin — 11+ calculation methods, madhab selection for Asr, and correct high-latitude handling, the part most implementations get wrong. |
| UI | Jetpack Compose · Compose Multiplatform · Material 3 · SwiftUI |
| Cross-platform | Kotlin Multiplatform · KMM · Ktor |
| Architecture | Clean Architecture · MVVM · MVI · Repository pattern |
| Data & DI | Room · SQLDelight · Koin · DataStore · Firebase |
| Release | Gradle Kotlin DSL · Maven Central publishing · GitHub Actions |
|
Four-target KMP — Android, iOS, Desktop, Ktor server. Real-time monitoring, adaptive signals, emergency priority. |
📞 CallerID Caller identification and spam blocking for Android — real-time lookup, blocklists, contact management. |
Drop-in Android SDK for bKash, Bangladesh's largest mobile payment gateway. |
|
Kotlin DSL for multi-page A4 PDFs on Android — tables, text, auto-pagination. |
🛡️ Crash-Guard Android crash handling with customizable crash screens and persistent logging. |
✅ TaskFlow Offline-first KMP task manager — Compose on Android, SwiftUI on iOS, Room + Koin. |
🔍 Experiments & older work
- RefactoringPlan — structured modernisation plan for a seven-year-old legacy Android codebase: architecture, dependency debt, performance
- Scrapper — video URL extraction from TikTok, Facebook, Instagram and X
- SmolChat-Android (fork) — running GGUF-format SLMs/LLMs fully on-device; my on-device AI sandbox





