Key Outcomes
Zero
hallucinated facts on team size or project count
Instant
token-by-token streamed answers
24/7
no queue, no waiting on a reply
Voice + text
built-in speech-to-text input
~$0/mo
inference cost at current traffic
Overview
- •
Industry: AI / Conversational Interfaces / Marketing
- •
Platform: Standalone public web app, no login (ask.ownexlabs.com)
- •
Users: Prospective clients, job seekers, and site visitors
- •
Stack: Gemini 3.1 Flash-Lite + gemini-embedding-001, Postgres/pgvector, Next.js 16, Vercel AI SDK, Deepgram, Vercel + Supabase
Background
Visitors landing on ownexlabs.com had to hunt across pages to answer basic questions, like how big the team is, whether we had built anything like their idea, or what something costs, or fall back to a contact form and wait for a reply. Meanwhile the team was fielding the same handful of questions by hand, over and over.
We wanted something that could answer instantly and honestly, and turn the moment someone is actually interested into a captured lead instead of a bounce. So Ask Ownex Labs was built as its own standalone, anonymous chat product: no login, grounded strictly in real company content, with hard numbers like team size and project count pulled from a live database instead of left to the model to recall.
It's deliberately narrow. It isn't a general-purpose assistant: it won't write code, translate text, or answer trivia. It only knows about Ownex Labs, but it knows that cold, and it says so plainly when a question falls outside what it can speak to.
- •Give any visitor accurate, conversational answers about the company
- •Guarantee zero hallucination on hard facts like team size and project count
- •Stay strictly in scope: no code help, no trivia, no general chatbot behavior
- •Catch genuine buying intent and offer to collect a name and email without being pushy
A chatbot that only knows about Ownex Labs: it answers with confidence, or it says so and points to a human.
The Challenge
Business Challenges
- Deciding how strict "in scope" should be: answer anything about Ownex Labs, including capability questions like "do you know React?", but refuse to do work for the visitor
- Getting the tone right: banned agency clichés like "cutting-edge" and "leverage" in favor of a warm, brief, contraction-using voice
- Deciding not to publish pricing at all: any cost question is treated as buying intent and routed to lead capture instead of a number
Operational Pain Points
- Keeping answers accurate as the real site changes, backed by a consistency-check script over the content source files
- Guaranteeing exact numbers like team size and project count can never drift from what is actually true
- Avoiding a pushy lead form: it only appears on confirmed buying intent, and only once per conversation
Technical Challenges
- Embedding dimensionality mismatch: Google's embedding model outputs 3072 dimensions, but the Postgres vector index caps at 2000, so vectors are truncated to 768 and re-normalized
- Stripping a subtle "this is AI" tell (stray em dashes creeping into replies) from both the system prompt and the output stream
- Serverless Postgres quirks: Supabase's pooled connections don't support prepared statements, and the free tier auto-pauses after 7 days idle
- Voice input felt slow from a per-press auth token fetch, fixed by pre-warming and caching the token and running it in parallel with the mic-permission request
The Solution
Every question runs through a retrieval-augmented generation pipeline. The visitor's message is embedded and matched against a vector database of curated content chunks (company, project, and service write-ups) for descriptive detail, while hard facts like team size, project count, and contact info are pulled directly from a structured database table so they're never left to the model's judgment. Both are stitched into a single grounding block and handed to Gemini 3.1 Flash-Lite with a strict system prompt, and the answer streams back token-by-token while a lightweight two-stage check decides whether to surface the lead-capture form.
Core Architecture
Implementation Process
Scope & Content Sources
Decided what the bot should and shouldn't answer, then gathered and structured real company, project, and team content into a curated knowledge base.
Retrieval & Knowledge Layer
Split that content into an exact-facts database and a semantically searchable chunk store, so hard numbers and descriptive answers each come from the right source.
Chat Experience
Built a streaming chat UI with voice input, plus a two-stage lead-detection flow that only surfaces a contact form on genuine buying intent.
Guardrails, Testing & Launch
Wrote and tightened the system prompt against a test set covering scope refusal, exact-number accuracy, pricing deflection, and prompt-injection attempts, then deployed to Vercel and Supabase.
Results & Impact
A live, public chatbot built to answer honestly about Ownex Labs, or say so and hand off to a human, instead of guessing.Visitor Experience
- Instant token-by-token streamed replies
- 24/7 answers, no waiting on a contact form
Trust & Accuracy
- 0 hallucinated hard facts, team size and project count are DB-backed
- In-conversation lead capture, offered once on confirmed intent only
Technical & Cost
- ~$0/mo inference and embedding cost at current traffic
- 20 req/min per-visitor rate limit keeps it abuse-resistant
