Voice Journal
Personal Project · 2025
Voice Journal lets you speak an entry the way you would leave a voicemail for a friend. A two-stage Claude pipeline turns that into structured reflection, asks you follow-up questions, and tracks emotional patterns across entries.
Built solo in Expo and React Native, inspired by Lenny Rachitsky's vibe-coding process.
Abstract
During a quarter abroad I journaled every single day and it was easy because I had so much to say. But when I came home, sitting down to journal just seemed like another mundane task. I would open a blank page, get impatient with it, and close it again.
But I still wanted to reflect without the friction of writing it down, and I was reminded of all the times I sent a voice memo to my long distance high school friends to update them on my life. What if journaling could be as easy as leaving a voicemail for a friend, where you speak with no structure or format and something else does the work of making it useful.
Around the same time, I came across Lenny Rachitsky's post on how he vibe-coded LennyRPG through a six-step process: define the core idea, create a PRD through AI interview, build a proof of concept, add remaining features, polish, then ship. I wanted to test this idea using this project.
Before writing any code I went through the voice and reflection apps already on the market to find where they fell short, then wrote How Might We questions to turn those gaps into product decisions.
Competitor analysis
Pillowtalk
Voice journaling · emotional insights
Turns daily voice entries into character strength cards. Replies to your journal, surfaces patterns, and generates psychology-rooted prompts. Strong aesthetic.
Key difference
Insights feel curated but surface-level. There is no structured data extraction behind the scenes, and the follow-up system seemed like a preset worksheet instead of a conversation.
Glimpse
Visual journaling
Short video and photo-based journal entries with lightweight reflection prompts. Focuses on visual memory capture over deep self-analysis.
Key difference
Built for recall rather than reflection. There is no AI reasoning layer underneath it, so nothing tracks emotional patterns and no follow-up responds to what I actually said.
Honestly
Gamified wellbeing journaling
Gamifies journaling with streaks, weekly recaps, mood tracking, and wellbeing insights. Makes the habit feel rewarding.
Key difference
Gamification gets you writing more often without getting you to write more deeply.
How Might We questions
HMW make one spoken entry the complete input for mood, gratitude, goals, and concerns, so there's never a separate form or tracker to open?
Feature decision
EntryExtract (Stage 1 Haiku) captures seven structured fields from every transcript in a single pass: mood and intensity, key topics, people mentioned, decisions, goals, concerns, and gratitude moments.
HMW make journaling feel as effortless as leaving a voicemail for a friend?
Feature decision
Voice-first input with zero pre-recording structure. Follow-up questions are delivered conversationally after the fact, and each one can be answered by typing or recording a voice reply.
HMW eliminate every setup barrier between 'I want to reflect' and 'I'm reflecting?'
Feature decision
On-device ASR is the default transcription path without needing an API key. AsyncStorage keeps everything local, which removes the account, the login and the sync step. The record screen opens in one tap.
HMW make every 3-minute voice entry worth more than 30 minutes of traditional journaling by turning spoken thoughts into something I can act on?
Feature decision
Stage 2 Sonnet generates three personalized follow-up questions, three concrete insights, and a 1–2 sentence emotional pattern note per entry.
The PRD was built through an AI interview, with answers used to produce a detailed implementation plan.
Two-stage AI pipeline
If I were to upload every transcript into a model and just call an API to analyze the transcript, the cost would be astronomical. In order to reduce the cost, I called Haiku to extract a compact structured JSON first from the transcript, so Sonnet only sees that ~200-token summary to generate insights and questions.
Voice Recording
expo-av · m4a file
On-Device ASR
expo-speech-recognition · no API key
Raw Transcript
500–3,000 words · stored locally
Stage 1: Haiku
Extract JSON: mood, topics, people, decisions, goals, concerns, gratitude · ~$0.0003/entry
Compact JSON ~200 tokens
transcript never forwarded
Stage 2: Sonnet
3 follow-up questions + 3 insights + emotional pattern note · ~$0.003/entry
AsyncStorage
full entry saved locally · no cloud required
Entry Detail Screen
transcript · insights · follow-up Q&A
Total cost per entry: ~$0.003, vs. $0.015–0.03 if the raw transcript went to Sonnet directly. The two-stage approach cuts cost by ~10× while improving output quality, since Sonnet reasons over clean structured data instead of noisy raw speech.
I followed the Proof of concept first approach from Lenny's framework to validate my ideas before polishing
Proof of concept
The goal was to verify the two-stage pipeline produced usable output before investing in any design work.
V2: features complete
Full feature set built out: follow-up questions with voice reply support, home list with mood and duration, entry persistence and deletion with audio file cleanup, onboarding for API key setup.
Final: polished UI
End-to-end UX pass: visual hierarchy, spacing, recording animation, waveform visualizer, haptic feedback on record start/stop.
None of the competitors had a longitudinal trend analysis, and I wanted to implement pattern identification across weeks of entries to surface deeper insights.
The problem
Storing raw transcripts for trend analysis is expensive and heavy. A 3-minute entry produces 500–3,000 words. Sending even a week of transcripts to a model for pattern analysis would cost an order of magnitude more per session, and it would also create a growing local storage problem.
The solution
The two-stage pipeline already solves this by design. Stage 1 produces a compact EntryExtract JSON for every entry, about 200 tokens capturing mood, topics, people, decisions, goals, concerns, and gratitude. This can become the long term memory layer, and a trend analysis call reads seven compact JSONs instead of seven raw transcripts
What's Next
A pattern bank built from recurring topics, emotions, and goals across all entries
Personalized journal prompts generated from that pattern bank, rooted in past conversations
Mood trend visualization without a separate tracker