Inspiration

Racing thoughts at night are hard to deal with — you're least in the mood to type when you need to process them most. Journaling apps require typing, and even asking a chatbot means opening an app, composing a prompt, and reading a response. We wanted something with zero friction: just talk, and let the app do the organizing.

What it does

Echo Drafts lets you speak a messy, stream-of-consciousness thought out loud. It transcribes your voice on-device, then uses Gemini to reorganize the transcript into three clear buckets: Facts (what actually happened), Feelings (the emotions involved), and Next Steps (any decisions or actions you mentioned). Entries are saved locally and build into a private timeline. Premium users also get a Weekly Pattern Report that surfaces recurring themes across the week's entries.

How we built it

Echo Drafts is a native Android app built with Kotlin and Jetpack Compose. All data lives locally in a Room database — no account system, no cloud sync — to keep the app genuinely private by default. Voice capture uses Android's native SpeechRecognizer, with a manual text-entry fallback for when speech input isn't convenient. Gemini handles the categorization step. Monetization runs entirely on the RevenueCat Android SDK: a free tier (3 entries/week) and a premium tier (unlimited entries, search, export, and the Weekly Pattern Report) gated behind a real subscription entitlement. We built the whole thing without local Android Studio, using Google AI Studio's cloud environment paired with an AI coding agent to iterate quickly.

Challenges we ran into

The biggest challenge was getting RevenueCat's purchase flow to run genuinely — not simulated — inside a cloud-streamed emulator with no Google Play Billing service available. We traced this through two layers: first, an outdated SDK version that didn't recognize RevenueCat's Test Store API keys at all; after upgrading, a second issue where explicitly forcing the Test Store configuration crashed the SDK's internal attribution handling. The fix was letting the SDK auto-detect the test key instead of overriding the store type manually. We also had to consciously cut a cloud-sync feature that had crept into the build partway through, to stay true to the app's local-first, private-by-default premise under a tight timeline.

Accomplishments that we're proud of

Getting a fully working, end-to-end RevenueCat purchase flow — a real product/price/trial confirmation dialog, not a placeholder — running inside a constrained cloud emulator environment. Keeping the architecture genuinely local-first with zero cloud dependency. Building a voice-first capture flow that's meaningfully different from typing into a general-purpose chatbot. And making sure premium features are gated behind real value (search, export, weekly synthesis) rather than a generic "remove ads" paywall.

What we learned

We learned the difference between a UI that looks like it has a working paywall and one that's actually wired to a live purchase flow — a silent fallback can mask a broken integration if you only check the code and not the actual purchase dialog on screen. We also learned RevenueCat's store-configuration nuances around Test Store keys, and how far AI-assisted, cloud-based tooling can take you when building a full native Android app without traditional local development tools.

What's next for EcoDrafts

Swap the Test Store key for a real Google Play key and publish to the Play Store. Expand the Weekly Pattern Report with longer-term trend detection across months, not just weeks. Add gentle reminder notifications to build a consistent habit loop. Explore an iOS version using the same local-first architecture.

Built With

Share this project:

Updates

Submission history