Inspiration

When someone is exhausted, two things become harder at the same time: explaining how they feel and knowing how to care for them. Journaling apps usually stop at self-reflection, while messaging apps assume people already have the right words.

We built Emopi for the quiet space between those moments. It supports everyday care between partners, spouses, close friends, and adult family members without turning private reflection into surveillance.

What it does

Emopi is a private AI journal and relationship-care app built around one-to-one connections.

  • Write in short, low-pressure fragments. Emopi turns them into a daily reflection with mood, energy, and topic signals.
  • Keep the journal private. The original entry is never shown to a connected person.
  • Choose whether to share a small, summary-level status—mood and energy—with up to two trusted one-to-one connections.
  • See gentle care suggestions that help you decide how to respond without revealing the other person's private details.
  • Talk in a space that deliberately omits messenger conveniences—no images, stickers, or calls—so conversations stay slower and more thoughtful.
  • Before sending, AI may offer wording options. The user can keep the original, edit a suggestion, or ignore it; choosing one only returns it to the draft. AI never sends a message or speaks on the user's behalf.
  • Control sharing item by item, pause or end a connection, block another user, report content, revoke AI consent while keeping the app usable, and delete the account.

Emopi is designed for daily care, not diagnosis, therapy, or emergency support.

How we built it

We built the iOS and Android apps with React Native, Expo, and TypeScript in a Bun and Turborepo monorepo. The backend is written in TypeScript with Connect RPC, PostgreSQL, Supabase, and Drizzle ORM. Better Auth handles email and social sign-in.

The AI layer uses OpenAI as its primary provider. Its provider boundary also includes a tested, explicitly enabled automatic failover path to Google Vertex AI Gemini. AI supports journal reflection, summary-level status generation, care suggestions, and optional message-writing suggestions.

Product boundaries are enforced in application code: connected-user-facing models never receive the journal conversation type; the only AI-generated free-text output that crosses the privacy boundary is independently screened and dropped on any failed check; and privacy-safe analytics never include journal or Talk text. Crisis-related content bypasses normal AI generation and shows deterministic supportive copy with external resources.

New Talk messages use end-to-end encryption once device keys are established. During initial key setup and for legacy messages, content remains protected with application-layer encryption. Journal data uses application-layer encryption because the user explicitly consents to AI processing for journal features. AI consent is scoped, recorded, and reversible.

RevenueCat and product-family monetization

RevenueCat is part of the product architecture, not only the checkout wiring.

Emopi is the relationship-care product in a two-product family built on a shared backend. Emopi serves people who want to care for each other through one-to-one connections; Emopi Diary is a separate solo product for personal journaling and self-reflection. They share identity, encrypted journal infrastructure, scoped AI consent, and billing synchronization, but ship as separate iOS and Android apps with distinct bundle IDs, navigation, store assets, positioning, and product-specific Offerings. Emopi Diary contains no connection, Talk, sharing, or care experience.

In one RevenueCat project, we configured four mobile app integrations—iOS and Android for each product—plus separate Paddle Live and Sandbox web-billing configurations. Every app uses the same authenticated custom App User ID, so access follows the person across apps and platforms.

Emopi Diary extends the product family to web billing through RevenueCat and Paddle. Its web paywall is implemented and verified end to end in sandbox but is not yet publicly deployed. A sandbox web purchase of the annual Diary product grants the same diary_plus entitlement as its App Store and Google Play products, unlocking the same journal capability in iOS and Android after synchronization without creating a parallel plan or a second authorization system.

We model access with two explicit RevenueCat entitlements:

  • plus unlocks Emopi's relationship-care capabilities.
  • diary_plus unlocks the journaling capabilities shared across the product family.

Emopi Plus products grant both plus and diary_plus. Emopi Diary Plus products grant only diary_plus. This deliberately asymmetric entitlement model lets the broader relationship-care plan include the solo journal experience without allowing the journal plan to unlock relationship features.

Each product selects its own fixed Offering, and App Version Targeting protects older builds during the multi-product rollout. Our backend mirrors all subscription sources and entitlement capabilities from RevenueCat, then authorizes features by capability rather than inferring access from store product IDs. This prevents entitlement drift and reduces the risk of accidental duplicate purchases when the same account moves between products, stores, or devices.

Emopi offers monthly and annual subscriptions with a seven-day trial. RevenueCat handles purchases, restore flows, CustomerInfo, entitlements, custom App User IDs, and webhook-driven backend synchronization.

The key monetization decision is connection coverage: one Emopi Plus subscriber can unlock relationship-care AI across up to two connected relationships, so invited people are not asked to pay before experiencing the product's value. Free users can still journal and start a basic connection. Writing itself is never limited: when the free AI budget is spent, the journal falls back to writing by hand rather than a hard stop. Privacy, safety, deletion, and narrower sharing controls are never paywalled.

Challenges

The hardest challenge was preserving a strict boundary between private reflection and connected experiences while keeping the product useful. We treated that boundary as an architectural constraint, not a promise added in copy.

A second challenge was designing AI that helps without claiming to know someone's true intent. Emopi suggests, labels generated output, and leaves every sharing and sending decision to the user.

A third challenge was making one account and one backend support two genuinely distinct products without entitlement drift, duplicate purchasing, or relationship features leaking into the solo product. RevenueCat entitlements became domain capabilities, while store product IDs remained billing inputs rather than authorization rules.

A fourth challenge was two-person activation. The subscription coverage model, connection flow, three-state test accounts, and two-device scenarios were designed together so invited users can reach value with less friction.

Accomplishments

  • Emopi launched publicly on iOS and Android on August 17, 2026, inside the Shipaton submission window.
  • Passed Apple's combined first-submission review for the app, subscription group, monthly plan, and annual plan, as well as Google Play review.
  • Shipped Japanese and English product experiences and store materials.
  • Completed production RevenueCat purchase, restore, entitlement, Offering, App Version Targeting, and webhook flows.
  • Built a shared-backend product family with separate mobile apps and asymmetric cross-product entitlements.
  • Created deterministic Maestro scenarios covering onboarding, journaling, connections, sharing boundaries, Talk, subscriptions, and the account lifecycle.
  • Implemented privacy-safe product analytics that record actions and aggregate outcomes without journal or Talk content.

What we learned

The most important product lesson was that restraint must be visible. Users should not have to trust an abstract privacy claim; the interface and system boundaries should make it clear what stays private, what may be shared, and who performs the final action.

We also learned that monetization can reinforce the product's values. Covering the connected experience through one subscription reduces payment friction at the exact moment when two people are trying to begin caring for each other.

Building the product family also changed how we think about entitlements. Modeling them as durable capabilities, independent of individual store SKUs, made the pricing hierarchy clearer and gave us a safer foundation for cross-app access.

What's next

Emopi is now live in the United States and Japan. Next, we will measure privacy-safe activation, retention, and subscription conversion through RevenueCat; bring Emopi Diary to its own public release—its store builds are already in TestFlight and Play internal testing, and its web billing is verified in sandbox; and use those signals plus consented user feedback to improve onboarding, care suggestions, the connection experience, and cross-product upgrade paths without weakening the journal's privacy boundary.

Built With

Share this project:

Updates

Submission history