Synora is a fully functional B2B omnichannel AI platform that enables businesses to deploy autonomous support copilot widgets that know their business inside and out. It handles text chats, real-time in-browser voice, and direct telephony calls right from your website, complete with hybrid RAG grounding citations, automated call sentiment analytics, dedicated leads CRM, and multi-tenant workspace collaboration.
Synora empowers businesses to move beyond generic chatbots. By indexing company knowledge (websites, documentation, PDFs, and raw text), Synora generates a hardened embeddable widget that answers customer questions using state-of-the-art Hybrid Retrieval-Augmented Generation (RAG).
- Enterprise Grounding: High-precision hybrid search blending
pgvectorsemantic embeddings with PostgreSQLtsvectorfull-text search and exact FAQ matching. - Strict Anti-Hallucination Boundaries: Answers originate strictly from verified business documents. If facts are absent, the copilot honestly acknowledges the missing information and offers human escalation.
- Omnichannel Support: Unified across web chat, real-time browser voice (Vapi Web SDK), and native telephone numbers with automated AI post-call summaries.
- Built-in Leads CRM: Automatically qualifies incoming contacts, extracts business emails/phone numbers, scores buyer intent, and exports leads to RFC-4180 CSV.
- Multi-Format Ingestion: Ingest text, Markdown, documents, or scrape websites (with automated noise, navigation, and cookie banner stripping).
-
First-Class FAQ Extraction: Automatically detects
Q:and question headings during ingestion, storing questions and answers as prioritized ground-truth records. -
Hybrid Retrieval Fusion: Executes parallel semantic vector search (
gemini-embedding-001, 768-dim) and PostgreSQL full-text keyword ranking (websearch_to_tsquery('english', ...)), fusing results using Reciprocal Rank Fusion (RRF$k=60$ ) with direct FAQ boosts. - Contextual Query Rewriting: Dynamically resolves pronouns ("it", "that", "the pro plan") across multi-turn dialogues while eliminating query label pollution.
- Interactive Knowledge Drawer: Dashboard inspection allows operators to view chunk boundaries, verify extracted FAQ pairs, check token counts, and test real-time retrieval rankings in the RAG Simulator.
- Transparent Evidence: Responses render clickable citation pills indicating exact grounding sources.
- Match Type Indicators: Displays whether an answer was derived via
FAQ Match,Hybrid,Semantic, orKeywordsearch.
The embeddable customer widget (/embed) provides three seamless support modes:
- Text Chat: Real-time grounded streaming chat with citation badges.
- Voice Mode: In-browser, low-latency voice conversations powered by Vapi (<1,500ms voice RAG responses).
- Phone Mode: Displays a dedicated telephone number for callers to reach the voice assistant over cellular networks.
- Centralized Lead Directory (
/dashboard/visitors): Track all prospects and customers captured across web chat and voice calls. - AI Qualification: Automatic lead scoring (0–100), intent detection (
pricing_inquiry,demo_request, etc.), and company details. - RFC-4180 CSV Export: One-click download of all visitor and lead records formatted for HubSpot, Salesforce, or Excel.
- Lead Qualification: Structured JSON extraction of buyer profiles and contact info.
- Automated Escalation Tickets: When an issue cannot be resolved or an operator is requested, Gemini generates a structured ticket with category, severity, and steps to reproduce.
-
Call Analytics: Voice call transcripts are automatically analyzed for sentiment score (
$-1.0$ to$+1.0$ ), churn risk (low,medium,high), and topic tags.
- Organization Scoping: Scalekit multi-user organizations share the same chatbots, knowledge bases, and conversations seamlessly via
tenantScope. - Tier Quota Guards (
lib/tier-limits.ts): Enforces resource limits across Free (5 sources, 100 msgs), Pro (50 sources, 5k msgs, 5 seats), and Enterprise (1,000 sources, 100k msgs, 50 seats). - Subscription Dashboard (
/dashboard/pricing): Live usage progress meters and functional tier upgrading.
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router), React 19 |
| Language | TypeScript, Node.js |
| Styling & UI | Tailwind CSS v4, Radix UI, Lucide Icons |
| Database | PostgreSQL (Neon serverless) with Drizzle ORM |
| Vector Engine | pgvector (768-dim embeddings, cosine distance) |
| AI / LLM | Google Gemini 2.5 Flash, gemini-embedding-001 (via LangChain) |
| Voice AI | Vapi (@vapi-ai/web, @vapi-ai/server-sdk) |
| Auth & B2B SaaS | Scalekit (SSO, OAuth, Multi-Tenant Team Invites) |
| Secrets Management | AWS Secrets Manager (@aws-sdk/client-secrets-manager) |
| Validation | Zod v3 |
| Deployment | Docker & Docker Compose |
Synora's database is managed via Drizzle ORM (db/schema.ts):
user— Synced user accounts.metadata— Core business information and website URLs.knowledge— Parent knowledge sources with processing status.knowledgeChunks— Chunk-level passages, headings, FAQ pairs, token counts, tsvector search vectors, and 768-dim pgvector embeddings.sections— Specialized chatbot personas with tone, allowed topics, and blocked topics.chatBotMetadata— Appearance configuration, Vapi assistant/phone IDs, and auto-generatedwebhook_secret.teamMembers— Scalekit organization member roles and invite statuses.visitors— Prospects captured via chat and voice with lead scores, intent, and companies.conversation— Chat and voice sessions with Vapi call IDs, AI summaries, sentiment scores, churn risks, and escalation ticket details.messages— Back-and-forth conversation turn history.subscriptions— Organization subscription tiers (free,pro,enterprise) and active status.plugins— BYOK integrations mapped to AWS Secrets Manager.
- Node.js 20+
- PostgreSQL database with
pgvectorenabled (e.g. Neon.tech) - Google Gemini API Key (
GOOGLE_API_KEY) - Scalekit Credentials (
SCALEKIT_ENVIRONMENT_URL,SCALEKIT_CLIENT_ID,SCALEKIT_CLIENT_SECRET) - AWS Account Credentials (for Secrets Manager)
- Vapi Account Credentials (optional, for Voice AI)
-
Clone the repository:
git clone <repository-url> cd synora
-
Install dependencies:
npm install
-
Configure Environment Variables: Create a
.envfile in the root directory:DATABASE_URL=postgresql://user:password@host/dbname?sslmode=require GOOGLE_API_KEY=your_gemini_api_key SCALEKIT_ENVIRONMENT_URL=https://your-org.scalekit.com SCALEKIT_CLIENT_ID=your_client_id SCALEKIT_CLIENT_SECRET=your_client_secret JWT_SECRET=your_jwt_secret NEXT_PUBLIC_URL=http://localhost:3000
-
Apply Database Migrations:
npm run db:push
-
Start Development Server:
npm run dev
Open http://localhost:3000 to access the Synora dashboard.
Synora includes a multi-tier automated test suite:
# 1. Strict TypeScript compilation check (0 errors)
npm run typecheck
# 2. Run full 67-test Opaque-Box E2E regression suite
npx tsx scripts/run-e2e.ts
# 3. Run RAG, Context Provision & Structured Output test suite
node --env-file=.env node_modules/tsx/dist/cli.mjs scripts/test-rag-and-context.tsTo build and run via Docker Compose:
docker-compose up --build -dLicensed under the MIT License.