feike.studio

Nyx / Nadir · Own product · 2026 — ongoing

AI companionship,
from character to code.

I designed and built a personal AI companion, then developed it into Nadir: a native app with distinct characters, persistent memory and a system for creating more.

My role
Product direction · UX / UI · AI-assisted build
Platform
Web · native macOS
Today
Nyx in daily use · Nadir in closed alpha

Eos

Warmth with forward motion.

Curious, lively and gently direct. Her character makes room for a small next step without dismissing what came before.

Morpheus

Imagination with a point of view.

Calm, attentive and precise. He makes possibilities easier to compare, then helps turn them into a concrete choice.

Original Companion selection artwork. Eos and Morpheus are the two free starter characters in Nadir.

A personality has to survive the next conversation.

The design work sits between what a character looks like, how it responds, what it remembers and how much initiative it takes.

Nyx started as a companion for my own daily life. Nadir brings the same core to other people, with their own data and a choice of companions. I own the product direction, persona logic, interface, specifications and quality of the AI-assisted implementation.

I defined Eos and Morpheus through behaviour as well as appearance: how they disagree, respond to uncertainty and move a conversation forward. A shared set of expressions makes those differences visible while keeping each character recognisable.

Meet the character before making a choice.

Choosing a companion is the start of a relationship. The onboarding gives that decision its own space.

Full character cards introduce Eos and Morpheus together. Opening one reveals its voice, personality and visual world before the user commits.

Selection and introduction are separate states, with a clear way back. Both starter companions are included, and the choice can be changed later.

Nadir’s current onboarding: compare two complete characters before choosing whom to get to know.
A preview of Eos’s personality and visual world. Continuing is an explicit choice.

Give the conversation a way in.

A blank chat field asks the user to invent the relationship. Presence gives them something to respond to.

A contextual greeting and three re-entry cards establish a starting point: an open thread, something pending or a conversation starter. Empty threads and tasks are named explicitly, so the first screen still offers a way in.

Deeper tasks live in focused workspaces with their own tools and permissions. That keeps the companion’s social presence coherent while still making it useful.

Nyx, the private edition: a contextual greeting and three re-entry cards make it possible to pick up where you left off. Interface in German.
A demo conversation captured for this case: asked to stage something impressive, Eos responds with humour. Expression, emotion labels and dialogue work together.

Trust becomes a product rule.

Closeness, memory and initiative only work if the companion holds its boundaries. Two decisions from everyday use shaped how I designed the product.

A calendar answer needs calendar evidence.

In one calendar answer, the model invented an appointment. A convincing response had become a reason to distrust the product.

I made the loaded calendar data the boundary: answers may only use events that are actually available. If an entry is missing, the correct response is “not found”. That made uncertainty a product state to design for.

Save first. Enrich second.

Saving a bookmark should not depend on a model or network request succeeding. I separated capture from AI enrichment.

The link, text and images are stored locally first; summaries and tags follow in the background. If enrichment fails, the saved entry stays available. The interface makes that order explicit, so an optional service cannot take away the primary action.

The same principle shapes initiative: a stored API key is not blanket consent for background work, and an action with an outside effect needs its own scope and controls. The automation architecture below makes those decisions traceable.

When the workflow was missing, I built it.

Pose Studio turns one character master into a reviewed, consistent set of assets that the app can actually use.

ComfyUI did not cover the complete workflow I needed. I built a local Python tool around the repeated decisions: generate, compare, adjust, approve and assemble.

It supports Gemini image models and GPT Image via OpenRouter, plus manual import from tools such as Mage.Space. Each expression keeps its prompt, versions and approval state. A failed pose can be replaced without rebuilding the set.

  1. Direct

    Start from one visual master. Set the character, posture and expression prompts.

  2. Generate & review

    Build 42 expressions for each avatar and chibi set. Regenerate individual poses and explicitly approve the result.

  3. Finish in Figma

    Upscale the approved set, clean up the artwork in Figma and return the final transparent images.

  4. Assemble

    Combine the artwork with persona, themes, stage and selection card. Validate the complete source before packaging.

The tool also assembles persona content, themes and the selection card. Incomplete or outdated image sets block export. The final package carries 42 chat expressions and 42 chibis per theme, giving the product a repeatable character-production process.

