01

Experience

Professional journey and work history

Android Developer

JanelaajNOW
Feb 2026 — Present
Remote, India

Working on a production Android application, improving architecture, performance, and codebase quality using Kotlin, Java, and MVVM patterns.

  • ▸MVVM Refactoring: Refactored legacy screens to MVVM + ViewModel, improving state consistency and reducing recurring UI bugs across the app.
  • ▸Feature Development: Independently designed and built a new feature in a separate module, applying Modern Android Development (MAD) practices with Compose, Hilt, and Coroutines.
  • ▸Performance Optimization: Reduced redundant API calls through caching and request deduplication, improving app responsiveness and load times.
  • ▸Architecture & Concurrency: Integrated Dagger Hilt for dependency injection and migrated blocking operations to Kotlin Coroutines, improving startup performance and code maintainability.
KotlinJavaXMLMVVMHiltRetrofitCoroutines

Android Developer

Crisfood
Jun 2025 — Nov 2025
Thane, India

Developed production-ready Android features using Kotlin and Jetpack Compose, focusing on clean UI architecture and smooth user interactions.

  • ▸Jetpack Compose Delivery: Delivered production features in Jetpack Compose, translating Figma designs into pixel-perfect UI across Agile sprints.
  • ▸State Management: Implemented MVVM with StateFlow to manage UI state, resolving inconsistency issues and improving overall reliability.
  • ▸Networking: Integrated REST APIs using Retrofit, Coroutines, and Flow, ensuring reliable data fetching and consistent response handling across screens.
KotlinJetpack ComposeMVVMRetrofitCoroutinesFlow
Open to new opportunities
02

Featured Projects

Production-grade Android and Flutter applications

🚀

JobReady

AI-Powered Job Preparation Platform — Resume and JD analysis, Learning Roadmap, Interview Questions, DSA practice, and AI coaching.

  • ▸On-device PDF text extraction
  • ▸Gemini-powered keyword extraction from job descriptions
  • ▸AI Analysis Pipeline for Skill Gap, Learning Path, Interview Prep
AndroidKotlinJetpack ComposeMVVMHiltRoom
💰

MoneyMind – Budget & Expense

Offline-first personal finance companion focused on budgets, behavior, and real-time money insights.

  • ▸Offline-first Drift + SQLite reactive persistence with instant local state updates
  • ▸Riverpod-based dependency injection and state management for predictable behavior
  • ▸Behavior-driven Money Score, streaks, segmented user profiles, and micro-goals
FlutterDartRiverpodDriftSQLiteFreezedfl_chartgo_router
✈️

Travenor – Travel Booking

Modern multi-module Android travel booking app with separate user and property-owner applications, powered by Supabase for real-time data.

  • ▸Multi-module architecture: Common, App (user), and Owner modules
  • ▸Supabase integration for authentication, real-time database & cloud storage
  • ▸OTP verification, onboarding flow, destination browsing & booking management
KotlinJetpack ComposeSupabaseKtorHiltWorkManagerFirebase MessagingMVVM
03

Other Projects

Smaller experiments and explorations

🎵

ExoPlayer-Android-MVVM

High-performance Android music player with background playback, dynamic queue management, and network-first streaming architecture.

KotlinJetpack ComposeMedia3 ExoPlayer
📰

NewsApp

Modern news reader with Clean Architecture, reactive UI, Material Design 3, and robust error handling.

KotlinJetpack ComposeRetrofit
₿

CryptoCoin

Real-time cryptocurrency tracker with live market data, smooth animations, and Retrofit JSON integration.

KotlinXMLRetrofit
04

Blog

Technical writing on Android development and clean code

How We Slashed Our Android App Size by 40% (25MB to 15MB) in 2026...
kotlinapp-performance

How We Slashed Our Android App Size by 40% (25MB to 15MB) in 2026...

In modern Android development, shipping a bloated APK or App Bundle is a silent killer for user acquisition. Users on data-restricted plans or limited storage devices abandon heavy applications before they even finish downloading. Recently, we optimized our pr...

Aug 30, 2026
Read
Understanding Enum Classes, Sealed Classes, and Sealed Interfaces in Kotlin...
android-app-developmentkotlin-features

Understanding Enum Classes, Sealed Classes, and Sealed Interfaces in Kotlin...

Kotlin provides several powerful ways to model fixed sets of types or states in your applications. Among the most commonly used are enum classes , sealed classes , and sealed interfaces . Each serves a different purpose, depending on the level of flexibility a...

Nov 11, 2025
Read
Guide to Understanding MVVM Architecture in Android...
best-practicesandroid-app-development

Guide to Understanding MVVM Architecture in Android...

When most beginners start Android development, they usually write UI code, UI logic, and business logic inside the same Activity or Fragment. It feels simple at first, but as the project grows, the code quickly becomes: Hard to read Hard to maintain Hard to de...

Nov 4, 2025
Read
Kotlin Multiplatform Setup in Android Studio (Windows)...
kotlin-multiplatformandroid-studio

Kotlin Multiplatform Setup in Android Studio (Windows)...

If you’re trying to get started with Kotlin Multiplatform (KMP) on Windows , you might face this message when installing the Kotlin Multiplatform plugin : “The plugin is not available for Windows” This plugin is officially supported on macOS , which is why the...

Jul 11, 2025
Read
05

Tech Stack

Technologies I use to build great mobile apps

Languages
Kotlin
Java
Dart
Android
Jetpack Compose
Android SDK
Material Design 3
XML Layouts
Architecture
MVVM
Clean Architecture
Repository Pattern
Use Cases
State & Async
Coroutines
Kotlin Flow
StateFlow
Riverpod
Networking
Retrofit
OkHttp
REST APIs
Ktor
Data & Storage
Room Database
Firebase
Supabase
Drift / SQLite
Libraries
Hilt / Dagger
Coil / Glide
Media3 ExoPlayer
Paging 3
Tools
Android Studio
Git / GitHub
Gradle
Figma

GitHub Language Stats

Kotlin 85.2%
Dart 8%
Java 4.8%
TypeScript 1.4%
Other 0.6%
MusicViewModel.kt
@HiltViewModel
class MusicViewModel @Inject constructor(
  private val getTracksUseCase: GetTracksUseCase
) : ViewModel() {
  val tracks = getTracksUseCase()
    .stateIn(viewModelScope, SharingStarted.WhileSubscribed(), emptyList())
}
07

Get in Touch

Open to new opportunities and interesting collaborations

Let's build something great together

I'm currently open to Android Engineer roles and interesting freelance projects. Whether you have a question, a project idea, or just want to say hi — I'll do my best to get back to you quickly.

Available for Work