Native Android,
built to grow.
I reach for the platform before I reach for a shortcut.
Android-specific APIs exist for a reason — Jetpack Compose, WorkManager, sensors, notifications. Using them properly is what makes an app feel like it belongs on the device, not bolted onto it.
What isn't measured doesn't get better.
Firebase, Supabase, and plain SQL all earn their place by turning behaviour into signal — retention, drop-off, crash points. Decisions follow the data, not the other way around.
An app's first version is the start of a feedback loop, not the finish line.
Fast iteration, clean architecture, and a backend that doesn't fight you at scale — the same discipline that makes an app good is what makes it grow.
The stack, orbiting
Four phases, one continuous signal
Discover
Understand the user's actual moment of need, not the feature wishlist.
Architect
Design the data model and navigation graph before a single screen ships.
Build native
Kotlin, Compose, and the Android APIs that make the app feel like it belongs.
Instrument & grow
Wire up analytics, watch the signal, iterate on what the data actually shows.
A closer look
Native app case study
A Jetpack Compose build focused on native performance — smooth scroll, cold-start time, and platform-correct motion.
See the workGrowth-instrumented backend
Supabase and Postgres wired to real usage signal — the kind of backend that tells you what to build next.
See the workEnd-to-end product build
Android client, PHP/SQL backend, real users — the full loop from architecture to release.
See the work