Customer Engagement Platform for Email, Push Notifications, & SMS
The world's leader for mobile push notifications, web push, SMS, email and in-app messaging. Trusted by 2 million+ businesses to send 12 billion+ messages per…
Embeddable doc-grounded chat widget with lead capture (portfolio demo)
Translation pending
MarketingTypeScript · JavaScriptGitHub @gaopfEditerOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
SiteBot — Website AI Assistant (Portfolio Demo)
Small businesses get the same repetitive questions on their website: hours, pricing, insurance, booking. SiteBot is a embeddable chat assistant that answers only from the company’s own documents, cites the source, and captures leads when it cannot help or detects buying intent.
Sample business: Bright Smile Dental Clinic — entirely fictional sample data for this demo.
• Visitors leave when they cannot find answers quickly.
• Owners cannot staff live chat 24/7.
• Generic chatbots invent facts; SiteBot is doc-grounded and refuses to guess.Read the full README ↗Small businesses get the same repetitive questions on their website: hours, pricing, insurance, booking. SiteBot is a embeddable chat assistant that answers only from the company’s own documents, cites the source, and captures leads when it cannot help or detects buying intent.
Sample business: Bright Smile Dental Clinic — entirely fictional sample data for this demo.
| Area | Behavior |
|---|---|
| Knowledge | Ingest Markdown, PDF, HTML, and plain text into a local retrieval index |
| Answers | Offline BM25-style search (MiniSearch) + templated excerpts with source citations |
| LLM (optional) | Set LLM_BASE_URL, LLM_API_KEY, LLM_MODEL for OpenAI-compatible APIs |
| Honesty | Low-confidence or missing docs → “I don’t know” + lead form |
| Leads | Name, email, need; email validation; SQLite + CSV by default |
| Integrations | Pluggable Google Sheets and HubSpot adapters (disabled by default) |
| Embed | One script tag adds a chat bubble |
| Admin | Conversations, leads, re-index, edit greeting & handoff email (HTTP Basic when ADMIN_PASSWORD is set) |
| Safety | Rate limits, injection-resistant LLM system prompt, no secrets in widget, CORS allowlist |
| Demo site + widget | Answered question | Lead fallback | Admin |
|---|---|---|---|
<script src="https://YOUR-DEPLOYED-HOST/widget.js" data-bot-id="bright-smile-demo"></script>
Locally:
<script src="http://localhost:3000/widget.js" data-bot-id="bright-smile-demo"></script>
npm install
npm run demo
npm run demo builds the retrieval index and starts Next.js. No API keys required.
ADMIN_PASSWORD | Behavior |
|---|---|
| Unset (default for public demo) | /admin is read-only demo mode: sample leads/conversations only, no settings or re-index writes |
| Set | /admin and /api/admin/* require HTTP Basic auth (any username, password = ADMIN_PASSWORD); real leads and writes enabled |
Do not expose a password-protected admin on the public internet without TLS (Vercel provides HTTPS).
npm test
npx playwright install chromium
npm run screenshots
data/bots/bright-smile-demo.json to a new bot id (e.g. my-shop.json).docsPath at your folder of .md, .txt, .html, .pdf files.BOT_ID=my-shop npm run ingest.data-bot-id="my-shop".allowedOrigins in the bot JSON (or set ALLOWED_ORIGINS env var).Re-index from the admin UI or:
curl -X POST http://localhost:3000/api/admin/reindex -H 'Content-Type: application/json' -d '{"botId":"bright-smile-demo"}'
export LLM_BASE_URL=https://api.openai.com/v1
export LLM_API_KEY=sk-...
export LLM_MODEL=gpt-4o-mini
npm run demo
Answers still use retrieved passages in the prompt; the system instructions forbid hallucination.
Default: data/leads.db (SQLite) and append-only data/leads.csv.
Google Sheets (off by default): see docs/integrations/google-sheets.md
HubSpot (off by default): see docs/integrations/hubspot.md
vercel.json included).ADMIN_PASSWORD unset for the portfolio demo (read-only admin with sample data).ALLOWED_ORIGINS to your customer sites (comma-separated URLs). Vercel preview/production URLs are added automatically..env.example.https://<project>.vercel.app/widget.js in the embed snippet.Vercel notes:
npm run build runs ingest and commits/updates data/index/ — search works on serverless without runtime writes.persistenceNote explaining this. For production, enable Sheets/HubSpot sinks or a hosted database.public/widget.js — embeddable bubble (no secrets)data/sample-business/ — fictional Bright Smile docsdata/index/ — generated retrieval index (created by npm run ingest)src/app/api/ — chat, leads, widget config, admin APIssrc/lib/ — ingestion, retrieval, offline/LLM answering, lead storeMIT (portfolio demo).