Inspiration
I was the human inbox of my household. Every party invite screenshot, every "we should do dinner Thursday" text, every mental packing list ended with me retyping things into a calendar, a to-do app, and a shopping list- Three apps, three transcriptions, three chances to drop something. The thought behind Missy: what if forwarding a message was the filing?
What it does
Missy is a personal mission-control assistant for iPhone. Forward a message, share a screenshot, snap a photo, dictate, or type- Missy extracts the structured plan hiding inside and files it as calendar events, tasks, and lists.
The part I'm proudest of: linked extractions. One concert-ticket screenshot becomes the event, a "buy tickets" task, and a what-to-bring list- linked together. Check off every item on the list and the task auto-completes; complete the task and the event updates. One capture, a whole connected plan.
Every extraction goes through a confirm screen- the LLM proposes, you approve. Trust is the product: nothing lands on your calendar without your OK, and when the extractor is unsure ("3pm today or tomorrow?") it asks with tappable options instead of guessing.
Shared Orbits extend this to households and trips: shared lists, tasks, and events, so "buy paper towels" disappears from everyone's list the moment someone grabs them.
How we built it
- Mobile: React Native + Expo (dev client), Expo Router, React Query for server state, Zustand for UI state, Reanimated for the spring-based motion system. A custom warm "Soft Cream" design system — Missy should feel like a thoughtful assistant, not a productivity tool.
- Capture: iOS Share Extension writing through an App Group, plus camera, photo library, and on-device speech recognition.
- Backend: API on top of Supabase (Postgres + RLS + Realtime), Clerk for auth (JWT template wired to RLS), LLM-powered extraction pipeline that returns typed entities with linking metadata.
- Realtime & offline: one Supabase Realtime channel per orbit reconciles a React Query cache; captures and mutations queue in MMKV offline and drain on reconnect.
- Monetization: RevenueCat subscriptions + AdMob on the free tier.
Challenges we ran into
- Extraction you can trust. The hard part isn't calling an LLM — it's the product around its mistakes: the confirm loop, enumerable clarification options, and never re-running extraction on user edits.
- Link-or-fork. When a new extraction produces a list matching an existing one, do you merge or fork? We reuse and link by default, but always tell the user ("added to Groceries") — silent merging destroys trust instantly.
- Sign-in race conditions. Concurrent first-run API calls all tried to create the same user row; one duplicate-key crash later, user creation is properly idempotent.
- The App Store gauntlet. Share extensions, App Groups, push token timing, and a RevenueCat test key that force-closed production builds taught us more about iOS release engineering than any tutorial.
What we learned
Capture speed is everything — every second of friction cuts usage. And an AI feature is only as good as its correction UX: the confirm screen, not the model, is what makes people keep forwarding.
What's next
One-tap capture from any screen via an App Intent bound to the iPhone Action Button, iOS 26 Visual Intelligence integration, an iOS widget, and Android share-sheet parity.
Built With
- admob
- claude-(or-whichever-llm-api-you-actually-use-for-extraction-?-swap-in-openai/gemini-as-appropriate)
- clerk
- expo.io
- ios
- llm
- postgresql
- react-native
- react-query
- reanimated
- revenuecat
- supabase
- typescript
- websockets
- zustand
Log in or sign up for Devpost to join the conversation.