Solo product · iOS
Somni
A dream journal with no message box.
You wake up and talk. The page takes your words, and Somni answers from the same page. I designed and built all of it, from the name to the backend.
A made-up dream, with the reading Somni wrote for it. Nothing listens on this page, and anything you type stays in your browser.
- Role
- Sole designer and developer
- Timeline
- 2025 to today
- Built with
- Expo, Supabase, Claude
- Platform
- iPhone
Start wherever you like, even fragments can uncover meaning.
I was back at my grandmother’s house by the sea, but the tide had come all the way up to the porch. Warm water was moving through the kitchen, ankle-deep, and nobody seemed worried. I kept trying to save the photo albums from the bottom shelf. Then I found a door I’d never seen before, and behind it the ocean just went on forever, completely calm. I felt strangely peaceful standing there.
There’s a quiet contradiction at the center of this one: water filling your grandmother’s house, rising into the kitchen, and yet no alarm in it anywhere, not in the people around you, not even in you. You were pulled toward the photo albums, trying to keep them safe from the bottom shelf, as if some part of you wanted to protect what the water held memories of even while trusting the water itself. And then the new door, the one you’d never seen, opening onto an ocean that just went on, calm all the way out. Standing there, peaceful. It reads like a dream where something is shifting or dissolving, but gently, without threat, and where some unfamiliar, larger space opened up right where you expected only a familiar old house.
What was it like to find a door you’d never seen in a house you knew so well, and what do you make of reaching for the albums even though nothing felt urgent?
October 24, 2026
I was back at my grandmother’s house by the sea, but the tide had come all the way up to the porch.
Continue conversation
Dream Moods
How you felt during the dream
Positive & Uplifting
Anxious & Fearful
Heavy & Difficult
Mysterious & Curious
The first minute of the morning is the whole product
A dream can fade in the time it takes to find an app. So in that first minute Somni has one job: catch it before it’s gone.
The product rests on one bet: that you’ll come back tomorrow morning. Everything here is designed for that minute.
You’re half awake
The dream is going while you look for the app, so there’s no time for a form.
Someone may be asleep beside you
Speaking has to be easy, and writing has to be just as close.
Tomorrow has to feel worth it
The first few dreams have to give something back, or you won’t log the fifth.
One morning in Somni
Every dream on this page is made up.
One button, and it’s the biggest thing on the screen
Home opens on Log a Dream, with your recent dreams and symbols below it.
(opens full size)Somni’s home screen: Welcome back, a large Log a Dream button, recent dreams and recent symbols
You speak, and the words land on the page
There’s no box to type in. The mic is the big button, and the keyboard sits in the corner.
(opens full size)The canvas with a dream written across the page, a Send button in the centre and a keyboard button in the corner
The page takes your words, and the light stays
While Somni reads, the only thing on screen is the edge of the glass, breathing.
(opens full size)An empty dark screen with a soft blue light all around its edge
The reading rises from the same page
It holds up what you said and ends on a question. You can stop here, or reply.
(opens full size)The reading in blue-grey serif text on the same page, with Reply and Log Dream buttons below
Say how it felt, if you want to
Moods are only filled in when you said them yourself. Symbols are there if you want them.
(opens full size)The Your Dream screen: the dream’s card, then rows of mood chips with Peaceful selected
Every dream, in your words
The journal keeps each dream with its symbols, and you can search all of them.
(opens full size)The Dream Journal: a search field above a list of dream cards, each with its date and symbols
The habit, and how your dreams felt
Analytics shows your streak, a calendar of mornings and your moods. This one shows a sample journal.
(opens full size)Analytics: total dreams, the most common mood, streaks and a calendar heatmap of the last twelve weeks
A dictionary that asks instead of answers
Each symbol opens with questions about what it means to you.
(opens full size)The Dream Dictionary: a search field above a grid of glowing symbol tiles
Your associations come first
Cultural context comes after, with a named source, and it says plainly that it can’t tell you what your dream means.
(opens full size)The Water symbol page: questions about your associations, then cultural context with a named source
I deleted the chat, and the page started listening
For most of its life Somni was a chat, and it felt like messaging a bot at 7am. The idea that replaced it came from Tom Riddle’s diary: you write on the page, the words sink in, and a reply comes back.
Now you speak or write straight onto the screen. When you’re done, the page swallows your words, the light in them moves to the edge of the screen while Somni reads, and the answer rises from the same page.
(opens full size)Speak
Words land as you say them, and the edge of the screen moves with your voice.
(opens full size)Swallow
On Send, the page takes the words from the middle out.
(opens full size)Light
The light in them moves to the edge. It peaks as the last word goes, then breathes.
(opens full size)Reading
The answer rises from the same page, and ends on a question.
Four frames from a recording on a phone, with a made-up dream.
Your voice stays on the phone
Speech is recognised on the device. Somni keeps your words, never your voice.
Typing is never a fallback
The keyboard sits in the corner in every state. A phone that can’t listen privately gets a writing page with no mic.
Nothing gets lost
Unsent words survive the app closing, and drafts are encrypted on the phone.
Two buttons, not a pill
In testing, a small Log Dream pill went unseen and the dream never got logged. So after every reply, the choice takes up the whole bottom of the screen.
(opens full size)
(opens full size)Explored, not shipped
The pebble ripple
My first idea for the hand-over: the words are a pebble, and rings spread from where they went in until they reach the edge of the glass. Then the glow begins.
Why not On my phone it looked a little gimmicky, and it didn’t tie into the light that followed. So I replaced it with a light that grows as the words go.
Live: the same swallow, then the rings, then the pulse that followed them.
I was standing on a frozen lake when the ice began to hum under my feet. Far out, someone was waving, but I couldn’t tell if they meant come or go.
It plays when you press the button.
Somni reflects. It won’t tell you what your dream means
A dream dictionary gives you an answer. I wanted the opposite: a reading that holds up what you said, points at what’s odd in it, and ends on a question.
The limits live in the code, not in a polite prompt. The server flags verdicts like “this means” and predictions like “you will”, and a theme has to quote your exact words.
(opens full size)
(opens full size)How a reading gets made
- Your wordsThe dream as you told it.
- Spot symbolsA small, fast model looks for symbols in the library.
- The gateCode checks each one against your words, and drops what it can’t confirm.
- Write the readingA stronger model writes a reflection and a closing question.
- The contractCode checks the reading before you see it, and flags verdicts and predictions.
Two model calls, with a check after each. What a reading may contain is decided in code.
A pattern belongs to a journal, not a dream
The first version tagged themes one dream at a time. Seven analysed dreams gave 12 themes, and none reached three dreams. One dream can’t show a pattern, so I cut them.
Now Somni reads the whole journal, and a theme needs at least two dreams. Each dream is a star, each theme is a constellation, and you can tell Somni when it’s wrong.
Live, on a made-up journal
The sky
Each star is one dream, with time running left to right. Each line joins the dreams that share a theme. Nothing is written on the sky: tap a constellation and its name appears below.
Live: the card and theme page from the app, on a made-up journal of twenty dreams.
Analytics
Dream patterns and mood trends
20
Total Dreams Logged
Nervous
Most Common Mood
Since August 2026
Your Themes
What your dreams keep coming back to
Being talked over
You try to say something, and the room carries on without you.
Doors that won’t stay shut
You close a door and find it open again behind you.
Looking after someone small
Someone small is in your care, and you’re never sure you’re doing it right.
Arriving after it’s begun
You’re running for something that matters and get there after it has started.
Each star is one of your dreams. When Somni finds something they share, a line will join them.
Being talked over
What Somni sees
Across these dreams you’re trying to say something and the room carries on without you: a dinner, a meeting, a classroom, a car. In the early ones you went quiet. In the most recent you stood up and said it anyway, and someone finally turned to listen.
A question to sit with
When were you last talked over while awake, and what happened to the thing you meant to say?
Your dreams in this theme
This morning
“I stood up and said it, and the whole table went quiet.”
You speak up, and this time you’re heard.
Taken out of this theme.
October 26, 2026
“They just talked louder, like I wasn’t there.”
Your voice doesn’t carry, however hard you push.
Taken out of this theme.
October 19, 2026
“My voice came out as a whisper.”
You try to speak and the sound won’t come.
Taken out of this theme.
October 11, 2026
“The teacher kept calling on everyone except me.”
You’re in the room but never given the turn.
Taken out of this theme.
September 27, 2026
“I was shouting directions from the back seat and nobody turned around.”
You know the way, and no one is listening.
Taken out of this theme.
You said this fits you.
Somni won’t show you this theme again.
Doors that won’t stay shut
What Somni sees
Twice now you’ve shut a door on something, a cupboard and then your grandmother’s front door, and turned around to find it standing open. Neither dream shows what’s on the other side. What returns is the closing, and the sense that it didn’t hold.
A question to sit with
Is there something you’ve tried to put away that keeps finding its way back?
Your dreams in this theme
October 22, 2026
“I kept shutting the nursery door, and it kept swinging open.”
A door you shut won’t stay shut.
Taken out of this theme.
October 8, 2026
“Grandma’s front door swung open on its own and the cold came in.”
The door opens by itself and lets something in.
Taken out of this theme.
You said this fits you.
Somni won’t show you this theme again.
Looking after someone small
What Somni sees
A baby on a train, a kitten in your coat pocket, a younger cousin at a fair: in each dream someone small depends on you. You keep checking on them. Nothing goes wrong, but the dreams stay with the worry rather than the relief.
A question to sit with
Who or what feels like it depends on you right now?
Your dreams in this theme
October 28, 2026
“I kept checking the baby was still breathing.”
You watch over someone fragile.
Taken out of this theme.
October 22, 2026
“I kept shutting the nursery door so the baby wouldn’t wake.”
You guard someone small while they sleep.
Taken out of this theme.
October 14, 2026
“The kitten was in my coat pocket and I was scared I’d crush it.”
Something small is safe only while you’re careful.
Taken out of this theme.
September 23, 2026
“I lost my cousin at the fair for a second and went cold all over.”
A moment’s lapse feels enormous.
Taken out of this theme.
You said this fits you.
Somni won’t show you this theme again.
Arriving after it’s begun
What Somni sees
A train pulling out, an exam hall already silent, a wedding behind closed doors. In each you’re hurrying toward something important and arriving just after it begins. These dreams came close together and haven’t come back lately.
A question to sit with
What used to feel like it was starting without you?
Your dreams in this theme
September 14, 2026
“The train doors closed just as I reached them.”
You arrive a moment too late.
Taken out of this theme.
September 2, 2026
“Everyone was already writing when I found my seat.”
It has started without you.
Taken out of this theme.
August 21, 2026
“I could hear the vows through the church doors.”
You’re outside while it happens.
Taken out of this theme.
You said this fits you.
Somni won’t show you this theme again.
Tap a constellation, then See the theme.
You get the last word
This fits
The theme keeps its name, and no later read can merge it away.
Doesn’t fit me
The theme leaves the sky, stops feeding what Somni remembers, and can’t come back under a new name.
Not in this dream
That dream leaves the theme for good. With fewer than two dreams left, the theme goes quiet.
Each one takes effect at once, and offers Undo straight after.
How I chose the model
I planted themes in eleven made-up journals, then had three Claude models read them.
| Model | What it found | Cost per read |
|---|---|---|
| SonnetChosen | Every planted theme, and no false pattern | About $0.007 |
| Haiku | A false pattern, and it missed dreams | $0.0006 |
| Opus | A false pattern, and it split one theme in two | $0.0175 |
These journals are made up and their themes are planted, so the bench only shows which model finds a pattern I put there. Real journals are the real test.
Five versions to learn it shouldn’t be a chat
Somni started as a form called Dream Logger. It became DreamScape, a chat, first in grey and then in the dark. It became Somni, with clouds and glowing bubbles. Then I built it, used it, and deleted the chat.
Dream Logger
A form: a date, a title, four moods and a Save button. Telling a dream meant filling in fields.
DreamScape V1
The form became a chat, so the app could answer. One prompt, a message box and a small Log Dream link.
DreamScape V2
The chat went dark and the replies got long: a bright bubble for you, then a numbered list back.
Somni V3 and V4
A new name, a swirl, clouds and glowing bubbles. It finally looked like Somni, and it was still a message box.
The canvas
I built the chat, used it and deleted it. Now you talk to the page, and the answer comes back on the same page.
Side explorations
Log Dream as a link, then as a small pill, and an early symbol search.
A swirl, a serif and a night sky
It’s a dark, celestial world: a deep night sky, one glowing blue and an editorial serif. The words stay as quiet as the colours.
Three names
Dream Logger
It said what the form did.
DreamScape
A bigger name, for the chat that answered back.
Somni
The one it kept: short, soft and close to the Latin for sleep.

