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. I also started without talking to a single user, and that turned into a real pivot before launch. I go through that below, mistakes included.

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.

Process

Docs→Branding→Design System→Vibe Coding

Two AI tools, two different jobs

I used GPT and Claude Code together on purpose, not interchangeably. GPT was good at expanding and organizing what I already had in my head, but it read as too optimistic by my own standard. So I’d think things through with GPT first, then review and lock the actual decision with Claude Code.

Choosing what not to build

I didn’t draw every screen the way I used to. Only the screens that had to exist, and only the color chart and UI components the product actually needed for a real design system. Deciding what not to make was as much a design decision as anything I did draw.

For the build itself, I connected Claude Code directly to the Figma files, so it could read the real screen specs and the visual language I’d already defined and carry them straight into code.

Problem Space

What do people usually do the moment an idea or a thought hits? Type it into a notes app. Snap a photo or a video if it’s a scene. Post it to an Instagram story, fairly immediate. Write it by hand in a notebook.

Should an idea have to be shaped by whatever tool happens to be nearby? An idea can’t exist as itself, it gets limited by the tool that caught it.

Does an idea exist independently as only text, or only an image, or only a sound? It doesn’t.

And people don’t go back and look at what they captured. They forget it, even when it was a genuinely good text, image, or whatever it was.

An idea is synesthetic. It doesn’t exist in one sense alone. Which means the moment it occurs, it has to be captured raw, unrefined, exactly as it happened.

Target Definition

Idea capture tools are optimized for one sense at a time, usually text. My reasoning was that creators who work in raw fragments, a field recording, a sketch, a half-hummed melody, would feel that mismatch hardest, since none of those fit neatly into a note app built for words.

Sensory-based creators

Sound artists and field recorders, visual designers, illustrators, and architects, cross-media creators, and anyone who accumulates raw references. What they have in common: they’d rather capture a fragment than a finished piece.

A secondary audience showed up later, too: overthinkers who just need to get a fast-moving thought out immediately. That’s actually the word I used in the Idea Shower Instagram bio, more on that in the marketing section below.

Hypothesis

Instinct, not convenience

The question I actually needed answered wasn’t whether recording by voice was convenient. It was whether it was instinctive, whether people would mutter an idea out loud before they’d ever think to type it.

Relief, not anxiety

Most capture apps ask you to tidy things up for later. Idea Shower asks you not to. The test wasn’t whether that felt uncomfortable, it was whether it felt like relief.

A reason to come back

The real retention question wasn’t DAU or MAU, it was whether people ever came back and pressed play on something they’d already recorded. If nobody had a reason to listen again, this was just storage with extra steps.

A trace, not a flex

The share cards weren’t meant to be a flex. The bar I set for myself was whether sharing one felt like leaving a trace, not publishing a finished piece.

The only metric that mattered

I didn’t want to watch MAU or download counts. The one thing that would tell me the MVP worked: does someone still open this two weeks later because nothing else does what it does for them.

What I let go of on purpose

A polished organizing UX. Mass-friendly onboarding. Over-explaining. Leading with AI. Obsessing over usability polish. The MVP could be rough. The philosophy behind it couldn’t be.

I expected the reaction to this to be quiet, and I think quiet is actually the scariest kind of good sign. If someone ever tells me they never mentioned the app to anyone because they just wanted to keep it for themselves, that’s the moment I’ll know it worked.

Before Pivoting

The pivot didn’t happen on paper. By the time it hit, the product spec was locked, and the design system and screen designs were over 70% done. Here’s what Idea Shower looked like before that.

A mascot

I designed a rubber duck, the kind kids play with in the bath, as the app’s guide character. It came with strong color contrast and got cuter the more I refined it. But the more I designed it, the more I doubted the direction. The app’s target isn’t Korea alone, it’s a global audience of people who take their ideas and inspiration seriously. Would that cuteness get in the way of that?

A community

A space to share ideas with other users. But sharing an idea and sharing your day are two different problems, and I wasn’t confident I understood the actual intent behind sharing here. The doubt stuck.

A choice on the home screen

Sound, text, or image, pick your capture method. It didn’t hold up against the one word the whole product was supposed to be built on: immediate.

Those three doubts are what finally pushed me to run user interviews.

User Interview

I talked to sound artists, a composer, a makeup artist, and a handful of people who just journal or keep notes for themselves.

Hyemin

Sound Artist

Youngseon

Composer

Arpine

Makeup Artist

Yoonhwa

Publishing Editor

Jay

Surfer, keeps notes out of habit

Hansol

Writes in a journal every day

Dave

Architect, composes as a hobby

They’ll show the result, never the mess

More than one person told me a version of the same thing: they’re fine sharing a finished piece, but they never want anyone to see the raw process behind it. That’s what killed the community feature before I’d even finished building it.

Organizing it kills the feeling

One person used to journal, but she kept trying to tidy her raw thoughts as she wrote them, and it wiped out the actual feeling she was trying to capture. She stopped journaling entirely because of it.

Nobody could find their own notes again

The most common complaint wasn’t about recording, it was retrieval. Notes scattered across a notes app and a diary, hundreds of reference images saved to Pinterest, nothing findable when it actually mattered. That’s what convinced me the AI keyword pass wasn’t a nice-to-have.

