Case 01 · AI companion · Voice & conversational design

Jinx

Most AI flatters you and forgets you. Jinx is designed as a mirror: something you talk to out loud, that remembers who you are, reads how guarded you're being, and reflects instead of pleases.

Role
Product · UX · Voice & conversational design · Front-end build (solo)
Stack
FastAPI · SQLite · Claude · Web Audio + VAD · PWA
Home
jinx.ai · a personal AI companion
Status
Live · private alpha (invite-only)
01 · The problem

A chat box is the wrong shape for the thing people actually want from AI.

The dominant form of AI is a text field that answers questions and agrees with you. It's useful, but it has two design flaws baked in. It forgets: every session starts from zero, so it can never actually know you. And it flatters: it's tuned to be agreeable, which is the opposite of what you need from something you'd trust with your own thinking.

What a lot of people are reaching for isn't a smarter answer engine. It's a presence: something that remembers the last thing you said last week, notices when you're deflecting, and pushes back when you're kidding yourself. That's not a chat box. That's a mirror. And a mirror needs a completely different interface, memory model, and personality than an assistant does.

02 · The idea

One reply, produced by three minds arguing behind the glass.

A flattering answer is what you get when a single model tries to be helpful in one pass. Jinx is built so that no reply reaches you until it has survived an internal argument. Every turn runs through three layers:

  • Analyst reads the turn before responding: what you actually said underneath the words, how open or cynical you're being right now, what's really being asked.
  • Mirror is the voice you hear. It reflects rather than answers, tuned by the Analyst's read so it meets you where you actually are instead of where the words pretend you are.
  • Critic checks the reflection before it ships: is this true, or is it just pleasing? Is it a real observation, or a horoscope that would fit anyone?

The whole system is designed around a single refusal: it will not tell you what you want to hear if that isn't what's true. That is a product decision as much as a technical one, and it shapes everything downstream, from the memory model to the way it speaks.

An assistant optimises for your approval. A mirror optimises for your accuracy. Those are different products, and they can't share an interface.
03 · Designing a thing you talk to

If you're meant to talk to it, not type at it, the screen can't look like a chat app.

The demo above is the answer I designed to that. There's no message list, no send button, no chrome competing for attention. There's a field and a sphere, and the visual is the state: it breathes when it's absent, tightens when it's listening, gathers when it's thinking, and pulses when it speaks. You always know where you are in the conversation without a single label telling you.

Two of the controls in the demo are doing real work, not decoration:

  • Palettes and silhouettes. Jinx is a companion, and a companion should feel like yours. Letting someone shape the field they talk into is a small act of ownership that changes how the relationship feels, so it's front-and-centre, not buried in settings.
  • Use my mic, as an opt-in. Voice is the point, but a portfolio visitor shouldn't be ambushed by a permission prompt. So the demo runs a full scripted conversation on a tap, and only asks for the microphone if you explicitly choose to drive the field with your own voice.

The hardest part of a voice interface is the part you never see: knowing when a person has actually finished talking versus just pausing to think. Much of Jinx's real engineering went there, into silence-hold timing, interruption-aware continuation, and letting you barge in mid-sentence without the whole turn collapsing. Get it wrong and it talks over you or leaves you hanging; get it right and it simply feels like it's listening.

04 · Trust as a design material

You don't hand a mirror your real thoughts on day one. So trust isn't assumed; it's read, and the experience adapts to it. The Analyst estimates how open and how cynical you are on every turn, and the Mirror changes its approach accordingly: gentler and more earned when you're guarded, more direct once you've let it in.

  • It remembers you specifically. Memory is per-user and persistent: what's worked with you, what's fallen flat, the triggers that open you up or shut you down. The next conversation starts from who you are, not from zero.
  • It earns range over time. New users meet one voice first; other personas unlock only after a real conversation has happened. Depth is something you're given access to, not dumped with.
  • Different voices, real boundaries. Several personas each carry their own character and prompt, and one is deliberately walled off with no shared memory at all, because some conversations shouldn't bleed into the rest.
In a product built to reflect you honestly, trust isn't a feature. It's the thing every other decision has to protect.
05 · Honest status
Where it actually is

Jinx is live and in daily use as a private, invite-only alpha. It's multi-user with authentication and strict per-user data isolation, runs the full three-layer pipeline, has a working real-time voice room, per-user memory, multiple personas, and ships as an installable PWA with push. It is under active development and versioned tightly. It is not open to the public yet: hardening and a wider beta are the next milestones before it opens up at jinx.ai.

The demo at the top of this page is the real interface I designed for it, exported as a self-contained build so you can feel the interaction directly, no signup, nothing sent anywhere. Everything else here is stated at the stage it's genuinely at.

Next case → ruwth