SignalDesk
AI Support Chat That Never Makes Things Up
Project Overview
SignalDesk is an AI-powered support chat widget that answers questions exclusively from your website content. Unlike generic chatbots that can hallucinate or make up information, SignalDesk uses Retrieval Augmented Generation (RAG)to ensure every response is grounded in your actual documentation, FAQs, or help center pages.
The system crawls and indexes your website content into a vector database powered by Supabase with pgvector. When users ask questions, it performs semantic search to find the most relevant content chunks, then uses OpenAI's GPT modelsto generate accurate, contextual responses with source citations.
With support for multiple languages, automatic content re-indexing, and a simple one-line embed script, SignalDesk makes it easy to provide trustworthy AI support without the risk of embarrassing hallucinations.
The Problem with AI Chatbots
AI Hallucinations
Generic chatbots make up answers, citing policies that don't exist. Customers notice. Trust erodes.
Inconsistent Answers
Different responses for the same question. Support quality varies wildly. No single source of truth.
No Control
Public LLMs have no guardrails for your brand. One wrong answer can become a viral screenshot.
How SignalDesk Solves This
Content-Only Answers
Every response comes from your indexed pages. Nothing made up. Nothing borrowed from the internet.
Admits Uncertainty
If the answer isn't in your content, SignalDesk says "I don't know." No guessing. No fabricating.
Source Citations
Every answer links back to the page it came from. Users can verify. You stay accountable.
How RAG Works in SignalDesk
Retrieval Augmented Generation (RAG) is a technique that combines the power of large language models with a curated knowledge base. Instead of relying solely on the LLM's training data, RAG retrieves relevant documents at query time and uses them as context for generating responses.
The RAG Pipeline
Crawl & Index
Your website content is crawled, chunked, and converted to vector embeddings
User Query
User asks a question through the chat widget
Vector Search
Semantic search finds the most relevant content chunks from your knowledge base
Generate Response
GPT generates an answer using ONLY the retrieved content as context
User question:
"What are your shipping options?"
Vector search retrieves:
// Supabase pgvector similarity search
const { data: chunks } = await supabase.rpc(
'match_documents',
{
query_embedding: embedQuery("shipping options"),
match_threshold: 0.78,
match_count: 5
}
)
// Returns relevant chunks from:
// - /shipping-policy (similarity: 0.92)
// - /faq#delivery (similarity: 0.87)
// - /returns (similarity: 0.81)SignalDesk response:
We offer three shipping options: Standard (7-12 business days), Express (3-5 business days), and Next-Day delivery for orders placed before 2 PM.
📄 Source: Shipping Policy
Technical Architecture
Frontend Stack
- Framework: Next.js 16 App Router
- UI Library: React 19
- Language: TypeScript 5
- Styling: Tailwind CSS v4
- Components: shadcn/ui + Radix UI
- Icons: Lucide React
Backend & AI Stack
- Database: Supabase (PostgreSQL)
- Vector Store: pgvector extension
- Embeddings: OpenAI text-embedding-3-small
- LLM: OpenAI GPT-4o-mini
- Crawler: Custom with cheerio
- Testing: Vitest + Testing Library
-- Knowledge base documents table CREATE TABLE documents ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), content TEXT NOT NULL, metadata JSONB, embedding VECTOR(1536), -- OpenAI embedding dimensions language TEXT DEFAULT 'en', source_url TEXT, created_at TIMESTAMPTZ DEFAULT NOW() ); -- Vector similarity search function CREATE FUNCTION match_documents( query_embedding VECTOR(1536), match_threshold FLOAT, match_count INT ) RETURNS TABLE ( id UUID, content TEXT, metadata JSONB, similarity FLOAT )
Key Features
Chat Experience
- Real-time streaming responses
- Source citations with every answer
- Graceful "I don't know" handling
- Conversation history within session
- Mobile-responsive widget design
Multi-Language Support
- Separate indexes per language
- Auto-detect user language
- Language-specific knowledge bases
- Localized response generation
- Easy to add new languages
Content Indexing
- Automatic website crawling
- Smart content chunking
- Monthly automatic re-indexing
- Manual refresh trigger
- robots.txt compliance
Easy Integration
- One-line script embed
- Works with any website/CMS
- Customizable colors & branding
- Position configuration
- Custom welcome messages
Simple Integration
Add SignalDesk to any website with a single script tag:
<!-- Add before closing </body> tag --> <script src="https://signaldesk.mikul.me/widget.js" data-brand="Your Brand" data-color="#10b981" data-position="bottom-right" data-lang="en" ></script>
Ideal Use Cases
Help Centers
Index your knowledge base and let users find answers instantly
Documentation Sites
Technical docs, API references, and tutorials
E-commerce FAQs
Shipping, returns, product questions
SaaS Products
Feature explanations and onboarding help
Service Businesses
Pricing, availability, and service details
Educational Platforms
Course info, enrollment, and policies
Why Accuracy Matters
- Brand Trust: Wrong information from AI can damage customer relationships and brand reputation
- Legal Compliance: Accurate product/service information prevents disputes and liability
- Support Efficiency: Accurate first responses reduce follow-up tickets and escalations
- User Experience: Verifiable answers with sources build confidence in the chat system