Idea Shower home screen prompting the user to tap and capture a thoughtIdea Shower recording screen with a live waveform, reading Ideas are pouring inIdea Shower save screen with the transcribed capsule ready to edit

Voice-first idea capture, designed and shipped solo

IDEA SHOWER

Solo ProductiOS · App Store

Summary

Idea Shower started from a problem I kept running into myself. The best ideas show up in the shower, on a walk, or right before falling asleep, and by the time I sat down at a laptop, they were gone. I designed and built an iOS app that lets you capture a thought by voice in seconds, turns it into a searchable “capsule” with AI-extracted keywords, and gets out of the way. This wasn’t a client brief. I owned the product decisions, the interaction design, the React Native build, the AI pipeline, and the App Store release myself.

Role

Product & Interaction Design

Defined the core loop, the capsule metaphor, and the onboarding, then validated it against a single MVP hypothesis instead of designing every screen up front.

Build & AI Pipeline

Built the React Native/Expo app end to end, including a two-stage AI pipeline (Whisper transcription → keyword extraction) and the Supabase backend behind it.

Security, Release & Growth

Shipped to the App Store, closed a billing-abuse gap in the AI proxy, and run the build-in-public marketing channel myself.

Live on the App Store — design, mobile app, AI pipeline, and backend, all built and shipped by one person.

Technical Judgment

Closing a billing-abuse gap

The AI proxy that calls Whisper and GPT on the app’s behalf had no auth check. Anyone who extracted the function URL from the app build could call it for free, running up my OpenAI bill with no rate limit. Rather than chase a “zero risk” fix, I prioritized by effort vs. impact: set a hard spending cap on the OpenAI dashboard same day, then enforced JWT verification, then added per-user hourly/daily rate limits for signed-in traffic. The remaining gap, that anonymous requests still aren’t individually rate-limited, is a documented, accepted risk with the spending cap as the final backstop, not a fix I pretended was complete.

Fixing a silent transcription bug

English speech was occasionally transcribed as Korean. The cause was a downstream language classifier overriding Whisper’s own detection instead of being used as a hint. Passing the classifier’s output as a bias signal rather than a hard override fixed it without adding a second point of failure.

Closing a free-tier bypass

The 5-free-capsule login gate counted capsules by querying the local database live, so deleting a capsule reset the count, giving unlimited free AI usage. Switching to a persisted, monotonically-increasing counter closed the loophole without changing the free-tier experience for honest users.

Why I Prioritized This First

A capture app can validate one of two things: that people will actually build the habit of capturing (Hypothesis A), or that what they value is revisiting and organizing what they captured (Hypothesis B). I decided Hypothesis A had to come first, since if the habit never forms, there’s nothing to revisit.

The one number I watched: whether someone saves a second capsule within 7 days of their first. If that’s healthy, the habit is real and Hypothesis B becomes worth testing next. Activation rate, free-tier conversion, and how often people corrected the AI’s keywords stayed as signals I glanced at, not ones I obsessed over. Screen-level analytics and heatmaps I cut entirely — at this stage they’re detail without a decision attached to them.

Growth

Retention and distribution got the same small-scope-first treatment as the product itself: one well-run channel before spreading thin across several.

Daily reminders, not generic notifications

A 9am/9pm local reminder nudges people back into the capture habit at the moments idea capture is most likely to matter, without needing a server round trip or push infrastructure.

Build-in-public over spreading across channels

After engagement data showed a second channel wasn’t pulling its weight, I paused it and put the effort into one channel run consistently — the same “don’t scale until the core signal is real” logic as the MVP metric decision above.

Idea Shower app icon: a rounded comma-shaped mark

Name & mark. A “shower” of ideas is where the best ones actually show up — in the shower, on a walk, half-asleep. The icon is a single closed comma shape rather than a metaphor to decode: it just needed to survive being 40px in a tab bar and still look intentional.

Lessons learned

Pick one hypothesis, not five metrics

Narrowing to a single primary metric made every tracking and product decision faster. There was always a clear answer to “does this matter right now.”

Security work needs the same prioritization as design work

“Effort vs. impact,” not “fix everything,” shipped a real safety net in a day instead of a perfect system that never launched.

Editable AI output beats accurate AI output

Making every AI-generated field editable mattered more than chasing perfect transcription. It turned AI mistakes into a five-second fix instead of a trust problem.

Owning the whole stack changes what you notice

Being the designer and the engineer meant billing risk, a transcription bug, and a growth-channel call all became design decisions I had to make, not tickets to hand off.

Marketing is the part I still haven't figured out

Product and security decisions had a clear way to know if I’d gotten them right. Marketing didn’t. I ran two channels, watched one badly underperform the other despite real effort going into both, and paused it. One post did far better than anything before or since, and I still don’t fully know why. I’d rather post that as an open question than dress it up as a strategy I’ve already proven out.

Thanks for scrolling!Next Project →