Inspiration
Simon's brief described something specific: "What if AI coaching were as calm, accessible, and intentional as a meditation app — but designed to help you make real progress?" That line stuck. Most AI coaching apps are just ChatGPT with a personality. You type, it responds with encouraging text, and then you close the app with nothing to show for it. That's not coaching — that's a chatbot.
Real coaching produces something. A coach listens to you ramble about a decision you're stuck on, asks the questions you didn't think to ask, and then gives you a framework: here are your options, here's how they compare, here's what I'd look at next. You walk out with clarity, not just conversation.
That's the gap. AI can already have good conversations. What it doesn't do — in any coaching app I could find — is produce structured, actionable output from unstructured conversation. That became the core idea: unstructured input, structured output.
What I Built
Helm is an AI coaching app with four specialized coaches that produce structured artifacts — decision matrices, action plans, reflection frameworks, and drafted messages — as natural outputs of conversation. You talk like you would to a real coach. The coach figures out what you need and produces it.
Beyond artifacts, Helm has persistent context (the app builds a coaching profile from your conversations — values, goals, challenges, patterns — and coaches silently reference it), proactive follow-ups (coaches schedule check-ins based on session content, delivered as notifications that deep-link back into the conversation), and a local-first architecture where all data stays on device.
The onboarding flow is designed as the first coaching session — by the time the user reaches the paywall, they've already received a personalized insight based on their inputs. Value before payment.
How I Built It
The frontend is Expo (React Native) with Zustand for state management, Reanimated for animations, and local storage. The backend is Supabase Edge Functions routing to Claude Sonnet through OpenRouter. Payments are handled by RevenueCat.
The repo is structured as a monorepo — frontend and backend together — specifically to support AI-assisted development. I used Claude Code and Codex heavily throughout the build. The approach was vibe engineering rather than pure vibe coding: AI handled implementation velocity, but architectural decisions, animation tuning, system prompt design, and UX polish were all manual. Readable, maintainable code was a priority despite rapid iteration.
The hardest design problem was the artifact system. Getting the AI to produce structured JSON that validates cleanly, renders beautifully, and appears at the right moment in a conversation — not too early (feels forced), not too late (user's already moved on) — took significant prompt engineering and iteration. Zod validates every artifact response. Each artifact type has a dedicated render component.
Challenges
Artifact timing. The AI needs to know when a conversation has enough depth to produce a meaningful artifact versus when it should keep asking questions. Too eager and it produces shallow frameworks. Too conservative and the user never sees the differentiating feature. I solved this by tuning the system prompts with specific trigger conditions — and for demo/review, lowering the threshold so testers experience artifacts in shorter sessions.
Coach differentiation. Four coaches need to feel genuinely different — not just different system prompts producing similar responses. Each coach has distinct personality traits, question styles, and artifact types. North Star is direct and produces decision frameworks. Lens is Socratic and produces reflection structures. Getting this right required iterative prompt tuning with real conversations.
Local-first with AI. Keeping data on-device while needing server-side AI processing creates an architectural tension. Conversations are sent for inference but not persisted server-side. Follow-up scheduling uses local notifications, not push infrastructure. This simplified the backend but required careful state management on the client.
Proactive follow-ups. Scheduling a notification that deep-links into a specific session, with a contextual check-in question generated from the AI's analysis of the conversation, involves coordination across the AI response parser, local storage, notification scheduler, and deep link handler. Getting this to feel seamless — one tap from notification to resumed session — was more complex than expected.
What I Learned
The biggest lesson was that the differentiator isn't a feature — it's a framing. "AI coaching with structured outputs" is a feature. "You talk, the coach thinks, then this happens" is a product. The artifact expanding from a card in the chat to a full-screen framework is a moment, not a spec item. Building for that moment — the animation, the timing, the hold — mattered more than adding more features.
Also: AI-assisted development with tools like Claude Code is genuinely fast, but the quality ceiling depends on the human's taste. The AI can implement anything, but knowing what to implement, what to cut, and when the animation timing is 50ms too fast — that's still the builder's job. Vibe engineering requires knowing what good feels like.
Built With
- expo.dev
- openrouter
- reanimated
- revenuecat
- supabase
- zod
- zustand
Log in or sign up for Devpost to join the conversation.