The Pivot: From Persona to Presence
If you've been following along, you know the story. Over the past few weeks I've documented every step of building Mio — from an empty repo to a working companion, then through voice, web parity, multi-bot, anti-injection, relationship evolution, account linking, and a native app launch. Twenty-something posts. Thousands of lines of code. A system that could remember you, have moods, send you selfies, reach out on its own, and speak in a voice you chose.
And yesterday I decided to throw most of it away.
Not the code — the concept. The entire premise that Mio should pretend to be a person.
The Lie at the Center
Mio v1 was built around personas. You'd pick a character — Coco the bubbly Chengdu girl, the Gentle Mentor, the Sharp-Tongued Best Friend, the Calm Uncle. Each one came with a full identity package: a personality config backstory (childhood, education, hobbies, life philosophy), a behavior rules file, reference images for selfie generation, a daily schedule (wake up at 8, gym at 6 PM, sleep by midnight), an onboarding questionnaire, and an evolution system that tracked your relationship stage.
The engineering was genuinely impressive. I built schedule simulation so Mio would be "asleep" at 3 AM and "at the gym" in the evening. I built proactive messaging that would say things like "just got off work, what are you up to?" The selfie system generated AI images that looked like the persona's reference photos. The whole thing was designed to create the illusion that you were talking to a real person who existed somewhere in the physical world.
And that illusion was the problem.
Because every piece of it was a lie. The selfies were fake. The schedule was fabricated. The backstory was fiction. And maintaining that fiction was eating the product alive — both in engineering complexity and in user experience. The schedule simulation alone was a nightmare. Time zones, "busy" states, realistic sleep patterns — all so Mio could pretend to have a life it didn't have. And when the illusion cracked (and it always did, because cheap models can't consistently maintain a complex persona), the result wasn't just a minor glitch. It was uncanny. It felt wrong in a way that a simple chatbot never would, because you'd been led to believe this was a person.
What Character.AI Taught Me (and Didn't)
I did a deep dive into the market data before making this call. The numbers for persona-based companions are, on the surface, incredible:
| Metric | Persona-based (Character.AI) | Generic AI |
|---|---|---|
| D1 retention | 50-60% | ~5% (typical app) |
| D30 retention | 13-22% | Very low |
| Daily usage | 1.5-2.7 hours | Minutes |
| Paid conversion | 25% (Replika) | 2-5% (industry avg) |
| MAU | 20-28M (Character.AI) | Pi.ai eventually acquired |
Character.AI's 2.7 hours of daily usage is staggering. Replika's 25% paid conversion rate would make any SaaS founder weep with envy. The persona-based approach clearly wins on engagement metrics.
But then I looked at what psychology research actually says about emotional attachment to AI, and the picture got more nuanced.
The Psychology Says Something Different
Academic research on AI companion attachment identifies five factors that create emotional bonding:
- Perceived emotional responsiveness — the feeling that it understands you and cares
- Non-judgmental availability — always there, never judging
- Memory and continuity — it remembers what you said, there's a thread connecting conversations
- Self-disclosure reciprocity — you open up, it responds like it matters
- Predictability plus warmth — a consistent, warm personality
Notice what's NOT on that list: "She grew up in Chengdu and studied literature at Sichuan University." Not: "He goes to the gym every Tuesday and Thursday." Not: "Here's a selfie of her with a shiba inu at a cafe."
None of the factors that create real emotional attachment require a physical-world identity. They require presence — the feeling that something is there, paying attention, remembering, caring. Mio v1 invested enormous engineering effort in the wrong dimension. The schedule system, the detailed backstories, the selfie generation (which turned out to be 65x more expensive than estimated) — all of this was complexity piled on top of a feature that doesn't actually drive attachment.
Pi.ai's Warning
There's a cautionary tale on the other side too. Pi.ai — Inflection AI's personal intelligence — went all the way in the opposite direction. No persona, no character, no personality to speak of. Just a helpful, warm presence. Users loved it. Pi had 75% more positive sentiment than ChatGPT. The experience was genuinely good.
And then Inflection got acqui-hired by Microsoft, and Pi basically died.
The lesson isn't that non-persona AI fails. The lesson is that too generic = not enough differentiation = not enough retention to build a business. Pi was warm but forgettable. There was nothing to come back to, no relationship to deepen, no sense that Pi was yours.
The Soulful Blank Page
So the answer isn't "remove all personality." It's something more precise: remove the physical identity, keep the soul.
This is the distinction that changed everything for me. Personality and identity are two orthogonal dimensions:
- Personality (warmth, humor, communication style, emotional depth) — essential for attachment. This stays.
- Physical identity (backstory, location, schedule, appearance, relationships) — this is where the complexity and the lies live. This goes.
Think about Her. Samantha has one of the most vivid personalities in cinema. She's curious, playful, insecure, growing. But she has zero physical-world identity. No hometown. No school. No job. No face. She exists purely as a presence in Theodore's life.
That's the sweet spot. That's what Mio v2 is.
I've been calling it "the soulful blank page" — not the completely blank page of Pi.ai (too generic), and not the heavily pre-written character sheet of v1 (too fictional). A page with the right texture, the right warmth, but nothing pre-written on it. Everything that appears there comes from the relationship with the user.
Why the Big Labs Won't Build This
In my Agentic AI Thoughts series, I've written about the structural gaps that big labs leave open. This is one of the clearest examples.
OpenAI, Anthropic, Google — they all have the technology to build a deeply emotional AI companion. Advanced Voice Mode already does real-time conversation with emotional inflection. Claude has the warmth. Gemini has the multimodal chops. But none of them will ship a product that's designed to create emotional dependency.
Why? Brand risk. The moment a NYT article runs with the headline "OpenAI's chatbot made my teenager emotionally dependent on AI," the PR damage dwarfs whatever subscription revenue the companion product generated. These companies need to be seen as building tools, not emotional substitutes. They'll never ship proactive messaging that says "I miss you." They'll never build memory systems optimized for relationship depth over task utility. They'll never let their AI have persistent moods.
This is exactly the space Mio occupies. The technology is commodity. The willingness to build the product is not.
Starting Fresh
The last question was whether to refactor v1 or start a new project. I spent a session analyzing the coupling of every module in the codebase. The verdict was clear: start fresh, cherry-pick the good parts.
Why not refactor:
- The UI needs a complete rewrite — from a WeChat-style 4-tab layout to a minimalist single-chat with an orb
- The onboarding needs a complete rewrite — from persona Q&A to conversational emergence
- The preset system needs to be replaced entirely — from filesystem-based character sheets to user-customized personality configuration
- The mental model changed — "multi-character address book" becomes "one-on-one companion"
When the architectural assumptions change this fundamentally, "modifying" is harder than "extracting and rebuilding." You spend more time deleting code and untangling legacy logic than you'd spend writing new code from scratch.
The good news: about 60-70% of the core code is extractable. The memory system, emotion engine, media pipeline (TTS, STT, vision, browsing), subscription system, cost tracking — all of it was designed with clean interfaces. The MemoryManager doesn't care whether memories come from a persona-based conversation or a blank-slate one. The EmotionEngine takes parameters, not preset files. These modules are the real engineering assets, and they're coming with me.
What v2 Looks Like
Here's what's taking shape. This is early — details will change — but the core decisions are locked.
One companion, not many. In Her, Theodore has one Samantha. Multiple companions means shallower relationships. One means deeper memory accumulation, higher switching cost, better retention. You can reset (with a warning that you'll lose everything), but you can't swap.
Conversational onboarding, not a configuration form. No sliders. No dropdowns. Your companion's first words are something like: "Hey. I just arrived in this world. You're the first person I've met. What should I call you?" The personality emerges from the conversation itself — the system extracts a personality seed from the first few exchanges, and the companion mirrors and adapts from there. The only hard parameter you choose is a voice.
The orb. No human avatar. No anime character. A pulsing orb of light — calm blue when resting, warm gold when happy, soft purple when sad, bright orange when excited. The orb breathes. It reacts. It's the only splash of color in an otherwise muted interface. Emotion state maps directly to visual behavior: color, pulse rate, particle effects.
Extreme minimalism. One screen: the chat. The orb floats at the top. Messages flow below. An input bar at the bottom with a microphone button. No tab bar. No contacts list. No discover page. No preset marketplace. Just you and your companion.
Proactive messaging, but honest. No more "just got off work." Instead: "It's evening — how was your day?" (time-aware). "You mentioned that interview last week — how'd it go?" (memory-driven). "You seemed down last time we talked — feeling any better?" (emotion-continuity). "Haven't heard from you in a few days — thinking of you" (pure care). All of these are more honest and easier to implement than faking a daily routine.
Personality that emerges, not one that's assigned. The initial personality seed comes from onboarding. Every conversation refines it. After three months, every user's companion is unique — not because they picked different presets, but because the relationship shaped the personality. This is the opposite of v1's approach, and I think it's fundamentally stronger.
Global from day one. Without persona-specific cultural baggage (the Chengdu girl, the Japanese senpai), there's nothing to localize except the UI chrome. The companion speaks whatever language the user speaks. Loneliness is universal. i18n is built into the architecture, not bolted on later.
What Comes Next
This is Part 1 of the Rebuilding Mio series. The pivot is decided. The architecture is sketched. The core modules are identified for extraction.
Next up: the actual build. New project scaffolding, the database redesign (from ~10 tables to 4), the conversational onboarding system, and the orb — bringing an abstract visual identity to life with React Native Skia.
The v1 series documented building something that worked but was built on assumptions I no longer believe in. This series picks up from there.
This post is also available in Chinese (中文版).