Everything I've built and where it stands — shipped on Google Play, in-development test builds you can install today, and open-source projects on GitHub.
Designed, architected, developed, and shipped end-to-end as a solo developer.
Chitra: AI Wallpapers
Live on Google Play
AI-powered wallpaper app with curated collections — Cloudflare R2 CDN delivery, offline-first Room caching, Clean Architecture.
KotlinJetpack ComposeCloudflare R2RoomMVVM
Antar - Device Info
Live on Google Play
Device analytics with real-time StateFlow streams for 44+ hardware sensors — dual SIM, GPS satellites, battery health, network deep scan, custom Compose Canvas charts.
KotlinJetpack ComposeSensorManagerCustom CanvasClean Architecture
Apps I'm actively engineering — install and try any of them today. Each card leads with the stack and the hard problem it solves, plus an honest note on current scope.
Ar
Artha — Sense Maker
In Development · used daily
An on-device multimodal AI app: ingest audio, video, images, text, PDFs and docs, then Summarize · Translate · Chat with the content. The entire inference pipeline runs on the device — no cloud, no data collection — architected around a pluggable engine layer so each modality (LLM, OCR, translation, speech) sits behind a clean domain port. Artha (అర్థ) = "meaning."
- On-device Gemma LLM engine driving summarize & chat
- ML Kit OCR + on-device translation; STT/TTS speech pipelines
- Engine-port architecture — each modality swappable behind an interface
- Clean Architecture · MVVM · Koin DI · sealed-state Compose UI
KotlinJetpack ComposeGemma (on-device)ML KitKoinClean Architecture
Version: 1.0 (dev)
Build: 2026-07-09
Size: ~230 MB (bundles the on-device model assets)
Requires: Android 7.0+
Development status
- Engine layer live; remaining modality flows being wired in
- On-device inference is compute-heavy — large media processes slower on low-RAM devices
- Development build, installed outside Google Play
ER
Erosion Rider
In Development · playable
An original 2D game built on a custom momentum-physics engine, with a novel mechanic I designed: the terrain permanently erodes along the path you ride, and that wear persists across runs. I engineered it by reverse-analysing the terrain and momentum models behind proven surfer/rider titles, then inventing the erosion layer on top — plus a full retention loop.
- Custom momentum physics + procedural keypoint terrain generation
- Persistent erosion system — carves are serialized and survive across sessions
- Full game economy: coins, 7-day daily-reward streak, rarity-weighted gacha crates
- Designed from a systematic teardown of reference engines, not a clone
KotlinCustom Physics EngineCompose CanvasProcedural Terrain
Version: 1.0 (release build)
Build: 2026-07-20
Size: ~12 MB
Requires: Android 7.0+
Development status
- Core loop + economy shipped; progression (missions, XP/rank, loadouts) in progress
- Difficulty ramp and economy values still being tuned between builds
- Release-signed build, installed outside Google Play
CR
Cascade Reaction
In Development · playable
A turn-based chain-reaction strategy game on a custom cascade engine — place orbs, trigger chain detonations that capture opponents' cells, last player standing wins. The engineering underneath is a deterministic wave-propagation simulation with layered tactical rule systems built on top.
- Custom cascade engine — deterministic chain-detonation wave simulation
- Fog of War: per-turn visibility recomputed from owned + adjacent cells
- Magnetic Shield cards that absorb a cascade wave; radioactive hazard cells
- Animated detonation waves rendered in Compose; clean state management
KotlinJetpack ComposeCustom Game EngineState Management
Version: 1.0 (release build)
Build: 2026-07-14
Size: ~12 MB
Requires: Android 7.0+
Development status
- Full game + 5 tactical modes built; strategic balancing ongoing
- Local pass-and-play; online multiplayer not yet implemented
- Release-signed build, installed outside Google Play
SP
SimplePlayer — P2P Streaming Engine
Systems engineering demo
A BitTorrent stream-while-downloading engine: paste a magnet link and playback begins after a few seconds of prebuffering — no waiting for the full file. The hard part is the piece-aware stream that blocks an ExoPlayer read precisely until libtorrent has written the required bytes to disk, with sequential download and head/tail piece prioritisation feeding a local HTTP range server.
- libtorrent4j with sequential download + head/tail piece prioritisation
- Custom local HTTP range server streams bytes to ExoPlayer as pieces land
- Piece-aware InputStream blocks a read until its data is written — seek-capable
- Foreground service with correct Android 14+ FGS types keeps the download alive
Kotlinlibtorrent4jExoPlayerNanoHTTPDForeground Service
Version: 0.10.0 (dev)
Build: 2026-07-16
Size: ~77 MB
Requires: Android 7.0+
Scope & status
- An engine demo — UI is intentionally minimal; the streaming pipeline is the deliverable
- Far-ahead seeks wait on piece download; magnet input is sanitised before parsing
- Development build, installed outside Google Play
- Note: BitTorrent is a content-neutral protocol — use only with content you have the rights to (public-domain media, Linux ISOs, openly licensed files).
Source-available projects — AI tooling, players, and Kotlin Multiplatform experiments.