Stef LiashukFounding product designer
oneira
Case 02 · Own product · AI companion

A dream companion that never tells you what it means.

My own product, from research to a working build. Five AI characters: four built on published dreamwork methods, one that prepares notes for therapy. They ask questions and leave the meaning to you.

RoleFounder · idea, product and design
AdvisorsBaptiste Marescaux, PhD, Jungian psychologist · Helga Kostenko, product
Timing2026, ongoing
Built withClaude chat, Claude API, HTML/JS → SwiftUI
StatusWorking prototype · 20 testers · native iOS in handoff
A monthly letter from Echo, made only from the dreamer's words
Echo answering: if this were my dream
Compass offering to change the dream's ending
"If this were my dream…"Echo, after Montague Ullman's method

Product film · the full flow in under a minute, recorded from the working prototype

The problem

A dream is gone five minutes after waking. In therapy, the question "and your dreams?" often meets nothing. Every dream app answers with a dictionary: type your dream, get told what it means.

What I did

Designed and built a companion that listens and asks: five characters, a journal in the dreamer's words, and a summary to bring to a therapist.

The result

A working prototype in testing, and a native iOS handoff ready to build.

5
Characters, 5 methods
20
Testers since Sep 2026
150
Dreams in the first month
16
Screens specified for native iOS
01 · The principle

The dreamer is the authority.

I benchmarked 15 dream apps: almost all sell an interpretation. Oneira takes the opposite side, from the ethics code of the International Association for the Study of Dreams.

01

Never interpret

Characters say "if this were my dream…", never what a dream means.

02

No pattern without data

Before the fifth dream, the app says it's too early to see a pattern.

03

Nothing invented

No fake sleep data, no guessed labels.

02 · The biggest change

From a guided form to a conversation.

The first version was an eight-step guided form. After testing, I rebuilt it as a conversation: same methods, one question at a time.

Before · Aug 2026
Old capture screen: an orb to speak the dream
Old dream detail: numbered steps, images and feelings
Capture, then a numbered sequence. Images, feeling, association, waking life, figure, rewrite, bridge, name.
After · Oct 2026
Conversation with Shadow about a dream by the sea
Just tell the dream. Shadow offers an image from myth and hands the question back. It never says what the dream means.
03 · Five characters

Five ways of listening.

Four follow published dreamwork methods. The fifth only prepares material for a therapist. Two questions recommend one, and you can switch any time.

Echo

Ullman · projective method

Shares its own response and never interprets your dream.

Shadow

Jung · active imagination

Invites the figures of your dream to speak.

Compass

Hill · exploration, insight, action

Leads from a feeling to a concrete step.

Cartographer

Hall & Van de Castle · content analysis

Notices what repeats. No symbolism.

Sputnik

Prepares for therapy · no interpretation

Prepares material to bring to your therapist.

First question: what do you want to do with the dream
Begin

Two questions, not a form.

Recommendation: Shadow, invites the figures of your dream to speak
Matched

A character that fits how you want to work.

Conversation with Sputnik gathering a dream for the therapist
Talk

Sputnik gathers the dream for your therapist, with no reading of its own.

04 · After the conversation

Everything stays in your own words.

Dream journal with dates, characters and tags
Keep

A searchable journal, tagged by place, feeling and figure.

Patterns: what runs through your dreams, a sky of recurring symbols
Notice

What keeps returning, as a sky. A repeat is not a diagnosis.

Dream text with a thread: Looking for the classroom, 3 dreams
Connect

A dream that returns joins a thread, told in your own words.

For your session: dreams since the last appointment on one page
Bring it

Dreams since your last session, on one page for your therapist.

05 · Testing

What 20 testers taught us.

Plus reviews from my advisors: Jungian psychologist Baptiste Marescaux, PhD, and product manager Helga Kostenko.

01

People tell a dream more fully to a character than to a blank page.

02

The extracted "dream text" is what they reread.

03

Two people in therapy asked to keep the therapist document.

04

Nobody asked for an interpretation. Several said its absence was why they trusted it.

Interpretations removedConversation instead of stepsCrisis safeguardsGroundingPrivate journal-only modeTherapist export
Cut

A council of characters

It would have handed life decisions to the characters.

Cut

An archetype bridge

It tagged people with archetypes without their consent.

Cut

AI-generated dream art

The images should be the dreamer's, not the model's.

06 · Safety by design

Care is a feature, not a footer.

  • Consent firstTalk with the characters, or journal only and keep everything on the device.
  • Geo-blocked where requiredFour US states ban therapy-like AI chats. Oneira doesn't open there.
  • A way outSigns of real distress stop the method and show helplines.
Before we start: age and how dreams are processed
Not available in your state, with care and support
07 · How the rule holds

