YUNYAO Get in touch

Mirror Mirror App

An AI reflection journal that helps you understand your own unclear thoughts.

Industry
AI-native product · Self-reflection
Responsibilities
Self-initiated, solo. Concept, interaction, visual system, the AI's behaviour, and the front- and back-end code, vibecoded.
Mirror Mirror across three screens: the daily question, the reflection with Mirror's note, and Insights
01 · Problem and solution

More input, less reflection

People are confronted with more information and more impulses every day, and the conflicts they live through no longer get reflected on. What is left is restlessness, nervousness, anxiety, and worse performance at work.

Mirror Mirror asks open questions, one at a time, and answering them in writing lets you follow your own train of thought.

In closed beta it is used by people from their thirties to their sixties. Some open it in a hard moment, others on a quiet afternoon with nothing wrong.

Mirror Mirror in use: a phone held in a calm, bright space, the day's question in the mirror

The interface is built like a room with a mirror. The home screen is the mirror, holding the day's question. The tab bar is a few objects set on a surface: a flower, a compass, a candle, a framed photo. The AI speaks in italic, in the margin, then leaves.

02 · What's inside

Four quiet places

Today holds one question. In Reflection you write, and can summon Mirror to go deeper. Insights keeps the sentences you confirm as yours. Weekly is a look back.

The full set of screens: Today, Reflection, Insights, Weekly, the archive, and the question pool
03 · Restraint

One task, and no streaks

The app has one main task, and that is writing. Between opening it and the first word there is nothing to choose: no category, no template, no mood icon. Tags, search and statistics are gone, because each of them hands the user a decision at the moment they most need a blank page.

There is no streak counter and no reminder. Once reflection becomes a task to complete, people write for the counter, and that reflection is worth nothing to them. What I bet on is the moment right after: a card that keeps the one line you arrived at. It is the least proven decision in the product, and the first thing the beta is there to test.

04 · AI behaviour

An AI that only asks

One test for every reply: did it help you reach your own thought, or hand you a conclusion?
Guten Morgen, Yunyao Mittwoch, 7. Mai
Rückblick

Habe ich heute meine Grenzen gewahrt?

Stimme

Habe ich heute meine Grenzen gewahrt?

Was steckt unter diesem Gefühl?

Wovor schützt dich dieses Ja?

×
×

Anderer Blickwinkel
Für heute schließe ich

Lass es erst einmal sinken.

Das hast du heute gesehen

Jedes Ja, das mich müde macht, ist ein Nein zu mir.

Fertig
✦

Einsichten

Sätze, die Mirror aus deinen Reflexionen für dich destilliert

+

Jedes Ja, das mich müde macht, ist ein Nein zu mir.

Heute

4x

Ich gehe in Tiefe, nicht in Breite.

Letzte Woche

7x

Zweifel ist Teil der Arbeit, nicht ihr Urteil.

Vor zwei Wochen

5x
The question of the day

A full pass through the shipped build. The app ships in German.

05 · Routing

A model tier buys understanding, rules have to come from code

Decided in codejunk input, the identity question, a user pushing back, a request for a diagnosis, the cost ceiling per user, and the last pass over every reply that strips dashes and fixes the marker
+
Decided by the modelthe intent behind the first entry, the meaning of every turn after it, and the one line worth keeping
06 · Eval harness

How I know it behaves

A conversation has no correct answer, so I could not test for one. Instead I wrote down what a good move looks like in each situation, and what is forbidden there. Thirteen protocols, each one written after a real session that went wrong.

34scenarios in the evaluation suite, 73 turns in total
70 / 73current pass rate on deterministic checks
17 / 20misjudgements found when I attacked my own checks

The checks are pass or fail: does the reply hand you a verdict, does it leak the model's reasoning, does it quote words you never wrote. The harness runs the same detector code as production, and a prompt change ships only if it beats the last recorded run.

Then I attacked the checks themselves. Twenty cases against the most important one found seventeen misjudgements. No detector ships without adversarial cases now.

The product is private, so every number here comes from my own scenarios.

07 · Design system

One tokenised system

Foundations through to components, so every screen stays this quiet by default.

Mirror Mirror's design system: foundations and component library, side by side
Outcome
Live in closed beta, n = 6
Deliberately small.
70 of 73 turns pass
Behaviour I can prove, on a product where I can never read what a user writes.
Two features deleted
A cost-aware model layer and a retrieval step. Both worked, both are gone.
08 · Reflections

What I took from it

The hardest part was subtraction. Every default, mine and the model's, adds more; the work was taking things away.

Building it myself changed the design. Decisions that would have been a ticket became a ten-minute experiment, and the ones that were expensive to build showed their price before I fell in love with them.