A dream journal with no message box.
One night, one blue
- Background#0a1128The night behind every screen
- Surface#132042Cards and bars
- Elevated#1d3159Edges and raised cards
- Dream Blue#5ac8faThe one accent
- Foreground#fcfbf8Your words
- Reading#8ba3c6Somni’s words



Clouds and stars
Gathering insights…
How Somni talks
Start wherever you like, even fragments can uncover meaning.
On an empty page
Tell your dream out loud. Somni only listens while the mic is on, and keeps your words, never your voice.
Asking for the microphone
Somni turns what you say into words right here on your phone. Your voice never leaves it.
Asking for speech recognition
Somni noticed something your dreams share.
A new theme, on the lock screen
Two voices, one accent
On the canvas you write in warm white and Somni answers in blue-grey, so you can always tell who’s speaking. Dream Blue is the one accent, and it never stands in for a success or an error. Those have their own warm colours.
Every colour, gradient and glow is a token, so new screens can’t drift. I designed it in Figma and built it in code.
I was back at my grandmother’s house by the sea, but the tide had come all the way up to the porch.
The dreamer ·
foreground· #fcfbf8There’s a quiet contradiction at the center of this one…
Somni ·
reading· #8ba3c6
Tokens
State colours
- success
- #6fd6a8
- warning
- #ffcf6b
- error
- #ff8f85
Radii
- sm
- 8
- md
- 12
- lg
- 16
- xl
- 24
- 2xl
- 32
Glows
- shadow-glow
- Inner cyan, on raised surfaces
- shadow-dream
- Soft outer blue, on dream notes
- shadow-symbol-icon
- Behind a symbol
Type
(opens full size)Gradients
surfacePrimaryThe app’s backgroundsurfaceSecondaryRaised cardsdreamCardDream and analytics cardsbuttonPrimaryThe main buttonchipPrimaryA selected tagbarFillAnalytics bars
The real components
Button
Tag
Symbol tile
Water
Bird
9 dreams
Dream card
October 26, 2026
They just talked louder, like I wasn’t there.
Analytics card
20
Total Dreams Logged
Stat tile
6
Day streak
9
Best streak
14
This month
Explore card
Dream Dictionary
Learn about key symbols
Habit grid
Live: rebuilt from the app’s tokens and its component contracts. The tags toggle, and every sample is made up.
Thirty dream symbols
Being chased
Bird
Bridge
Car
Cat
Death
Dog
Door
An unprepared exam
Falling
Fire
Fish
Flying
Forest
Horse
House
Key
Maze
Mirror
Moon
Mountain
Naked in public
Snake
Spider
Stairs
Teeth falling out
Train
Tree
Water
Wolf
Quiet Duotone: 16 from Phosphor, under its MIT licence, and 14 I drew for Somni in the same language.
The Figma sheet
(opens full size)Contrast, measured on the app’s own colours
- 18.1:1Your words on the night
- 7.3:1Somni’s reading on the canvas
- 9.9:1Dream Blue on the night
- 6.2:1Quiet text on a card
- 10.6:1Success on the night
- 8.5:1Error on the night
The rules
- Dream Blue is the one accent. It never stands in for a success or an error.
- Every animation honours Reduce Motion: the orbit loader holds still, and Somni’s replies appear whole.
- Icons are Phosphor: Light by default, Fill when active, Duotone for dream symbols.
- No more than three serif sizes on one screen.
- A size, radius, shadow or gradient that repeats becomes a token before it spreads.
From Figma to a real app, alone
I designed it in Figma through 2025, then built a first React Native version to feel it on a phone. The app itself started in June 2026: Expo, Supabase and Claude, written spec by written spec, with Claude Code.
How it got built
- FigmaWireframes to high fidelity, from April 2025
- React Native v0A first version to feel on a phone, September to November 2025
- The appExpo, Supabase and Claude from June 2026, built with Claude Code
- Written specsEach big feature written down and signed off before the code
- On-device speechRecognised on the phone only, so the audio never leaves it
- Encrypted draftsUnsent words survive the app closing, encrypted on the phone
- Spending limitsPer-dreamer limits on replies and AI cost, counted from each call’s real cost, under a hard monthly limit
Counted on 30 October 2026
- Commits since June 2026
- 153
- Written specs
- 5
- Test files
- 20
The number I’m watching
The riskiest assumption is the morning habit. So the number that matters is the share of dreamers who log three or more dreams in their first week.
What I’m watching
Coming back
The share of dreamers who log 3 or more dreams in their first week.
Finishing the morning
How many first readings end in a saved dream.
Seeing a pattern
How many dreamers with 5 or more dreams see a theme within 14 days.
Next
- A morning reminder: “Anything from last night? Tell it before it fades.” One quiet line at the time you choose, with no sound.
- Sign-in with Apple and Google.
Want a product like this built with you?
Book a free callHiring for product design?





















