Skip to content

Mobile app development

Native Android apps in Kotlin and Jetpack Compose, and Apple-platform apps in Swift and SwiftUI. Built to work offline, run well on cheap phones and keep the data they hold safe.

Native Android in Kotlin & Jetpack Compose
Apple Platforms in Swift & SwiftUI
Offline-First Storage with Background Sync
Encrypted On-Device Data (SQLCipher, Keystore)
Camera, GPS, QR & On-Device OCR
Play Store Release & Full Source Handover
Core Track Record

4+ Years

Building systems

Collaboration Mode

Remote + Onsite (Guwahati Area)

Clickable Prototype → Offline Data Layer → Store Release

Platforms Used
KotlinJetpack ComposeAndroid SDKSwift

Optimization Summary

Most mobile apps fail in the field the same few ways: they freeze on low-end phones, lose data offline, or store sensitive details in plain text.

Common Obstacle

“The app freezes or crashes on low-end, 2GB RAM phones.”

Engineering Resolution

Native Kotlin with the heavy work off the main thread (Coroutines, WorkManager), memory profiling on real low-end devices, and lean Compose screens.

Common Obstacle

“Field agents lose entries when the network drops.”

Engineering Resolution

Offline-first storage with Room or SQLDelight. Every form, coordinate and photo is saved on the device first and synced automatically when the network returns.

Common Obstacle

“Sensitive records are stored in plain text on the phone.”

Engineering Resolution

SQLite encrypted with SQLCipher, keys held in the hardware-backed Android Keystore, and biometric unlock where it makes sense.

Common Obstacle

“Photos for verification are blurry or too large to upload.”

Engineering Resolution

A tuned CameraX setup that resizes without losing readability, so meter and document photos stay legible and small enough for mobile data.

Is This Service Right For You?

I build native apps for teams whose users are in the field, on patchy networks, or handling data that must stay private.

Utility & Enterprise Teams

Organisations sending apps to field agents in low-coverage areas, like the Consumer Indexing App built during my APDCL internship for KYC and QR codes across 6.4M consumers.

Privacy-Conscious Products

Finance trackers and document apps that must keep records on the device and encrypted, like FYRA Finance, my offline-first double-entry ledger.

Survey & Infrastructure Projects

Teams registering sites in the field with GPS coordinates, geotagged photos and offline queues, like the Solar Rooftop Registration App.

Founders Launching a Mobile MVP

Startups that want a clean native codebase from day one instead of a prototype that has to be thrown away after the first round of users.

Typical Mobile App Deliverables

You get the app, the source code and everything needed to keep shipping it without me.

Software

App Source Repository

Kotlin (Jetpack Compose) or Swift (SwiftUI) project with a clear separation of data, logic and UI, in your own Git repository.

Package

Signed Release Builds

Android App Bundles ready for Google Play plus APKs for sideloading, or a signed build for Apple platforms.

Database

Database Schema & Migrations

Typed schemas and migration scripts for the on-device database and any server it syncs with.

Security

Security Notes

How keys are stored, what is encrypted, which domains the app may talk to, and how to rotate credentials.

Documentation

Handover Guide

How sync, offline queues and releases work, written so another developer can pick the project up.

Specialized Building Areas

The kinds of apps I have shipped, and keep building.

Field Data Collection Apps

Forms, QR codes, document capture and GPS markers for agents working far from good coverage, syncing large volumes of records over poor networks (as in the Consumer Indexing App).

Private, Offline-First Apps

Apps where the data never needs a server: encrypted local databases, AES-GCM key envelopes and biometric unlock (as in FYRA Finance).

Native Apple-Platform Apps

Swift and SwiftUI apps that feel at home on the platform. Clipivo, my Mac clipboard manager, searches everything you copy, including the text inside screenshots.

Technical Stack & Platform Coverage

Native toolkits on both platforms, with the storage and security libraries I use in production.

Android

Kotlin / JavaJetpack ComposeCoroutines / FlowViewModel & WorkManager

Apple Platforms

Swift 6SwiftUIAppKitCryptoKit

Storage & Security

SQLDelight / RoomSQLCipher (AES-256)SQLite FTS5 searchAndroid Keystore & biometrics

Device Features & Sync

