PersonaDreams
Dream interpretation, personality analysis and mystical insight.


- Project
- Our own product
- Our role
- Product · iOS development · AI integration · Subscriptions
- Duration
- 6 months
01 / Behind the product
A real need. A considered solution.
Challenge
In mystical content apps the answers tend to sound alike; users spot the pattern within two days and lose trust. There is also a waiting problem: coffee-cup or palm readings need image analysis that takes seconds, and pinning the user to the screen breaks the experience.
Approach
The interpretation layer uses the user’s dream journal as context and surfaces recurring symbols as a pattern over time. Readings go into a Firestore-backed queue instead of a blocking request; results land in an inbox through a live listener with an unread count. Photo validation is cached by image hash, with a two-second rate limit and five attempts per session. Credits, the RevenueCat subscription and rewarded ads live in one state object; keys come from Remote Config and server work runs in Cloud Functions. The app is written in SwiftUI, 145 Swift files.
Result
Dream interpretation, personality analysis, Greek / Roman / Turkish mythology tests, tarot, coffee and palm readings, numerology and horoscopes in one app; four languages (Turkish, English, Spanish, Arabic). Rated 4.9 on the App Store.
02 / Inside the product
The experience, on screen.
Open a screen to explore the details.06 images
03 / Scope & details
The details make the experience.
- 01
Interpretation layer that uses the dream journal as context
- 02
Pattern analysis across recurring symbols
- 03
A Firestore-backed interpretation queue and inbox: no waiting screen
- 04
Subscription infrastructure through RevenueCat
Technology
INSIDE THE PRODUCT
The engineering behind the interface.
Systems we built and concrete problems we addressed in this project.
Readings are queued, the user is free
InterpretationQueueManager writes the request to Firestore with type, text, image URLs, card indexes, birth data and language; a live listener drops the result into the inbox and updates the unread count. The user is never pinned to a waiting screen.
Photo validation cost is bounded
Validation results are cached by image hash for five minutes; there is a two-second gap between requests, five validations per session and a 20 MB cap on the cache. Re-uploading the same photo never hits the model.
Localisation is checked before build
Four .lproj directories (ar, en, es, tr) and any hardcoded Text("…") without .localized are grep-checked; API keys come from Remote Config and sign-in runs through Apple and Google.
- 4,9 / 5
- App Store rating
- 27
- ratings
Your idea could be next.
What could we build for you?
From a first release to a growing platform. Let’s plan the design, development and launch together.
From Türkiye to the US, UK, Australia and everywhere in between.