Inspiration
I was in Paris on a sabbatical, building another app called Dear, spending most of my days wandering around. I wanted ideas for things to do. I had plenty, museums, bars, restaurants, but that stuff is easy to find online and it gets old fast. What made it actually fun was going with a friend, or it feeling a bit like a dare. Free will was everywhere online at the time and I was already building around the intention-action gap, so a scratch-off you commit to felt like something people would really do. That's the actual problem: you have the free time, but social media eats it. It tells you to go do things while the next video is one thumb away. So Whim is a way to promise you'll do one thing in the real world. Good for your head, and it tickles your brain a bit. It started out very unhinged and we toned it down.
What it does
One thing to do a day, hidden under a scratch-off card. You drag to scratch it and that's the commitment, there's no separate "I agree" button because nobody agrees to something twice. Then you do it or you don't. Every prompt finishes the same sentence: "I have free will. Today I will ___." Eat dinner on the floor. Learn one bird by its noise. Say the nice thing out loud instead of thinking it. 800+ acts and counting, 32 packs, English, French and Spanish. No feed, no scroll, no streak.
How I built it
Flutter for iOS, Android and web off one codebase. Firebase for auth, Firestore, Remote Config, Cloud Functions and Analytics. RevenueCat for subscriptions on all three platforms, web billing through Stripe, Cloudflare Pages for the web build. The first week isn't a random draw. It comes from hand-picked acts that are quick and low-fear, so nobody's first card is a dare they bounce off.
Challenges
Working out who this is actually for. I want it to work for everyone and I probably need to pick a lane instead. I tested whims on friends and family across a wide age range and the split was obvious, the ones that landed hardest with one group were the exact ones another group wouldn't go near. Then four rejections. The trial was "louder" than the price, which only rendered that way for trial-eligible users, so 442 tests passed. A free-week flag meant the reviewer never reached the paywall. Prices fell back to a hardcoded $39.99 when the store didn't answer, so anyone outside the US would have seen a full, plausible, completely fake price list, in dollars, everywhere, and Google caught that one before a single user did. And Sign in with Apple errored on every device except mine. Marketing has given me more heartburn than any of the code, though I suppose that's a whim too.
What I learned
Not being Merchant of Record is worth more than I realised. Apple and Google collect and remit VAT everywhere and you never think about it. The moment you sell the same subscription off your own site you're the seller in every country you sell into, and some have a zero registration threshold. Design it in a design-forward tool first and write the product spec early, then keep refining it. But at the same time, submit to the store as soon as it's nearly ready, because you learn things there you can't learn anywhere else. Four rejections taught me more about my own app than months of building did.
What's next
Packs that rotate seasonally without needing a release, and the web funnel. Mostly though, marketing and localization. I like the idea of this being a properly global app.
Log in or sign up for Devpost to join the conversation.