Overview
A native Android recipe discovery application engineered around instantaneous client-side filtering, offline-first SQLite/Room caching, and memory-efficient image pipeline management for a comprehensive cocktail database.
My Role
Lead Android Engineer responsible for MVVM architecture, Room offline persistence, and memory-bounded media pipelines.
The Problem
Multi-attribute ingredient search and dynamic filtering strain main-thread responsiveness across large recipe datasets. Unmanaged high-resolution imagery risks memory leaks and OutOfMemory (OOM) crashes during rapid list flings on mid-tier Android devices.
The Solution
Architected a responsive Android client utilizing Room local caching to index ingredient matrices off the main thread. Deployed reactive Kotlin Flow streams for real-time search filtering, and integrated memory-bounded Coil image pipelines with disk LRU caching to guarantee smooth 60fps scrolling.
Architectural reasoning
Decoupling search queries from network dependencies via a single-source-of-truth Room repository ensures sub-16ms query response times even in airplane mode. Image pipelines downsample bitmaps to match target viewports before allocation to strictly guard against GC pauses.
Technical Decisions
- Structured a single-source-of-truth repository pattern using Room and Kotlin StateFlow to guarantee zero-latency offline filtering
- Engineered complex multi-ingredient query filters with SQLite indices, offloading all matching logic from the UI thread to Dispatchers.IO
- Implemented viewport-matched bitmap downsampling and hardware bitmap allocation via Coil, eliminating OOM exceptions on memory-constrained devices
- Abstracted network requests via Retrofit with automated retry policies and transparent cache fallback
Architecture
- Android SDK & Kotlin
- MVVM Architecture with Unidirectional Data Flow
- Room SQLite Database with Offline-First Repository
- Kotlin Coroutines & StateFlow
- Coil Memory-Bounded Image Pipeline
Engineering Highlights
- Sub-16ms ingredient filter response times via indexed local Room queries
- Zero-jank 60fps list scrolling with memory-bounded image decoding
- Deterministic offline search availability with zero network dependency during browsing
- Clean MVVM separation with observable UI state modeling
Results & Impact
- Delivered sub-16ms filter response times and zero-drop offline recipe discovery across test devices
- Maintained 60fps frame rate during rapid list flings through proactive bitmap memory recycling


