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?

Log Your Dream

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.

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.

  1. 01 · On waking

    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.

    Somni’s home screen: Welcome back, a large Log a Dream button, recent dreams and recent symbols (opens full size)

    Somni’s home screen: Welcome back, a large Log a Dream button, recent dreams and recent symbols

  2. 02 · Half awake

    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.

    The canvas with a dream written across the page, a Send button in the centre and a keyboard button 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

  3. 03 · On Send

    The page takes your words, and the light stays

    While Somni reads, the only thing on screen is the edge of the glass, breathing.

    An empty dark screen with a soft blue light all around its edge (opens full size)

    An empty dark screen with a soft blue light all around its edge

  4. 04 · About 15 seconds later

    The reading rises from the same page

    It holds up what you said and ends on a question. You can stop here, or reply.

    The reading in blue-grey serif text on the same page, with Reply and Log Dream buttons below (opens full size)

    The reading in blue-grey serif text on the same page, with Reply and Log Dream buttons below

  5. 05 · Before you go

    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.

    The Your Dream screen: the dream’s card, then rows of mood chips with Peaceful selected (opens full size)

    The Your Dream screen: the dream’s card, then rows of mood chips with Peaceful selected

  6. 06 · Later

    Every dream, in your words

    The journal keeps each dream with its symbols, and you can search all of them.

    The Dream Journal: a search field above a list of dream cards, each with its date and symbols (opens full size)

    The Dream Journal: a search field above a list of dream cards, each with its date and symbols

  7. 07 · After a few weeks

    The habit, and how your dreams felt

    Analytics shows your streak, a calendar of mornings and your moods. This one shows a sample journal.

    Analytics: total dreams, the most common mood, streaks and a calendar heatmap of the last twelve weeks (opens full size)

    Analytics: total dreams, the most common mood, streaks and a calendar heatmap of the last twelve weeks

  8. 08 · Any time

    A dictionary that asks instead of answers

    Each symbol opens with questions about what it means to you.

    The Dream Dictionary: a search field above a grid of glowing symbol tiles (opens full size)

    The Dream Dictionary: a search field above a grid of glowing symbol tiles

  9. 09 · Any time

    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.

    The Water symbol page: questions about your associations, then cultural context with a named source (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.

  1. The canvas while listening: a dream written across the page, a stop button glowing with the voice, and a low light at the screen’s edge (opens full size)

    Speak

    Words land as you say them, and the edge of the screen moves with your voice.

  2. The same page mid-swallow: words near the middle have shrunk and faded, while words at the edges are still there (opens full size)

    Swallow

    On Send, the page takes the words from the middle out.

  3. The page empty and dark, with a bright blue light around the whole edge of the screen (opens full size)

    Light

    The light in them moves to the edge. It peaks as the last word goes, then breathes.

  4. Somni’s reading on the same page in blue-grey type, with Reply and Log Dream buttons below (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.

An earlier chat screen with a small Log Dream pill above the message box (opens full size)
The pill
The canvas with two full-width buttons at the bottom, Reply and Log Dream (opens full size)
Reply or Log Dream

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.

Somni’s reading on the canvas, ending on a question (opens full size)
A reading holds up what you said, and asks.
The Water symbol page: questions about your associations, then cultural context with a named source (opens full size)
Symbols are optional, and they ask first. Cultural context comes with a named source.

How a reading gets made

  1. YouYour wordsThe dream as you told it.
  2. ModelSpot symbolsA small, fast model looks for symbols in the library.
  3. CodeThe gateCode checks each one against your words, and drops what it can’t confirm.
  4. ModelWrite the readingA stronger model writes a reflection and a closing question.
  5. CodeThe 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.

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.

ModelWhat it foundCost per read
SonnetChosenEvery planted theme, and no false patternAbout $0.007
HaikuA false pattern, and it missed dreams$0.0006
OpusA 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.

01 · Wireframes

Dream Logger

A form: a date, a title, four moods and a Save button. Telling a dream meant filling in fields.

02 · First flow

DreamScape V1

The form became a chat, so the app could answer. One prompt, a message box and a small Log Dream link.

03 · Prototype

DreamScape V2

The chat went dark and the replies got long: a bright bubble for you, then a numbered list back.

04 · High fidelity

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.

05 · Since September 2026

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

  1. Dream Logger

    It said what the form did.

  2. DreamScape

    A bigger name, for the chat that answered back.

  3. Somni

    The one it kept: short, soft and close to the Latin for sleep.

A dream journal with no message box.

The logo on the app’s night, and the swirl on paper and in one colour.

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

The icon

Somni’s app icon: the swirl glowing blue on a near-black square
A deep blue night with thin, faint constellations and soft clouds along its foot

Clouds and stars

Faint constellations and soft clouds sit behind the screens, and never compete with the words.

Gathering insights…

Live: the app’s loader. With Reduce Motion on, it holds still.

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 · #fcfbf8

  • There’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

The Figma type sheet: Canela and Inter samples, then a table of twelve text styles with their sizes, line heights and weights (opens full size)
The styles in Figma. In the app the serif sizes sit one notch higher, because Canela’s display cut reads smaller.

Gradients

  • surfacePrimaryThe app’s background
  • surfaceSecondaryRaised cards
  • dreamCardDream and analytics cards
  • buttonPrimaryThe main button
  • chipPrimaryA selected tag
  • barFillAnalytics 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.

NervousLonely

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

The Figma component sheet on a night sky: symbols, icons, buttons, tab bars, chat bubbles, dream cards, analytics cards, the orbit loader and the A to Z browser (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

  1. 01FigmaWireframes to high fidelity, from April 2025
  2. 02React Native v0A first version to feel on a phone, September to November 2025
  3. 03The appExpo, Supabase and Claude from June 2026, built with Claude Code
  4. 04Written specsEach big feature written down and signed off before the code
  5. 05On-device speechRecognised on the phone only, so the audio never leaves it
  6. 06Encrypted draftsUnsent words survive the app closing, encrypted on the phone
  7. 07Spending 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

  1. Coming back

    The share of dreamers who log 3 or more dreams in their first week.

  2. Finishing the morning

    How many first readings end in a saved dream.

  3. 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 call

Hiring for product design?

Next case studyLastingMind

Résumé

Stefan Navarrete · 2 pages · PDF

Page 1 of 2 of Stefan Navarrete's résumé. The PDF has the same text.Page 2 of 2 of Stefan Navarrete's résumé. The PDF has the same text.

Open the PDF in a new tab