$ man content-wiki/chatbot-architecture
Tools and MCPsintermediate
How the NeoBots Work
Soul files, RAG scoring, and the ChatWidget pattern behind Nio, Rem, and Recon
by Shawn Tenam
Three Bots, One Pattern
Each site in the GTMe OS monorepo ships its own chatbot: Nio on shawnos.ai, Rem on thecontentos.ai, Recon on thegtmos.ai. They share the same ChatWidget component from the shared package but each has a distinct personality, knowledge base, and accent color. The bots are public-facing - no auth required - and exist to help visitors explore the wiki, blog, and knowledge base content on each site.
PATTERN
Soul Files and System Prompts
Each bot's personality is defined in its API route's system prompt. The prompt sets the tone (lowercase energy, direct, no fluff), the persona (Nio talks like a builder, Rem like a content strategist, Recon like an ops engineer), and the rules (only answer from provided context, never fabricate URLs, link to full articles). The system prompt is assembled at request time by injecting retrieved article content below the rules block. This means the bot's knowledge is always current with the wiki - no retraining needed.
PATTERN
RAG Retrieval Without a Vector DB
The bots use keyword-based retrieval instead of embeddings. Each wiki entry, knowledge term, and blog post is converted into a RetrievableItem with title, description, keywords, and truncated content. When a user sends a message, the retrieval engine scores every item against the query using keyword overlap, synonym expansion, and category matching. The top 5 results are injected into the system prompt as context. A synonym map per bot expands queries - asking about 'cold email' also matches 'outbound', 'sequence', and 'prospecting'. This approach is fast, deterministic, and costs zero infrastructure.
PRO TIP
The ChatWidget Component
All three bots render through a single ChatWidget component in the shared package. It handles the chat UI, message streaming, suggested questions, gating (Substack subscribe or CTA), and the floating bubble. Each site passes its own config: bot name, accent color, welcome message, suggested questions, and API endpoint. The avatar (animated APNG) is rendered separately by each site's wrapper component (NioChat, RemChat, ReconChat) with a slide-in animation when the chat opens.
related entries