CameraX & ML Kit (OCR, barcodes)GPS / Location ServicesRetrofit / OkHttpFirebase Auth & sync
Related Technologies:KotlinJetpack ComposeSwiftSwiftUISQLCipherAndroid Keystore
Deep Technical Documentation

Engineering Notes & Tradeoffs

Detailed Technical Deep Dive: Mobile App Development

How I build native mobile apps that survive the field: encrypted on-device databases, offline-first sync that copes with patchy networks, and camera and GPS capture tuned for low-end phones.

1. SQLite Database Encryption (SQLCipher & Android Keystore)

In native mobile development, client-side data protection is critical. Storing sensitive customer profiles, financial balances, or local scan logs in cleartext SQLite databases invites reverse-engineering exploits. I harden local databases by applying SQLCipher (AES-256 database encryption) and securing keys using the hardware-backed Android Keystore.

Hardware-Backed Key Storage

Saving database keys directly in cleartext XML SharedPreferences is a common security failure. Instead, I generate a random 256-bit AES key, wrap it inside an encryption envelope using the Android Keystore's MasterKey (stored inside secure hardware enclave chips), and decrypt it only during database instantiation.

Below is the Kotlin pattern I implement using SQLCipher to initialize secure, encrypted databases inside native Android systems:

import android.content.Context
import androidx.room.Room
import androidx.room.RoomDatabase
import net.sqlcipher.database.SQLiteDatabase
import net.sqlcipher.database.SupportFactory

fun getEncryptedDatabase(context: Context, dbKey: ByteArray): MyDatabase {
    // Generate a SupportFactory with the raw byte key retrieved from the Keystore envelope
    const val DB_NAME = "secure_local_ledger.db"
    val factory = SupportFactory(dbKey)
    
    // Load SQLCipher libraries into memory
    SQLiteDatabase.loadLibs(context)
    
    return Room.databaseBuilder(
        context.applicationContext,
        MyDatabase::class.java,
        DB_NAME
    )
    .openHelperFactory(factory) // Enforce SQLCipher database encryption
    .build()
}

Biometric Lock Binding

For high-security applications (like FYRA Finance), configure Keystore parameters to require active user biometric authentication (setUserAuthenticationRequired(true)) before keys can be retrieved to open the database.


2. Offline-First Architecture & WorkManager Synchronization

Field agents operating mobile apps in remote regions of Assam frequently drop connectivity. To prevent user flow interruption or data loss, I deploy an offline-first local database design combined with transactional sync queues managed via Android's WorkManager.

Blocking Main Threads with Network Calls

A common mistake is attempting to upload data directly on the main UI thread during form submission. If the network is slow, the interface freezes, triggering Application Not Responding (ANR) warnings. Always save data to the local DB immediately, delegating uploads to background workers.

The Offline-First Data Lifecycle:

  1. User Action: The agent captures KYC data and GPS coordinates.
  2. Local Commit: The data is instantly written to the local encrypted SQLite DB using Coroutines. The UI updates instantly.
  3. Queue Registration: A sync request is logged inside the Room DB with a status of PENDING.
  4. WorkManager Trigger: WorkManager starts a background sync worker. The task is configured with strict constraints (e.g. network connected, battery not low).
  5. Auto-Retry: If the upload fails due to network drops, WorkManager schedules a retry using exponential backoff.
import android.content.Context
import androidx.work.*
import java.util.concurrent.TimeUnit

fun scheduleDatabaseSync(context: Context) {
    // Define constraints: Sync only when internet is connected
    val constraints = Constraints.Builder()
        .setRequiredNetworkType(NetworkType.CONNECTED)
        .build()

    // Create a one-time work request with exponential backoff retries
    val syncRequest = OneTimeWorkRequestBuilder<DatabaseSyncWorker>()
        .setConstraints(constraints)
        .setBackoffCriteria(
            BackoffPolicy.EXPONENTIAL,
            OneTimeWorkRequest.MIN_BACKOFF_MILLIS,
            TimeUnit.MILLISECONDS
        )
        .build()

    // Enqueue the work as unique, preventing duplicate sync queues
    WorkManager.getInstance(context).enqueueUniqueWork(
        "unique_db_sync_job",
        ExistingWorkPolicy.REPLACE,
        syncRequest
    )
}

