iOS · Selected work
Courai
Courai is a CBT-based iOS app for social anxiety: daily micro-challenges that expand your comfort zone in small, concrete steps. Built solo in React Native with Supabase.
5.0 · 10 ratings
- React Native
- Expo
- TypeScript
- Supabase
- Zustand
- NativeWind
- RevenueCat
v1.31.0 · updated Sep 23

Problem
Most social-anxiety tools are either clinical homework or vague “get out more” advice. People need small, daily, CBT-shaped steps that do not require a therapist appointment to start.
I also wanted to prove I could ship a real iOS product end-to-end — auth, offline behavior, paywall, privacy — not only web apps and course demos.
Approach
Courai is my first mobile app, built solo. Daily micro-challenges, 30-day levels, streaks, an offline action queue, and optional premium task packs.
Auth and data sit on Supabase. Client state uses Zustand. Styling is NativeWind. Paywall rules go through RevenueCat so store receipts stay out of my own backend. Telemetry is privacy-first with PostHog — enough to see where people stall, not a growth-hacking event firehose.
Tradeoffs
Freemium with a trial and a paywall after the free days — stated in the listing, not hidden. iOS only for now; I would rather ship one solid platform than a half-broken second.
CBT content is carefully framed as self-help practice, not therapy. That constraint shapes copy, onboarding, and what the app refuses to claim. Offline queueing makes the daily habit work on a train, but it also means conflict rules when the device comes back online.
Outcome
Shipped on the App Store after years of web work. Free to try; no fake scarcity copy. The marketing site and App Store listing stay aligned on what the free days cover.
What I learned
Solo mobile is mostly product judgment under App Store rules: privacy labels, paywall clarity, and content that does not overclaim. RevenueCat saved weeks versus hand-rolling receipt validation.
What broke early: assuming “always online” for challenge completion. The offline queue forced clearer domain events. What I would deepen next: better first-week coaching in-app, and Android only after the iOS loop feels boring in a good way.