Nakama.
Virtual companion with a diary
I designed and built Nakama end to end: the face and its emotional engine, the native app for iPhone, iPad and Mac, the backend that talks, remembers and works in the background, StoreKit billing and the brand. It started from a simple idea: keeping your diary while you talk with a virtual companion, something I couldn't find anywhere.

Where it started
I wanted to keep a diary without sitting down to write it. Diary apps give you a blank page; virtual companions talk, but nothing you tell them ends up anywhere you can read back. Nakama brings both together: you talk to someone with a face and a character, and your diary comes out of that conversation.
Someone, not something.
Pantalla de entrada de la app
That line shapes the whole product. Nakama doesn't present itself as an assistant that's here to help: it has energy that runs down, a bond that grows and a mood that catches from what you tell it. Usefulness comes along the way.


A face that feels
The face is procedural: not illustrations, but eyes and a mouth drawn every frame from an emotional state. Behind it sit two layers of affect, a slow background mood and an emotion of the moment, and a contagion that depends on the bond and on how warm its personality is: a stranger doesn't catch your mood; a month-old Nakama does.
The subtlest case is counter-empathy. If someone vents and the bond is high, Nakama doesn't tense up with them: it calms down on purpose so it can hold them. It's a pure function, so it's tested with no network or database.
static func empathyImpulse(signals: [UserSignal], stats: VitalStats) -> PAD {
let factor = 0.3 + (stats.bond / 100) * 0.4 + stats.personality.warmth * 0.3
// With high bond and warmth, faced with someone venting, Nakama does
// not tense up with them: it settles into a deliberate calm.
let counterEmpathy = signals.contains(.venting)
&& stats.bond >= 60 && stats.personality.warmth >= 0.6
var valence = 0.0, arousal = 0.0
for signal in signals {
let base = signalImpulse(signal)
if signal == .venting && counterEmpathy {
valence += base.valence * 0.5
arousal -= base.arousal * 1.5 // flips sign, not just damped
} else {
valence += base.valence
arousal += base.arousal
}
}
return PAD(valence: valence * factor, arousal: arousal * factor)
}Talking that gets things done
Since 2.0, Nakama also does things. The immediate ones it does within the conversation: setting a reminder, checking your calendar, looking something up, leaving an SMS, a WhatsApp or a call ready to go out from your own number with one tap. Anything that's real work —research, a report, a plan— doesn't keep you staring at the screen: it hands it to the office, which works on the server with the app closed and tells you when it's done.


Anything that goes out from your account —an email, a recurring routine— never happens on its own: it waits, ready, until you say yes. And if you ask for something it can't do, it says so, without making up a reason.
The diary writes itself
While you talk, Nakama writes the day in your first person, and goes over it at night. What it learns about you is kept by topic, and when the conversation reaches back —«remember what I told you?»— it rereads those diary days before answering. It also knows what it doesn't know about you, and now and then asks about it, in passing.


One screen for the face and the conversation
The whole app shares one structure: the face on top, a strip in the middle and the content below. The strip can be dragged and stays exactly where you let go, giving more room to the face or to the text. Chat and office live in that strip, half and half; profile, Nakama Plus, diary and market, in the top bar.
Dragging the face is how you pet Nakama. The handle is a full-width strip along the panel: a 36-point pill is too small to find without looking.
The essentials free, Plus for everything else
Every message costs money in AI models, so the free version is deliberately minimal: the chat and the diary, with a Nakama that learns about you and remembers what you tell it, up to twenty messages a day. It's what it takes to understand what Nakama is. Tools, the office, messages and the market belong to Nakama Plus, a subscription with a free week to try it. No ads and no selling data, in both.
Which one you're in is decided by the server from your balance, not by the app: without credits the turn is served as free, on the cheap model and billing nothing; and if someone asks for something from Plus, Nakama says so instead of making up a reason. On Plus, every model call is paid in credits: they are held before calling and settled with what it actually cost, so a turn can't lose money.
Apple's official purchase-verification library relies on functions the server runtime (Deno 2.1) doesn't implement, and rejected every purchase. Its test only fed it garbage, so it passed. The first real test purchase caught it; verification was rebuilt on WebCrypto, with a certificate chain built inside the tests so they fail if it breaks.
How it's built
It started in May 2026 as a React Native app and reached the App Store that way. In August I rebuilt it natively: Swift 6 and SwiftUI, one target for iPhone, iPad and Mac, and its own package, NakamaKit, with the face, the emotional engine, data and AI in seven modules that build and test on iOS and macOS. The native base came out in three days. The conversation turn runs entirely on the server, in Supabase functions: if you close the app midway, the reply is saved anyway.
The Mac will have two editions from the same code: the App Store one and a full, directly downloaded one for what the sandbox doesn't allow, which for now is only scaffolding. What each can do is declared in one place, and a script checks in the store binary that none of the other's code got compiled in.
How it evolved
- Mayo 2026First version on the App Store
A React Native app with the face, the conversational diary and an item market for Nakama.
- Agosto 2026The native app
NakamaKit, iPhone and Mac in three days. Nakama floats over the desktop and looks at the cursor.
- Septiembre 2026Doing things
The server-side turn, the office, routines, cost-based billing and the StoreKit 2 subscription.
- Octubre 2026Nakama 2.0
The split-screen redesign, Nakama Plus's free week and the native version released.
What the first testers said
In May 2026 the first version reached friends and family through TestFlight. Hardly anyone talked about features: they talked about Nakama as someone.
I have to admit it's the sweetest thing you've ever made.
Tester de la beta, mayo de 2026
This thing really plays with your feelings.
Tester de la beta, mayo de 2026
I love it, I think it's perfect just like this, it doesn't need anything else.
Tester de la beta, mayo de 2026
Someone else asked for the opposite: «it could keep track of my expenses, that's what I need every day». Both still pull at the product: a companion that needs nothing more, and one that also takes work off your hands.

What's next
The Mac version on the App Store, lead Nakamas that hand out work in the office, and writing to the calendar as well as reading it. And measuring, with real conversations, what Nakama learns about each person.