Voice is the instinct, not a workaround

A sound artist I talked to said talking is just easier than typing for her, full stop. She also asked if I had speech-to-text, because listening back to her own voice memos to recall an idea felt like a chore. That’s the whole reasoning behind pairing every recording with an automatic transcript instead of picking one or the other.

Problem Statement

Ideas get flattened into one sense

Most capture tools force a multi-sensory thought into a single mode, usually text, and it stops being what it actually was.

Organizing it kills the feeling

Asking someone to tidy up a raw thought before saving it changes it enough that people give up on logging it at all.

Captured ideas get lost, not revisited

Even when people do capture something, they rarely find it again. Scattered notes and unsearchable references mean the idea might as well not exist.

Sharing feels like exposing the mess, not the work

Creators are fine showing a finished piece, but capturing something anywhere that might expose the unfinished process behind it makes them hesitate to log it in the first place.

Goal

Capture it immediately

An idea or a flash of inspiration doesn’t exist in just one sense, and it shouldn’t be refined before it’s recorded. It has to be captured the moment it happens, raw.

Find it again in your own words

Finding what you recorded shouldn’t be complicated either. You should be able to search for it the same raw, unstructured way you’d describe it to yourself.

Make it extendable

It shouldn’t stop at recording. The product should help turn that captured idea into something you can actually build on.

Tech Spec Defining Story

These decisions took about a month to land on. I’d built products before and could talk to engineers, but I’d never written the code myself, so even working with AI meant learning as I went. Two things ended up mattering more than anything else: scalability and user experience.

Native, not web

I went native instead of web. Capturing and holding onto an idea felt closer to ownership than to browsing, and I wanted the animations and interactions to feel as sensory as the thing they were recording. I built it in React Native with Expo so one codebase could cover iOS and Android without the overhead of managing native build environments myself, time I’d rather have spent on the product.

Supabase over Firebase

I almost built this on Firebase. It’s faster to set up and the free tier goes further. I kept asking myself whether I’d actually migrate off it later, and kept landing on the same answer: probably not. Idea Shower was never going to stay a simple notes app, ideas connecting to other ideas, heavy search, AI features that would keep expanding, and that shape wanted a relational database more than a document store. I didn’t want to be rebuilding the backend from scratch six months in, so I chose Supabase up front.

A backend proxy for AI, not direct calls

Calling OpenAI directly from the app would have been the fastest way to ship, but it meant shipping an API key inside the app, which isn’t something you can walk back after an App Store release. So I added a backend proxy, kept as thin as possible: one small function that only handles AI requests, while the rest of the logic stays in the app. It protects the key, lets me swap models later without touching the app itself, and it’s the same piece of infrastructure I had to patch for a billing-abuse gap after launch (more on that below).

Local-first, not server-first

My first plan was to save and upload to the server at the same time. But an idea doesn’t wait for a good connection, it can hit on a plane, or somewhere with no signal at all. So I flipped the order: save to the device first, always, and sync to the cloud afterward for anyone signed in. Offline support and instant saves by default, not as a special case.

Every one of these decisions started from the same question: build it fast, sure, but not so fast that I’m rebuilding it from scratch six months later.

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.

Brand Experience Design

The concept was “shower,” which is also where the name comes from. Showering is scientifically proven to relax you into more creative thinking, but the moment you towel off and step out, that thought is usually gone. In the product, the water itself became the idea: every droplet is a thought, some fall and disappear, but the real ones survive the fall. Every interaction, animation, and visual choice in Idea Shower comes back to that one image.

Brand Experience Design →

Expecting User Journey

An idea surfaces. Or this scene, this sound, hits me.

Open the app.

Tap the button. The shower starts.

Record. A sound, my own voice, whatever it is. The water falls.

(Or record it again.)

The recording saves. One more drop, out of many, lands.

Three poetic AI keywords come back. Three small droplets arrive with them.

Add an image, edit the text, rename it.

(Or record it again.)

And just like that, my idea capsule saves.

Open up my archive of capsules. Look through them again. There are so many now.

Reach for that feeling again, search by a keyword, or by whatever word comes closest.

Found it.

Open it. Sit with the idea and the state of mind it came from. Read the AI’s keywords again.

A connected idea clicks into place.

Feature

01

Record

Tap once and talk. The orb listens while the waveform keeps pace.

02

Capture

Name it, keep or trim the AI keywords, and check the transcript before saving.

03

Capsule

Every idea lands in Capsules as a card you can play back anytime.

04

Share

Turn a capsule into a Shower Thoughts card to save or post.

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.

33 downloads to date (30 first-time, 3 redownloads), mostly from App Store search and referral traffic. Retention isn’t something I can report on yet, App Store Connect itself says “not enough data.” Still very early days.

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.

I shipped before I had a business model

I wrote a product spec, a tech spec, a UX writing guide, and a brand strategy before touching code, but never a plan for how the app would actually make money. Now that it’s live, I’m retrofitting pricing and monetization onto a product that was never designed to sell anything, and it shows.

Marketing is the part I still haven't figured out

Marketing was never part of the plan. I wrote specs for the product, the tech, even the brand voice, but nothing for how people would actually find the app. So I improvised after launch: 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.