Inspiration

I wanted to build the product those 1,000 people actually needed: a standalone app where you set your context once, pick a coach, and start getting value in under 90 seconds - no prompt engineering, no setup, no friction.

What I Learned

The biggest insight was that personalization is the product. Early versions without the personal context system felt like every other ChatGPT wrapper. The moment I added values, goals, and bio the conversations became genuinely useful. A coach that knows you're a founder with a two-year-old and a bias toward overcommitting gives fundamentally different advice than a generic assistant.

I also learned how much RevenueCat simplifies subscription management. What I expected to be the hardest part of the project (App Store payments, entitlements, receipt validation) turned out to be one of the most straightforward.

How I Built It

React Native with Expo for the mobile app. Supabase for everything on the backend - auth, Postgres database, edge functions, and storage. All AI calls are proxied through Supabase Edge Functions so the app never touches an API key directly. RevenueCat handles subscriptions and syncs entitlement state back to Supabase via webhooks. Zustand and MMKV for fast local state and offline chat caching. The whole stack is five tools that fit together cleanly.

The coach engine - the system that assembles personalized prompts from coach config, personality sliders, and user context is where most of the product thinking lives. It's what makes two different coaches feel like two different people, even though they're powered by the same model underneath.

Challenges

The hardest part wasn't building the features — it was making sure everything that worked in dev actually worked in production. Locally, you control the environment. In production, you're dealing with App Store review constraints, edge function cold starts, RevenueCat webhook timing, real-world network conditions, and the gap between Expo Go and a real production build. Things that ran perfectly on my device broke in subtle ways once deployed.

Closing that dev-to-production gap took quite a bit of effort

Built With

Share this project:

Updates