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.

Role
Solo build
Stack
Expo 54 · React Native · TypeScript
Pipeline
Claude Haiku + Sonnet · AsyncStorage
Fig. 1 · Home screen

Abstract

01Built in Expo and React Native: recording, on-device transcription, a two-stage Claude pipeline, and local storage.
02Two-stage Haiku → Sonnet pipeline cuts per-entry AI cost ~10× vs. sending raw transcripts to one expensive model.
03Four HMWs drove the core product decisions: voice-first input, no-setup recording, conversational follow-ups, and multi-dimensional extraction in a single entry.
01The SparkPersonal need

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.

02Research3 competitors · 4 HMWs

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.

03ArchitecturePRD + pipeline design

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.

04BuildPOC → V2 → Final

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.

Record screen
Transcribing state
Entry detail + AI output

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.

Home, entry list
Follow-up Q&A
Insights view

Final: polished UI

End-to-end UX pass: visual hierarchy, spacing, recording animation, waveform visualizer, haptic feedback on record start/stop.

Login
Recording
Entry detail
AI insights
Follow-up questions
Voice replies
05Key ChallengeLong-term trends

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

1

A pattern bank built from recurring topics, emotions, and goals across all entries

2

Personalized journal prompts generated from that pattern bank, rooted in past conversations

3

Mood trend visualization without a separate tracker