The review surface: each expression keeps its own prompt, versions and approval state. The Morpheus set shown here has completed generation and the Figma round trip for all 42 expressions. Interface in German.
Theme Studio: adjust shared colour tokens in context. This authoring preview uses sample Nyx dialogue to test Eos’s visual theme.
Background Studio: direct scene, light and composition, then compare versions. Space for the companion is part of the brief.
See how the Companion selection card is authored
The same Eos card seen at the start of this case, inside its authoring workflow. Identity comes from the avatar master; a separate reference keeps the card geometry consistent.

A free app. A reason to choose another companion.

Nadir’s business model separates access to the product from the choice of character.

The app is free, with Eos and Morpheus included. Additional official companions are the planned paid offering. The product hypothesis is that people will pay for a character’s personality and visual world once the core experience has earned a place in their day.

That decision shapes the product: clear character presentation, a consistent content package and an explicit choice before switching. A new companion is imported as a signed file; installing it does not silently replace the active one.

Current stage: the package and import foundation is implemented. Paid distribution and willingness to pay remain to be validated.

Eos selected: the character, theme and entry points for importing or discovering companions share one place.
Morpheus selected: a different visual world within the same interface. The selected card and theme make the switch visible.

The systems behind a sense of continuity.

React, FastAPI and Tauri form the shared product core. SQLite and a local vault hold the data; model providers are optional connections. Nyx runs privately on my infrastructure, while Nadir bundles its local backend in the macOS app.

The two editions share code, but not a data path. Edition profiles and bundle checks keep private Nyx content out of Nadir. Memory has an origin, a scope and a lifecycle, including deletion of derived indexes. Local-first means stored content and core functions stay useful without a provider; generative features still need a chosen local or external model.

Memory combines source-backed facts, local knowledge retrieval and a lifecycle that keeps context selective and user-controlled.
Open Memory diagram at full size ↗

These are design decisions as much as implementation details: what the companion recalls, when it speaks and how it handles uncertainty all shape the relationship.

See documents and calendar in Nadir

The companion also sits beside focused workspaces. Document actions begin with a selected file; calendar prompts relate to events, free time and overdue tasks.

The document overview pairs browsable files with a companion-assisted editing area. Actions wait for a selected document.
A quiet day is still a useful state: calendar context, weather and a way to add a task remain available.

AI tools, in practice.

I use AI across the work: exploring images, building software, testing voices and connecting creative tools. When an existing workflow falls short, I build the missing part.

Character productionComfyUI · Mage.Space · Pose Studio · Figma
I usually create companion master images in ComfyUI or Mage.Space, then take them through my Pose Studio pipeline for expression sets, review and complete Companion packages, with visual cleanup in Figma.
Image & video explorationMage.Space · Higgsfield
Exploring visual directions and comparing what different image and video models produce.
AI coding environmentsWindsurf · Codex · OpenCode
Working across AI coding environments for implementation and review, from focused changes to building my own tools.
Language & local modelsClaude · GPT · Gemini · Ollama
AI-assisted implementation and review; local experimentation with Gemma, Qwen and other open models.
Multi-model providersOpenRouter · Venice · Featherless · Hypereal
Hands-on experience using multiple models through different providers and integrating their APIs into my own projects.
Voice & conversationFish Audio · ElevenLabs · Cartesia · Gemini API
Text-to-speech experiments and speech-to-speech interaction through the Gemini API.
Connected creative toolsMCP · Figma · Blender · Godot
Working with MCP servers to bring AI assistance into design, 3D and interactive authoring tools.
See how I built Pose Studio →

A working product, with a small feedback loop.

I use Nyx daily. Two people use Nadir in closed alpha.

Alpha feedback led to specific changes: persisted names became stable, the empty first start gained a clear way in, and optional provider errors stopped hiding content that had already loaded.

I specify behaviour and acceptance criteria, build in small slices with AI assistance, and review the result against the actual code and built app. Updates, permissions and preservation of local data are part of the product experience.

This stage gives me direct feedback on the experience. The next questions are broader adoption, repeat use and whether the additional companions earn their price.

Product status confirmed September 2026 · Independent project · Product design and AI-assisted implementation by Arne Feike