keanan.w
← Work
Title
Nuansa
Role
Software Engineer, end to end
Year
2026
Nuansa

A business that ran on memory for twenty years, taught to see itself.

~20 hrs/wk
manual reporting removed
6,842
item catalog under search
4 apps
one shared backend

The problem

My family runs Nuansa, a music retail business in Indonesia: fourteen stores and a separate music school, run for over two decades on habit, memory, and daily updates over chat. It works. But nobody can actually see it. What sells where, which store is quietly losing money, what a customer asked for and walked out without. All of it is scattered across three systems that never talk to each other (Sysfokur, MAS, MSAS), or it lives in one person's head and leaves when they do.

Nobody asked me to fix this. I researched it, sat with the people who actually do the work, and built it end to end with remote help from my brother. The constraint was physical: a fixed window in Indonesia, and it had to be live before I left. The principle was to integrate, not replace. The old systems stay; I built a layer that reads from all of them and shows one reconciled picture.

Why now

In 2028, a Yamaha standardization policy forces renovation across all fourteen outlets. That forces the biggest call the business has ever faced: which stores to keep and which to close. Right now that decision would be made on instinct, because there's no way to rank outlets by profitability. Fixing that, the first honest per-store P&L the company has ever had, is the whole point.

The Atlas: every dataset across the three old systems, and exactly how they join. Solid lines hold; dashed red ones are gaps still being closed.
The Atlas: every dataset across the three old systems, and exactly how they join. Solid lines hold; dashed red ones are gaps still being closed.

What I built

It starts with how staff already work: they send daily reports over chat, and now the system listens. An ingestion pipeline parses each free-text message into structured records at a 90% straight-through rate, with exactly-once semantics so nothing double-counts. Four apps sit on one Postgres backend with cross-app SSO and role-based access: ingestion, an analytics dashboard, a marketing pipeline, and a company hub.

Search matches free-text product names against a 6,842-item catalog at 95%+ accuracy, using cosine-similarity embeddings with LLM re-ranking for the close calls, tuned against a labeled eval harness instead of eyeballed. Years of fragmented sales and accounting records get stitched into one warehouse, so for the first time you can see which store carries the company and which quietly loses money.

Citta, the company brain

On top of the platform sits an agentic memory layer: atomic, self-linking facts connected in a Hebbian graph, retrieval with provenance, autonomous agents on a schedule, and a remote MCP server that exposes the shared memory to any AI client. You ask a question in plain language; it answers from the real numbers, queried live at answer time, never raw SQL. Citta is 'mind' in Pali. The interesting part was that building a memory system for a business meant translating how the people who run it actually think about it into schema, and I only understood those relationships because I grew up around them.

The brain: atomic facts linked into one living graph the system thinks with.
The brain: atomic facts linked into one living graph the system thinks with.

Security

A cross-repo hardening pass: row-level security to lock down browser-exposed tables, constant-time secret comparison in webhooks to close timing attacks, and fencing untrusted agent input behind human-review queues before it can act.

Parse and review: free text becomes structured line items with a match score.
Parse and review: free text becomes structured line items with a match score.
The analytics dashboard: the first consolidated view across all fourteen outlets.
The analytics dashboard: the first consolidated view across all fourteen outlets.
The marketing app: workflows that turn a lost sale or a demand spike into content.
The marketing app: workflows that turn a lost sale or a demand spike into content.

Stack  Next.js, TypeScript, Cloudflare Workers, Deno, Postgres, pgvector, MCP