Inspiration
Hi, I’m JD. I’m based in Costa Rica, obsessed with specialty coffee, and have been building Android apps professionally for over a decade.
For years, I collected physical roaster cards from bags I brewed, but they always ended up crumpled in drawers or lost. Existing coffee tracking apps felt like doing taxes with endless dropdowns, manual typing, and cold corporate spreadsheets. I built Faint to give coffee the tactile, beautiful home it deserves: an editorial digital vault where snapping a photo of the bag or card instantly logs your cup without turning your ritual into homework.
With the Shipaton, I finally decided to step outside client work and take my first serious leap into indie development.
What it does
- Dual-Face Camera Capture: Snap the front and back of any roaster card or bean bag; vision models pull varietals, elevation, process, and tasting notes into structured data in one shot.
- Tactile 3D Cards: Digital cards flip with smooth physics to reveal origin terroir maps, brew ratios, and polaroid-style photos from your session.
- Zero-Keyboard Dial-In: Tune your grind size, water ratio, and brew times using tactile sliders without opening a soft keyboard.
- Local-First & Private: Everything stays on your phone. No mandatory accounts, no cloud lock-in.
How I built it
- Kotlin Multiplatform (KMP) & Compose Multiplatform: 100% shared UI and business logic across iOS and Android. Persistence is handled offline-first with Room KMP, Koin for DI, and Ktor for networking.
- Serverless Edge: A Cloudflare Worker proxy handles rate limiting and device quotas to protect AI inference costs before passing requests to vision models via OpenRouter.
- Monetization with RevenueCat: Integrated RevenueCat to power Faint Pro (monthly/annual subscriptions). Managing paywalls, anonymous user entitlements, and offline receipt validation took hours instead of weeks, freeing me up to focus on the coffee experience itself.
Challenges & Honest Lessons
- Balancing Generous Free Tiers with AI Costs: Vision tokens add up fast when you let users scan without paying upfront. I had to build token buckets and strict serverless edge caps in Cloudflare KV to ensure the app never ran in the red.
- Going Cross-Platform as an Android Guy: After 10+ years living in Android Studio, shipping production iOS code with Compose Multiplatform was an exciting challenge, especially tweaking fluid physics and gesture handling to feel truly native on iPhone.
- Letting RevenueCat Handle the Heavy Lifting: As a solo indie dev, handling receipt validation, edge cases, and cross-platform entitlements from scratch would have killed my Shipaton deadline. Offloading that to RevenueCat was easily the best architectural decision I made.
Current Status & What's Next
- Live on the Apple App Store: Faint is officially live on iOS with active downloads and active Search Ads running in specialty coffee markets.
- Latest Android version Pending: The production build is submitted to Google Play and awaiting final review.
- Next Steps: Interactive flavor wheels, recipe ratio calculators, and encrypted peer-to-peer card sharing, all while keeping the vault strictly local-first.
Built With
- ai
- android
- cloudflare-kv
- cloudflare-workers
- coffee
- compose
- compose-mulltiplatform
- firebase
- in-app-purchases
- ios
- kmp
- koin
- kotlin
- ktor
- local-first
- ml-kit
- multimodal
- ocr
- openrouter
- paywall
- revenuecat
- room
- subscriptions
- typescript
- web-purchases
Log in or sign up for Devpost to join the conversation.