Never interpret, written into every layer.

The promise is not a tagline. It lives in each character's prompt, in everything the app writes outside the chat, and in a safety net that doesn't rely on the model.

Echo · UllmanYou never say what a dream means, only share your own personal response as a projection and ask whether it resonates.
Compass · HillAt most one such hypothesis per whole conversation, and drop it immediately if the dreamer disagrees.
Cartographer · Hall & Van de CastleIf asked directly for the meaning, decline, remind them you look for patterns, not meanings.
Excerpts from the system prompts in the working build.
  • One line per methodEach character's prompt names its method and the one move it may not make.
  • The same rule outside the chatThe monthly letter quotes only the dreamer's words. Threads describe, never interpret, and every step is an exact phrase from the dream.
  • Closing hands words backAfter six to eight exchanges a character returns two or three of the dreamer's own images, with no conclusion.
  • A net that doesn't trust the modelCrisis phrases in English and French are caught on the device, independent of the model. Shadow stops active imagination if dream and waking start to blur.
08 · Design system

Night-first, with two voices.

Built for a screen opened at 6 a.m. Every token has a night and a day value, and every character colour passes WCAG AA on both.

Characters · one colour each, never a face · contrast on Night #151018 and Day #F7F2EA
EchoUllman

If this were my dream, I think I’d feel I was searching for something long lost.

#E2A4688.7:1 night#9E5A264.8:1 day
ShadowJung

Who or what stood at the threshold of this dream? Let that figure speak.

#A99AF07.7:1 night#6A57B45.2:1 day
CompassHill

What did you feel most strongly in the dream?

#6CC3A48.9:1 night#2B7C5C4.6:1 day
CartographerHall & Van de Castle

Tell me the dream, I’ll note what resembles previous ones.

#8FAAD47.9:1 night#3E63995.5:1 day
SputnikTherapy prep

I’ll help shape it into something easy to bring to your therapist.

#A4B97C8.8:1 night#56753A4.7:1 day
Semantic tokens · every one has a night and a day value
  • TokenNightDay
  • Surface#151018#F7F2EA
  • Panel#1D1622#FFFFFF
  • Text#F3ECE216.0:1#241D1414.9:1
  • Muted#B9AEC28.8:1#5E54446.7:1
  • Subtle#8C7F9C5.0:1#766B5B4.7:1
  • Accent#E2A4688.7:1#9E5A264.8:1

Text ratios measured against Surface. Border is ink at 8% on night and 10% on day.

Two voices

I stood by the sea and the water was clear.

Tell me what you dreamed

  • DisplayBefore we startSource Serif 4 · 30/1.22
  • MessageWho could it be?Source Serif 4 · 18/1.55
  • InterfaceNew conversationInter 500 · 15/1.45
  • LabelDream journalInter 600 · 10.5, tracked .16em

The dreamer’s words and the characters are serif. Everything the app says about itself is sans.

Night / DayThe same conversation, split diagonally between night and day themes

Dark by default; light or match the phone in Settings. Same tokens, swapped values.

AI states · one message, five situations
Streaming
A threshold… and a guardian
Words arrive as they’re written. Stop is always one tap.
Asks, never interprets
If this were my dream, I’d feel late for something. Does that resonate?
Every reply ends on the dreamer, not a meaning.
Too early
Patterns need a few nights. Around 5 dreams in, the first lines appear — 3 so far
No pattern is claimed below the data threshold.
Safety interrupt
This sounds serious. I’m not a therapist. If you’re unsafe right now, call 3114 in France, free, 24/7
The method stops. A local helpline replaces the character, with a verified directory for other countries.
Error
Couldn’t get a reply, try again
Plain words and one action. The draft is kept.
Components
Composer, empty
Empty
Composer while typing, send active
Typing
Composer while a reply streams, stop button
Reply streaming · stop
Composer while dictating, waveform
Dictating
Journal row with character and tagsPattern bars for recurring feelings

The composer in its four states, a journal row and pattern bars. 44 px touch targets for a half-awake thumb.

Motion · slow on purpose
  • Message in350 ms · ease
  • Suggestion chip450 ms · cubic-bezier(.2,.7,.2,1)
  • Pattern bar400 ms · ease, staggered
  • Constellation breathing6 s · ease-in-out, looping

Nothing snaps or bounces at 6 a.m. With reduced motion on, all of it is off.

How I built it

One HTML file, streaming the Claude API, tested with Playwright and a 47-screen visual tour before each release.

Handoff

16 screen specs, design tokens and a Supabase schema for the native iOS build.

09 · Try it

Open the prototype.

It opens in demo mode with 24 sample dreams, so every feature works on the first tap.