Revix: AI replies in the store's voice, with a human gate by youngwoo leeRevix: AI replies in the store's voice, with a human gate by youngwoo lee

Revix: AI replies in the store's voice, with a human gate

youngwoo lee

youngwoo lee

The problem
A copy-pasted "Thank you for your purchase!" is worse than silence — shoppers read it as neglect. Revix needed to draft replies that sound like the store, not like a bot, and to know when a reply must stop and wait for a person.
What I built
Learn voice. An LLM reads the store's existing replies and catalog and derives a tone profile — formality, warmth, emoji use, signature phrasing — then assigns an industry-matched persona. Drafting is hard-blocked until a tone exists, because a generic voice is worse than no reply.
Classify. Sentiment, risk, and purchase stage (first-time vs. returning buyer). Purchase stage is decided by the model alone and returns "unknown" when unsure: a regex that guesses "welcome back!" at a first-time buyer is a worse failure than saying nothing.
Gate. Every draft hits a publish gate that checks five conditions — risk level, tone configured, quota, per-store opt-in, and a daily cap. Anything that fails goes to the seller's queue for a human to read first. Auto-publishing is off by default and unlocked per store. It is never assumed.
Ask. A hybrid RAG chat over the store's own corpus — 19,731 reviews embedded in pgvector — turns "what do people complain about in the summer line?" into an answer grounded in cited reviews.
One provider adapter lets Claude and OpenAI swap by environment variable, so model choice is an ops decision, not a rewrite.
The number I'm proudest of catching
A sync commit had overwritten the landing page's real, database-derived statistics with placeholder marketing figures. The published claim said 12,400 replies. The truth was 1,622 — a 7.6x overstatement that sat on the sales page for months. I re-derived every statistic from production, wrote a runbook recording which query produces which figure, and added a test that pins the true values and blocklists the inflated ones so they cannot come back.
What this means for your project
The demo is the easy part of an AI product. What decides whether it survives is the gate that stops a bad reply, the tone that keeps customers from noticing a machine, and the honesty of the numbers on the sales page. I have built all three.
The reply pipeline: learn voice, classify, draft, then gate.
The reply pipeline: learn voice, classify, draft, then gate.
Five conditions, all required. Anything that fails waits for a human.
Five conditions, all required. Anything that fails waits for a human.
12,400 claimed vs 1,622 true — and the test that keeps the inflated number from coming back.
12,400 claimed vs 1,622 true — and the test that keeps the inflated number from coming back.
Like this project

Posted Aug 25, 2026

Tone profiles learned from the seller's own writing, risk + purchase-stage classification, pgvector RAG over 19,731 reviews, and a 5-condition publish gate.