Winby
An in-product guidance chatbot for Windly
Context
Bringing a new user in is only half the job. They have to understand the product and the overseas purchasing agency domain at the same time, and an onboarding that covers only one of the two does not hold them.
About 60% of new users opened a support ticket for both — how the product worked and how the domain worked — and the internal CX team absorbed all of it. The repetitive half of that needed to be answered automatically, by something that knew Windly and the domain at once.
How I solved it
- Built a separate ingestion path that takes the Notion export whole
- not a plain-text corpus: documents carry images and video, tied to one another by relative links
- links and attachments are resolved as they move, and each document keeps its original Notion address as provenance
- Kept the knowledge out of the model with RAG, so editing a document changes the answer
- the product and its policies change constantly, which is what RAG buys over fine-tuning
- documents are split along their heading hierarchy, chunked at 1,000 characters with 200 of overlap, and stored in pgvector
- Put a metadata filter in front of retrieval
- an LLM pulls the marketplace (Coupang, Naver, 11st, Taobao, 1688, and the rest) and the plan tier out of the question first
- candidates are narrowed before the search sees them
- Built eleven ReAct agent graphs in LangGraph, swappable per request
- retrieval strategies could be run side by side against the same question
- Fixed a single-pass graph as the default to fit a ten-second response budget
- chosen over the recursive variants, with top-k cut to 5
- Shipped the document back office alongside the embedded chatbot, so the whole loop stays operable
Result
- An in-product chatbot answering from some 450 Notion documents
- It became a place people stay until they have the answer, rather than something tried once
- in its first month (Aug–Sep 2025), 258 users held 410 conversations, averaging 2.6 questions each
- Built the monitoring extract, so the operating numbers are checkable
- response time and token usage pulled out of the conversation log
- New users can now resolve product and domain questions in-product, without opening a support ticket
- The chatbot never falls behind the product
- shipping a feature and loading its guide document became one process