v19 — AI smart-fill, insights dashboards, and 50+ admin improvements
v19 is the biggest release since the platform-wide vertical-templates refactor. The headline feature is AI smart-fill: paste a customer's website URL and the bot is built end-to-end — template chosen, brand colors extracted, every template-specific field filled, knowledge base seeded, full-site crawl queued. The second-biggest is a complete insights surface — per-bot analytics, account dashboard, and (for the platform admin only) an OpenAI cost dashboard with per-account margin tracking.
🎯 The headline: AI smart-fill from URL
The fastest way to a working bot now takes one URL and 60 seconds.
- Auto-picks the best template from 100+ verticals by reading the page text.
- Fills every template-specific field from the actual page content (address, hours, pricing, house rules, check-in instructions, WhatsApp, email — all extracted, no typing).
- Extracts brand colors by scanning the page CSS for the most-used chromatic color.
- Drafts the bot name, widget title, welcome message, and 3-5 suggestion chips in the page's language.
- Crawls 2-3 secondary pages automatically (
/about,/contact,/services,/pricing,/faq,/policies,/check-in,/house-rules) so information that lives off the home page isn't missed. - Two-pass extraction: a focused second LLM call re-asks for any field the first pass left empty — fill-rate went from ~37% to ~87% in our tests.
- Smart defaults for "no X" policies — checkboxes like No parties, No smoking, Trash disposal required default to ON unless the page explicitly allows them.
- Proposes 1-4 knowledge sources (website crawl, products catalog, About text, FAQ Q&As — every Q&A grounded in actual page content, never invented).
- Whole-site crawl auto-queued — up to 50 pages, 3 hops deep, running in the background within seconds of bot creation.
- Available on desktop AND mobile admin, with full UI parity.
- Double-create guard — clicking Create multiple times no longer makes duplicate bots.
📊 Insights & analytics dashboards
Per-bot Analytics tab (rebuilt end-to-end)
- 4 headline KPIs: Conversations, Messages, Avg messages per conversation, Deflection rate
- What visitors ask about: top single-word keywords + top 2-word phrases + entry topics (the first thing visitors send), extracted from real conversations
- Question types donut — how the bot classified each question (general / out-of-scope / shortcuts)
- Knowledge-coverage gauge with healthy/mixed/low color states
- Needs-fix topics auto-aggregated across the account
- Hour × day-of-week heatmap for traffic patterns
- Conversation-depth histogram (1 / 2 / 3-5 / 6-10 / 11+ messages)
- Daily trend + response-time stats + answer-confidence histogram (low/mid/high)
Account dashboard
- 12-week conversation trend across all bots
- Engagement funnel (opens → conversations → messages → host clicks) with conversion rates
- Smart-nudges rule engine surfaces actionable insights automatically:
- "Conversations are up 32% vs. last month"
- "Knowledge base hasn't been updated in 47 days"
- "3 visitors asked in Greek but got English answers"
- "'Pricing' chip on X bot hasn't been clicked in 30+ days"
- 14 individual insight cards covering deflection, knowledge coverage, response time, mobile/desktop split, chip CTR, abandoned rate, MoM delta, top languages, no-answer topics
Improvement tools
- Try-a-query debugger — type any question, see which knowledge chunks retrieval surfaces with cosine scores. The single best tool for tuning a bot.
- Knowledge lint — one-click scan for empty sources, duplicates, disabled sources, unindexed bots
- CSV export of every conversation + transcript
- Conversation replay — re-ask a past question against your current knowledge base to verify a fix
- Custom conversation labels (lead / complaint / feature-request, beyond useful/needs_fix/ignored)
💸 Cost-reduction levers
- Redis-backed cache for
/widget-config/{slug}— every visitor page-load no longer hits Postgres (60s TTL, auto-invalidates on bot save) - Greeting shortcut in 5 languages — "hi", "thanks", "goodbye" get canned responses instead of OpenAI calls
- Per-bot max-output-tokens — FAQ-style bots can cap at 150 instead of 300
- Chunk deduplication before embedding — nav/footer text repeated across pages embeds once, not N times
- Telemetry-driven cost tracking — every chat response logs prompt + completion tokens for per-model accounting
📈 Platform-admin cost dashboard
Hidden from customers — visible only to platform admins:
- Total OpenAI cost month-to-date + delta % vs last month
- Cost-per-conversation aggregate
- Per-account margin view — plan revenue minus OpenAI cost (with EUR/USD conversion), red/green so unprofitable accounts jump out
- Per-bot cost + cost-per-conversation, clickable to the bot editor
- Cost-by-model bars + 30-day daily cost trend
🎨 Widget improvements
- Markdown rendering in bot bubbles —
[Product name](url)becomes a real clickable link; bold, italic,code, bare-URL autolinking all work - Named typing indicator — "Nikos is typing…" instead of just dots
- Frustration detection — multilingual regex spots angry/stuck visitors and surfaces a "Talk to a person" handoff banner
- 👍/👎 thumbs feedback on every bot reply; thumbs-down auto-flags the conversation as needs-fix
?keyboard shortcut to open the widgetprefers-reduced-motionsupport — pulse animation suppressed for users who want less motion- Hardened launcher + send + close colors against host-site CSS resets (the dark-on-dark "AI" text bug)
- Device + language + path + viewport auto-attached to every analytics event
chip_clickevents — chip CTR is now measurable- Quick-close detection (
widget_close_quick) feeds abandoned-conversations metric
🛠️ Admin UX
- Toast notifications (success/warn/error/info) replacing blocking
alert()everywhere - Unsaved-changes warning when leaving a dirty form
- Manual dark/light toggle (🌓 button) — overrides system preference
- Keyboard shortcuts —
/focuses bot search;g d/b/c/k/a/o/sjumps to sections;?shows help - Search bots in sidebar by name/slug/vertical
- Starred bots — persist per-account, float to the top
- Bot status freshness dots in the bot list
- Drag-and-drop file upload for knowledge sources
- Bulk URL ingest — paste a list, one source per row, crawls queued
- "Copy install snippet" button with clipboard fallback
- Help-tip
?chips next to form labels - Full mobile React parity for the dashboard, analytics, billing, and create-bot flow
🔌 Embed / installation
- Shopify install snippet with theme-editor instructions
- Wix install snippet (Studio + Classic Editor)
- Squarespace install snippet (Code Injection footer)
?bot=<slug>URL param on/demofor sharing a demo of any customer bot
🛡️ Reliability & observability
/healthreports queue depth + oldest queued age — returnsdegradedwhen oldest queued > 5 min. Catches stalled workers within minutes via any uptime monitor.- Worker observability — per-job OK/FAIL stderr logs with timing,
jobs_processed/jobs_failed/last_job_atin worker_status - Exponential-backoff retries (60s → 240s → 960s → 3840s, 4 attempts) for transient failures on retryable job types
schedule_maintenance_jobshardened — each maintenance scan in its own try/except, so one broken step can't silently kill the worker- Per-bot chat rate limit — abused bot can't hurt others
- Slack webhook on auto-flagged conversations (per-account)
- Bot evaluator endpoint for regression-testing knowledge changes
🏷️ New verticals & tooling
digital_downloads_shopblueprint — for creators selling PDFs, audio, video- New
productsknowledge source type — extracts JSON-LD / OpenGraph product data; tier-based ranker prioritises start-page links over sitemap entries - Strengthened retrieval prompt — products mode requires mandatory
[Name](URL)markdown linking + enumeration for set questions - Retrieval limit 6 → 12 — better recall for enumeration questions
- Reusable script to clone any source bot into a new account (account + owner user + bot + knowledge sources, fully re-embedded)
🐛 Notable bugs fixed along the way
- Job worker was silently stalled for weeks — caused by a stale column reference. Fixed + hardened so it can never happen again.
- Cost dashboard 500 — SQL alias in
ORDER BYexpression - Cost dashboard margin math — wrong plan prices + USD/EUR unit mismatch
- AI smart-fill "Use this draft → form is empty" — DOM selector mismatch
- Structured field (
house_rules) checkboxes not selected — array vs object shape - Bogus
03:00check-in time — regex over-matched non-time numbers - Hallucinated
pets_allowedinhouse_rules— schema-filtering missing - Dark mode broken on AI-draft panel — CSS source-order conflict, fixed with
:where() - Widget launcher AI text + send arrow rendering dark-on-dark on guitarteacher.gr — host-CSS override
What's next
Still on the roadmap: PDF ingestion, voice input in the widget, per-bot member permissions, 2FA UI for account_users, an embedded-search widget mode, a knowledge-versioning UI with diff/restore, Google/Microsoft SSO, and a templates marketplace. We'll ship those incrementally and post a follow-up release here.