-
-
Overthinking is a fox. Putting it off is a bear. People-pleasing is an octopus. Your pattern gets a character of its own.
-
Onboarding is a walk, drawn in Skia: pick what keeps showing up, then walk your loop one answer at a time.
-
Your last answer closes the path into an 8, and a light runs it in your own words. It’s not you. It’s a loop.
-
Press and hold where the loop crosses. The light gathers and your character wakes in its Rive reveal.
-
The Thread is home: your character reads your loop three ways, you pick the truest, then talk it through in writing or out loud.
-
The Breakable Loop, drawn in Skia: a light runs your loop in your words. Find a way out opens it at one part.
-
Every reading ends in one small move to say, do or notice. The move you keep becomes a card you check in on.
-
SwiftUI widgets: a lit window onto your character’s night, carrying the move you picked to the Home Screen.
-
The RevenueCat paywall lays out the week: everything opens today, a note on day 6, and nothing to pay if you cancel by then.
-
On the App Store for iPhone. Built for Shipaton 2026 with Expo, React Native, Skia, Rive, SwiftUI widgets, RevenueCat and Claude.
-
App icon
-
The real first screen: a light finds the pattern that keeps showing up.
-
The reveal, in the app: your loop wakes up as the Octopus.
-
Moves, in the app: the move you're trying stays on its card until you check in.
Inspiration
Most of us are drowning in insight. We know the pattern. We just recognize it too late.
I could always explain my own behavior clearly afterward. The overthinking before a message. The yes that turned into resentment. The burst of motivation that disappeared halfway through. Explaining it never helped me catch it while it was happening, and that gap between knowing and catching is what Unloop is built for.
Before the iPhone app, I built three smaller experiments around the same problem, then a web version of Unloop. It launched as #1 Product of the Day on Product Hunt and was #1 Product of the Month in Health & Fitness, and it reached more than 1,800 organic accounts and generated revenue with no paid acquisition. People clearly wanted it and would pay for it. It also showed me the format was wrong. People mapped a loop once, understood it, and then the map stayed behind while the moments kept happening. So I rebuilt Unloop for the phone, around those moments.
What it does
A few questions turn your pattern into an illustrated character. A fox rehearses every outcome. An octopus says yes before deciding. A bear turns comfort into a wall. There are five in all, and each one has its own world and its own voice.
Then you see the loop itself: what sets it off, where you feel it in your body, the thought, the move you make, and what it costs you. Your X-Ray reading goes underneath it, to what the pattern has been protecting.
After that, everything runs through one place: the Thread, an ongoing conversation with your character. Bring it a moment from your day, a thought that keeps circling, or something you want to understand. It connects what you share with everything you've already explored, so you never start from the beginning.
Out of the Thread come Moves: one small thing to try in real life, offered three ways. Something to say, something to do, or something to notice. You pick the one that fits, your character asks how it went, and the moves you try collect into a hand of cards. The one you're working on can sit on your Home Screen or Lock Screen, so it's there when the moment comes.
Around the Thread:
- Presence. Speak with your pattern out loud, in real time, and ask it what it has been trying to protect you from.
- Prepare. Tell Unloop about a hard conversation or a big meeting, and see the move your pattern is likely to make before you walk in.
- Loops. Tap your loop to go inside it, with teachings and a short story set in your character's world.
There are no streaks and no punishment for disappearing. Reminders come from your character, never "time to journal," and they ease off if you go quiet.
Unloop is an AI-assisted reflection tool. It is a mirror, not a substitute for therapy, and it does not diagnose or treat anything.
How we built it
I built Unloop as a solo founder: the iPhone app, the web app and API, the AI architecture, and the prompts.
- App: Expo SDK 54 and React Native 0.81 on the New Architecture, in TypeScript, with Expo Router and Zustand.
- Motion: the loop and the onboarding walk are drawn in Skia, the five characters are Rive, transitions run on Reanimated 4, and the widget is native SwiftUI.
- AI: Claude writes the X-Ray readings, the Thread's replies and the moves, and a smaller Claude model screens every message for risk. Presence runs on OpenAI's Realtime API over WebRTC, straight from the phone. Deepgram handles live transcription.
- Backend: Next.js on Vercel, Supabase Postgres with row-level security, and pgvector so your character remembers what you've told it.
- Payments: RevenueCat, with an annual plan that has a 7-day trial and a monthly plan without one. The paywall lays out the trial week day by day, including the day to cancel by.
- Measurement: PostHog (with every text field masked in session replay), Sentry and AppsFlyer.
Challenges we ran into
The biggest challenge was our own launch. Unloop 1.0 went live on September 1. People installed it, answered the questions, met their character and started trials. Not one of those trials converted to paid.
The feedback was the same everywhere: the app felt disconnected. The reveal, the X-Ray, the evening check-in, the stories and the experiments each worked on their own, but nothing tied them together. You got a striking insight on day one and no reason to come back on day two. And almost all of it was introspection. People understood their pattern better, then walked back into the same week with nothing to do differently.
So two weeks after launch, I went back to the storyboard and reworked Unloop as one experience. The answer is the Thread, one conversation that ties everything together, and Moves, which turn what you've understood into something to actually try in your day. The introspection is all still there, and there's a lot of it, but now it leads somewhere. Version 1.0.4, four weeks after launch, is that rebuild. The Thread and Moves first went out in 1.0.3, and since then, trials have started converting to paid.
Two technical challenges shaped it too:
- Safety. Every message in the Thread and every spoken turn in Presence passes a risk check. In Presence, the realtime session starts muted, so the model can't speak until our server clears the turn. If something reads as a crisis, the character steps aside and the 988 Lifeline comes up. Getting that right in both directions was hard: one early version sent "I have a meeting in an hour I'm not excited for" to the crisis screen, because it was still reading an earlier, heavier conversation.
- A character that doesn't repeat itself. Whatever words the prompt used came back in the output, and telling the model to avoid a phrase made it show up more. What worked was rotation: each response gets a different angle to open from, and a test harness counts repeated four-word phrases across 40-run batches.
Accomplishments that we're proud of
- Launching on September 1, then rebuilding the core of the app within the same month instead of polishing the version that wasn't working.
- Five characters, each with its own world, voice and Rive animation, that make a pattern feel like something you can talk to instead of something wrong with you.
- Live voice where safety is enforced by the architecture, not only by the prompt.
- Moves that show up where life happens: a check-in from your character, and the move you're trying on your Lock Screen.
- Before the app existed, the web version was recommended in Recomendo, the newsletter from Kevin Kelly, Mark Frauenfelder and Claudia Dawson.
What we learned
- Insight alone doesn't change anything. People need one small thing to try in the moment, and a reason to come back and say how it went.
- Six good features can still feel like no product. The same pieces started working once they lived in one conversation.
- The pattern isn't the enemy. When the character talked like an opponent ("you beat me last time"), change turned into a fight with yourself. It reads truer as the part of you that has been trying to protect you.
What's next for Unloop: Meet Your Patterns
The app works. The next job is getting it in front of the people it's for.
- UGC around the reveal. The moment your loop turns into a character is made to be filmed: creators answer the questions on camera and react to finding out they're the fox or the octopus. Five characters means five hooks, and "which one are you?" starts the comments on its own.
- One funnel per pattern. Each character already has its own world page on the web and its own App Store product page, for overthinking, people-pleasing, putting things off, scattered focus and not belonging. Next is creator content and ads for each one, measuring which pattern converts and stays.
- Sharing inside the app. The reveal already ends with an "I am the Octopus" card to show a friend. Next: compare your pattern with a friend's or partner's, and share a Prepare forecast that turned out right.
- Presence that remembers. Voice conversations that carry what you've already talked about, the way the Thread already does.
Built With
- anthropic-claude
- appsflyer
- deepgram
- expo-router
- expo.io
- google-sign-in
- lottie
- next.js
- openai-realtime
- postgresql
- posthog
- react-native
- react-native-reanimated
- revenuecat
- rive
- sentry
- sign-in-with-apple
- skia
- storekit
- supabase
- typescript
- vercel
- webrtc
- zustand

Log in or sign up for Devpost to join the conversation.