Consumer Indexing App Scale

During the development of the Consumer Indexing App, field agents had to log GPS coordinates and meter photos for millions of consumers across Assam under poor network coverage. By implementing a native Room DB offline queue, agents could work seamlessly offline. The app synced over 6.4 million consumer entries without a single database crash or record loss.


3. Native Hardware Integration (CameraX & GPS)

To capture verifiable field records (such as solar panel rooftops locations), apps must interface directly with native hardware sensors:

  • CameraX API: I configure camera inputs to automatically control exposure, crop photos to target aspect ratios, and optimize compression to keep files small (sub-500KB) while preserving legibility.
  • Geofenced GPS Mapping: I hook into Android Location Services, applying location filters to verify that GPS coordinates represent physical site coordinates within ±5 meters before unlocking forms.

My Mobile App Process

Short phases, each ending with something you can install and try.

01. Scope & Screens

Agreeing what the app must do

Phase 1 of 7

We list the jobs the app has to do, who uses it and where. I turn that into a screen map and a clickable prototype you can tap through on your phone.

Featured Project Deliverables

Dynamic projects fetched from the portfolio database demonstrating execution.

Searching “weekly review” finds a screenshot containing those words
macOS
Native macOSSearch inside screenshots

Clipivo

A native macOS clipboard manager that remembers everything you copy, even the text inside screenshots.

Swift 6SwiftUIAppKitSQLite FTS5

Design & Engineering

View Details →
Solar panels
Android
GPS mappingPhoto documentation

Solar Rooftop Registration App

Android app with GPS mapping for solar installations

KotlinAndroid SDKGPS APIFirebase

Android Developer

View Details →
FYRA Finance Private Ledger - Showcase Mockup Presentation
Android
Engine Security Protocol: Client-Side AES-GCM EncapsulationDatabase Repository: Jetpack Room / SQLDelight encrypted core

FYRA Finance

A Private, Offline-First Double-Entry Ledger System

KotlinJetpack ComposeSQLDelightSQLCipher

Android & Security Engineer

View Details →

Why Hire a Native Mobile Developer?

Cross-platform shortcuts often struggle on low-end phones and with background work. Native code costs a little more up front and much less in support later.

What MattersNative App (My Approach)Typical Cross-Platform Template
Performance on Low-End Phones✓ Native code profiled on 2GB RAM devices.⚠️ Heavier runtime; can stutter on budget phones.
Offline Work✓ Local-first storage with automatic background sync.⚠️ Often assumes a connection; offline added later.
On-Device Data Security✓ SQLCipher encryption with Keystore-held keys.⚠️ Plain local storage unless someone adds encryption.
Hardware Access✓ Direct use of camera, GPS and biometrics APIs.⚠️ Depends on third-party plugins for each feature.

Coverage Area & Physical Location

Based in Guwahati, I build mobile apps for organisations across Assam, with field testing in the districts where the app will actually be used, including Jorhat, Dibrugarh, Silchar, Nagaon and Tezpur.

On-site Delivery Areas

Guwahati
Jorhat
Dibrugarh
Silchar
Nagaon
Tezpur
Tinsukia
Sivasagar
Golaghat
Barpeta
North Lakhimpur
Bongaigaon
Dhubri
Kokrajhar
Hailakandi
Karimganj

Remote Collaboration

For clients elsewhere in India (Bengaluru, Hyderabad, Pune, Mumbai, Delhi NCR) and abroad, I work remotely through GitHub, share test builds every week, and keep you updated over calls.

Base: Guwahati, Assam, IndiaGSC Verified

Frequently Asked Questions

Structured query answers targeting specific informational searches.

Yes. Data, coordinates and photos are stored in an encrypted local database and sync automatically when the connection returns.
I build Apple-platform apps in Swift and SwiftUI; my shipped Apple work so far is Clipivo, a native Mac app. Most of my production mobile work is Android.
The database is encrypted with SQLCipher and its key is kept in the hardware-backed Android Keystore, optionally unlocked with a fingerprint or face.
Yes. I help set up your developer console, prepare the listing and privacy policy, upload the app bundle and see it through review.

Let's Build Your App

Tell me who will use it and where. I'll come back with a plan, a timeline and a clickable first version.