Inspiration

I have been fascinated by psychoanalysis for years—enough that I combined my two biggest interests, computing and psychoanalysis, in my master’s work at the Cognitive Computing Sciences Lab (CIC-IPN, Mexico). My thesis, Identificación de relaciones de analogía en análisis de relatos oníricos (Identification of Analogy Relations in the Analysis of Dream Narratives), and a peer-reviewed paper (DOI: 10.3233/JIFS-211895) showed me how powerful dream interpretation can be when guided by free association in psychoanalytic therapy—and how computational methods can surface structure (such as analogy) in dream narratives.

I started building Oneiric Diary about six years ago. Life and work slowed the project until I picked it up again with full focus a few months ago. After reviewing similar apps, I saw a clear gap: most tools feel dated or shallow. As a mobile developer with nearly ten years of experience, I felt both the urge and the responsibility to ship something of my own—modern, thoughtful, and grounded in real psychology rather than fortune-telling.

What it does

Oneiric Diary is a bilingual (Spanish / English) dream journal for capturing dreams and reflecting on them over time.

  • Capture dreams by typing or voice dictation (on-device speech recognition).
  • Edit and delete entries in your personal diary.
  • Light & dark mode for comfortable reading and writing at any time of day.
  • Morpheus interpretation: a structured analysis including psychoanalytic reading, symbols, archetypes, possible connections, and reflection prompts.
  • Emotion analysis per dream.
  • Pattern discovery: word cloud, top-5 frequent words, extracted concepts, and recurring highlighted themes.
  • Statistics: total dreams, activity heatmap, dream-type breakdown (conventional, nightmares, lucid, creative/inspirational), frequency patterns (first-time, occasional, recurring), and emotion distributions.
  • Insights surfaced across the app.
  • Re-interpretations when you want a fresh look at a dream.

The free tier includes unlimited dream logs; premium unlocks deeper Morpheus features.

How we built it

Solo project — design, mobile, backend, and infrastructure.

Mobile (Kotlin Multiplatform)
Shared domain and data layers in KMP; Jetpack Compose on Android and SwiftUI on iOS for native UI. Firebase Remote Config drives feature flags (including billing rollout).

Subscriptions (RevenueCat)

  • RevenueCat Purchases SDK in KMP powers in-app purchases on both stores.
  • Custom paywall (monthly / yearly Morpheus plans)—not RevenueCat Paywalls UI.
  • After purchase or restore, the app calls our backend to sync premium state; the server is the source of truth for premium access.
  • Native Play Billing / StoreKit remain as a fallback behind a Remote Config flag for safe rollout.
  • RevenueCat gave us one dashboard for both platforms instead of juggling separate store consoles.

Backend

  • Spring Boot (Kotlin) + MongoDB for auth, dreams, billing, and user state.
  • Python services with spaCy, NLTK, and Ollama for NLP and local LLM interpretation—privacy-first analysis without sending raw dream text to third-party AI APIs.
  • A request queue batches interpretation jobs so the server does not get overwhelmed.
  • Docker on a home old Mac mini (Ubuntu) for dev/staging; production deploys via GitHub Actions and Docker.
  • Firebase for Remote Config and push notifications (e.g. when an interpretation is ready).

Challenges we ran into

  1. Local LLM interpretation at scale — Running dream analysis on our own stack meant balancing quality, latency, and server load. We added queuing and async processing so multiple users do not saturate Ollama on modest hardware.

  2. Premium as server-side truth — Subscriptions must not rely on the client alone. We wired Google Play, App Store, and RevenueCat paths into one backend model so premium status always comes from verified server state.

  3. Dual billing without breaking production — Integrating RevenueCat while keeping native billing working required a feature flag, one purchase engine per session, and a dedicated sync endpoint—no mid-purchase engine switching.

  4. KMP across two stores — Different bundle IDs, sandbox testing, and platform-specific paywall flows (Compose vs SwiftUI) while sharing purchase logic and backend contracts.

  5. Shipping alone — From research background to App Store and Play Store release, every layer (infra, CI, store review, billing) had to be learned and maintained by one person.

Accomplishments that we're proud of

  • Live on both stores with a stable, functional product built mostly solo over years of iteration.
  • Research → product: turning thesis work on dream narratives into a consumer app grounded in psychoanalytic concepts (Freud/Jung-informed, not esoteric).
  • End-to-end billing: custom paywall + RevenueCat + backend sync + rollback via Remote Config.
  • Privacy-minded AI: local / self-hosted interpretation pipeline instead of outsourcing dream content to third-party cloud LLMs.
  • Early traction is modest but real: 18 downloads and 11 active users so far—we are honest about being at the start of growth, not the end.

What we learned

  • Spring Boot with Kotlin for a production API (new territory for me as a mobile-first developer).
  • Subscriptions end-to-end: paywall UX, Apple/Google store rules, RevenueCat as the purchase engine, webhooks, and backend entitlement sync.
  • Self-hosted staging on real hardware taught me as much as the app code—Docker, disk space, and CI on a self-hosted runner included.
  • KMP pays off when you truly share business logic, but platform UI and billing still need deliberate bridges.

What's next for Oneiric Diary

  • Points / rewards to encourage more consistent dream logging.
  • Analogy detection between dreams.
  • Home-screen widget for quick capture after waking up. (Done)
  • Foldable device support.
  • Cross-dream relationships and richer content linking.
  • Additional language support beyond Spanish and English.

Built With

Share this project:

Updates

Submission history