← All projects
projects

ME And Ion hold

personal reflection · B2C · personal project, free

An AI journal that listens and reflects, rather than giving unsolicited advice. A personal project: I built it for myself, and used it to learn how to embed an LLM into a product.

Why I built it

I needed a journal that would listen, not start coaching. The AI journals I tried evaluate, advise, and set goals. I wanted to talk it out and see my own thoughts from the side: what repeats, where I contradict myself, how I changed over a month.

So ME And I is built on the principle “a mirror, not a coach.” The AI returns my words, notices patterns across entries, and does not say what to do. I was the first and only user. That let me test every decision on myself every day. At the same time it was a proving ground where I learned, in practice, how an LLM behaves in a real product.

Discovery

Before building I reviewed about 3,000 comments from Reddit communities on journaling and store reviews of 10 competitor apps. What I learned: the blank page kills the habit most often, voice noticeably lowers friction at the start, and people do not trust AI journals on privacy.

What went into the product: voice became a full input method, a new entry opens right after login, audio is not stored, and data export is free.

Key product iteration

At first the AI conversation had one mode: reflect and barely ask. In daily use I noticed that was not enough when you want not just to talk it out, but to work through a situation: a passive mirror only returned what was said.

I split the conversation into two modes that can be switched mid-dialogue.

Echo listens and reflects.

Buddy develops the thought, ties it to what was said before, and asks one question if needed.

Neither mode gives advice: the mechanic changed, the product principle stayed.

How the AI works

Voice to text. The recording is processed in an edge function's memory and is not stored. The primary recognition model is Gemini. If it fails with a retryable error, the same recording automatically goes to Whisper (OpenAI). Before saving, the user can edit the transcript, and names from their entries are passed into recognition so the model writes them correctly.

Memory and RAG. Entries are split into chunks with embeddings in pgvector. During a conversation the AI receives relevant fragments from the past, a short summary of “what is known about me,” and structured facts. New facts replace stale ones. Product rule: memory is built only from what the person wrote themselves. AI replies do not go there, so the model does not “remember” its own inventions. Journal search is hybrid: keywords first, semantic search fills in the rest.

Failover. Conversation and pre-entry reflection run a fallback chain: primary model → a lighter model from the same provider → a model from another provider (Anthropic). Invalid JSON counts as a failure at that level. Every call is logged: model, whether fallback fired, cost. Prompts and models are configured in admin without a release.

Safety. Crisis states are recognized in several languages. In that case the AI gives a neutral reply with no advice, and borderline cases go to admin for moderation.

What's built

A working PWA in production with a landing page and an admin console: text and voice entries, reflection on each entry, Echo/Buddy conversation with memory, a weekly Mirror Report, comparing yourself over time, letters to a future self, an automatic “People and places” section. Sign-in via email OTP and Google, account deletion, data export, daily backups.

How I worked

Spec first, then code. For each feature I wrote a product document (job stories, AI behaviour rules), then a technical spec, and only then the implementation with AI agents. Every change went as a separate PR with tests and CI.

Status

Now: the project is on pause. The app works, it is free, and I'm its only user. I switched to programs where I build products from zero.

If I come back: first external users, to test whether a “mirror without advice” is needed by anyone besides me.

Hypotheses (untested): the “not a coach” stance differentiates the product from competitors; voice holds the habit; monetization (planned): paid depth, for example memory and Mirror Report.

Stack

React 19 · TypeScript · Supabase (Postgres, pgvector, Edge Functions) · Cloudflare · OpenAI / Anthropic / Gemini · PostHog