Case study · 2026

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.

Nakama leaves a WhatsApp ready to send from your own number
You tell it what's on your plate and it gets it ready

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.

Sign-up is a conversation: three questions to learn how to talk to you
The face above, the conversation below
Sign-up is the first conversation, on the same screen as the chat

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)
}
Emotional contagion, in NakamaKit. Arousal flips sign rather than just dampening: the difference between keeping someone company and catching their nerves.

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.

The office: tasks, routines and what's done
A finished task, delivered in blocks
The office and a finished task: the report arrives in blocks, with figures, tables and sources

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.

The diary: one dot per day, Nakama's or yours
Nakama's vital signs: energy, happiness and bond
The diary, with what Nakama wrote and what you wrote, and its vital signs

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.

ℹ️
Why the handle isn't the face

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 signature nobody could verify

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.

Swift
32.500 líneas
Tests
323 en Swift
Backend
18 edge functions
Idiomas
4

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

  1. Mayo 2026
    First version on the App Store

    A React Native app with the face, the conversational diary and an item market for Nakama.

  2. Agosto 2026
    The native app

    NakamaKit, iPhone and Mac in three days. Nakama floats over the desktop and looks at the cursor.

  3. Septiembre 2026
    Doing things

    The server-side turn, the office, routines, cost-based billing and the StoreKit 2 subscription.

  4. Octubre 2026
    Nakama 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.

Sign-in on iPad
The same app on iPad

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.

Shall we build something together?