Inspiration

Digging into the journaling app space revealed two major flaws in almost every product. First, voice is treated as a bolt-on feature, an afterthought to typing, rather than the primary way you interact. Second, and most importantly, these apps ask for your most unguarded thoughts while treating your privacy as just another line in a settings screen. An indie developer once wrote, "Trust isn't just another feature. It's the product." That insight became Spokn's core purpose: a voice-first journal where privacy and trust aren't marketing copy, but the entire foundation.

What it does

Open Spokn, tap the mic, talk about your day. No account, no setup. Your voice is transcribed and turned into a written entry with an AI-generated summary, a mood tag, and goals it noticed you mention in passing. "I really want to start running again" gets surfaced as something you can choose to track, without you ever having to set up a goal manually.

How we built it

  • Mobile: Kotlin Multiplatform
  • Backend: Kotlin-based Ktor service backed by a Supabase-hosted Postgres database
  • Audio Pipeline: Split across two specialized providers
    • ElevenLabs: Handles speech-to-text.
    • Gemini: Processes summary, mood detection, and goal extraction.
  • Subscriptions: RevenueCat
  • Design: Claude Design

Challenges we ran into

My first instinct was to make the whole pipeline local, even speech-to-text, so nothing about a journal entry ever had to leave the phone. That fell apart on contact with Android's actual on-device options. The built-in SpeechRecognizer isn't accurate enough for the kind of unstructured, rambling speech a journal entry actually is. The on-device GenAI path (ML Kit / Gemini Nano) is restricted to specific higher-end devices, which would have meant a fragmented experience or quietly excluding a chunk of users.

So I moved to a cloud pipeline instead, but tried to keep the privacy promise architecturally rather than dropping it. Audio is sent to ElevenLabs and Gemini only to produce the transcript and summary, and is never stored on Spokn's servers. The only persisted copy of your journal lives on your device.

Accomplishments that we're proud of

Shipping it. Spokn went from an idea to a live app on Google Play, built by one developer. Getting there meant passing Google's closed-testing requirement with real testers who actually used the app, not just installed it.

Zero-friction first entry. You can open Spokn and record your first journal entry without creating an account, signing in, or seeing a paywall. Behind the scenes, the backend quietly creates an anonymous identity with its own signed token, so the first experience feels like "just open it and talk." That identity can later be upgraded to a Google account without losing anything.

Goal detection that doesn't nag. Offhand intentions like "I want to start running again" are detected in the same AI call that writes the summary. Nothing surfaces until a goal comes up more than once. The threshold also adapts to each user: dismissing suggestions makes them rarer, and accepting one brings them back quickly. It's a simple moving average, not a model, so it adds almost nothing to per-entry cost.

A simple, honest paywall. The only thing Pro unlocks is unlimited entries. Mood tracking, goals, weekly digest, and backup work on every plan. The free-entry limit is a single database value, updated atomically, so it can't be double-spent by concurrent requests and can be changed without shipping an update. That's how testers got unlimited access during validation.

What we learned

On-device AI isn't there yet for real users. On paper, fully local speech-to-text and summarization is the perfect privacy story. In practice, accuracy on rambling, unstructured speech and device support weren't good enough for an app that has to work for everyone.

A privacy promise is only as strong as your vendors' terms. I learned to read the data-use terms of every provider in the pipeline, not just their pricing pages. Free and paid tiers of the same API can have very different rules about training and retention, and your in-app copy has to match what's actually true.

Keep each tool in its lane. RevenueCat is excellent at subscription state. Asking it to also track free-entry usage would have created a second source of truth. The backend owns usage, and RevenueCat owns subscriptions.

What's next for Spokn

  • iOS. The auth, networking, and data layers are already shared Kotlin Multiplatform code, so an iOS app is mostly a SwiftUI UI layer on top.
  • Revisit on-device processing as on-device models improve and reach more devices. The goal is still that entries never need to leave the phone.
  • Deeper insights over time. Patterns across weeks of entries (mood trends, recurring themes, goal progress) instead of single-entry summaries.

Built With

Share this project:

Updates

Submission history