Koimo
A character-first AI chat and roleplay platform, built around memory that holds up over long stories, with a private backup tool that runs entirely in your browser.
- FUNCTION
- Character chat with long-term memory
- STATUS
- Backup tool live · chat in testing
- IN SERVICE
- 2026 – present
- ROLE
- Solo · design → support
01The problem
People put months into conversations with AI characters, then the character forgets what happened, or the platform changes and the history is stuck.
Koimo starts from both ends. It gives people a way to get their characters and chats out of other tools today, and it's building a chat product where continuity is the core feature rather than whatever happens to fit in the context window.
02Approach
The backup tool shipped first because it needs no servers and no trust: files are parsed in a browser worker and never leave the device. It reads Character Card V1, V2 and V3 (JSON and PNG), SillyTavern and Oobabooga chats and CAI Tools exports, and writes them back out in formats other apps can load.
The chat side treats the stored conversation as the source of truth. The model is fed a rolling summary, recent messages verbatim, pinned memories and facts retrieved from earlier in the story, assembled inside a token budget for each request.
03How memory works
- Every message is stored with its parent, so a chat is a tree. Swipes, edits and branches are paths through it, not overwrites.
- A background worker folds older messages into a rolling summary and commits it with its boundary atomically, so nothing drops out before its replacement exists.
- A second pass extracts durable facts with links back to the messages they came from, stored for keyword or vector retrieval.
- Each reply gets the character, the persona, the summary, retrieved facts, pins and recent turns, then a safety check before generation.
04Capabilities
- On-device import and export of character cards and chat archives
- Structure-only inspector for unknown export formats
- Character creator and editor with a draft test chat
- Personas, swipes, branches, edit and continue
- Visible memory panel with summaries and pins
- Streaming chat with regional model routing
- Per-account spending limits and quota holds
- 34 original character profiles with scene guides
05Stack
- LANGUAGE
- TypeScript
- FRAMEWORK
- Next.js 16 · React 19 · Tailwind v4 · Vercel
- DATA / AUTH
- Supabase (Postgres + RLS · pgvector · Auth · Storage · cron workers)
- MODELS
- DeepSeek API, with EU/UK/Swiss traffic routed to a separate host
- CLIENT
- Web workers · streaming JSON parser · fflate zip
- TESTING
- Vitest · PGlite · Playwright · memory and voice evals
06Engineering notes
-
Round-trip tests on real files. Every supported format is tested against real exports, then imported, exported and compared, so a card survives the trip with every field intact. A 120 MB archive runs in CI.
-
Never guess a file format. When a file isn't recognized, the inspector produces an outline of its structure with no content in it. A parser only gets written once a real sample exists.
-
Spend is held before the model runs. Each generation reserves quota against the chat first, so retries, regenerations and background summaries can't push an account past its limit.
-
Characters that don't sound like a chatbot. Voice and turn evals check for stock phrases, characters interviewing the user, and openings that give away the plot.
07In service
Built: the on-device backup and conversion tool, the landing site with original characters and scripted scenes, accounts, private library, streaming chat, the memory system, the character editor, personas, branches, exports, and test-mode billing for a Plus tier.
Now: live acceptance of accounts and chat on the hosted database, then public browsing and payments.
08What's next
- Open live chat once signup, model routing and safety checks pass on production.
- Public character browsing, creator profiles and reporting.