Explore my mobile apps and open-source work.
OpenMind is a professional-grade, local-first Android application designed for developers and AI researchers to discover, interact with, and benchmark the world's most popular free AI models.
By leveraging the OpenRouter API, OpenMind transforms your mobile device into a powerful benchmarking station, providing real-time data on model efficiency, cost-to-performance ratios, and response reliability.
In the rapidly evolving landscape of Large Language Models (LLMs), not all "free" models are created equal. As highlighted in recent industry benchmarks, factors like Time-To-First-Token (TTFT) and Tokens-Per-Second (TPS) vary wildly across providers.
AiModelsCompete eliminates the guesswork by providing:
Built with modern Android best practices, AiModelsCompete serves as a reference implementation for Clean Architecture and Reactive UI.
OpenMind is designed for the modern AI developer who needs to stay ahead of the curve. Whether you are building an AI-powered app or just exploring the latest in open-source LLMs, OpenMind provides the metrics that matter.
Chatify is a robust Kotlin Multiplatform application showcasing a modern local-first architecture, reactive synchronization engine, and polished UI animations.
It is built using Compose Multiplatform for shared UI across Android and iOS, SQLDelight for local persistence, and the MVI (Model-View-Intent) pattern for predictable and scalable state management.
Chatify works fully offline by design. Every user action is persisted locally first, ensuring instant UI updates with zero latency, even without an internet connection.
A powerful synchronization engine ensures data consistency between local and remote sources using state flags:
pendingSync โ Data waiting to be syncedisFailed โ Sync failed after retriespendingDelete โ Soft-deleted items awaiting server confirmationImplements a clean unidirectional data flow using shared ViewModels across Android and iOS for predictable state handling and easier debugging.
Features a premium Typewriter Effect for assistant responses with a custom warm-up phase (1.2s) that prevents historical messages from re-animating.
Intelligently generates chat titles based on the first user message in a conversation.
Built with SQLDelight + Coroutines Flow, ensuring the UI always reflects the latest database state in real time.
Uses a shared Ktor 3 client with type-safe API requests and centralized error handling.
Chatify follows a layered architecture designed for scalability, testability, and clean separation of concerns:
Chatify ensures data reliability using a state-driven sync system:
| Flag | Purpose | UI Behavior |
|---|---|---|
pendingSync | Data waiting to be synced | Shows as โsendingโ or โpendingโ |
isFailed | Sync failed after retries | Displays retry error message |
pendingDelete | Soft-deleted but not confirmed | Hidden from UI until confirmed |
To deliver a premium chat experience, Chatify uses a typewriter animation system with a smart state-handling mechanism:
This prevents historical messages from re-animating on every recomposition.
The project includes a Node.js + Express backend:
cd backend
npm install
npm start
๐ค Android
Open project in Android Studio Ladybug+
Run module: :composeApp
๐ iOS
Open iosApp/iosApp.xcodeproj in Xcode 15+
Or run via Android Studio using Kotlin Multiplatform plugin