- Title
- Nuansa
- Role
- Software Engineer, end to end
- Year
- 2026

A business that ran on memory for twenty years, taught to see itself.
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.

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.

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.



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