The platform
What all three products stand on
AI Answers reads your pages. Content Studio writes your next deck. Safety Vision reads your cameras. From the ingest queue down, they are the same system — the same tenancy, the same tokens, the same insistence on evidence.
Ingestion and indexing
Everything all three products know starts here. For AI Answers that is your website, rendered with Playwright so client-side content is read like any other page. For Content Studio it is your brand kit and the decks you upload, extracted shape by shape rather than summarised. For Safety Vision it is the alarm frames your VMS already writes, read from your own bucket. No pipeline holds work in memory — a deploy can kill the process mid-run and the queue survives it.
- JavaScript rendering, tables and PDFs preserved
- Fingerprinted re-crawls: changed pages re-embedded, deleted pages removed
- CMS ping to re-index a single page on publish
- Uploaded decks extracted shape by shape, never guessed at
- Frames read cross-account by role or key pair
- /services
- changed → re-embedded
- /faq
- 304 → skipped
- /pricing-2023
- 404 → removed
- /blog/*
- 3 new → indexed
Control and guardrails
No product here is allowed to be a black box you hope behaves. Answers pass forty-three guardrail rules, four of them locked. Competitor-only questions are refused before a model is called at all. Generated content is checked against your brand kit and your written guidelines before it reaches you. On the safety side, zones decide which rules apply where, and advisory mode lets you watch a rule before it starts alerting anyone.
- Per-page rules to exclude or boost any URL
- Pinned answers for wording you must control exactly
- Confidence floor: hand over rather than guess
- Brand kit enforced on every generated draft, not suggested
- Advisory mode and grace zones for safety rules
- competitor_only
- refuse before LLM
- brand_negative
- blocked on output
- confidence < floor
- hand over
- pinned_answer
- verbatim
Measurement
Quality that is not measured drifts. Upload your own prompt sheet and grade the whole set, then diff this run against the last to see which prompts moved and why. Safety incidents are counted only once a reviewer has closed them, and precision is always reported next to coverage so a flattering number cannot hide a detector that stopped firing.
- Prompt suites imported from xlsx or csv
- Run-versus-run diff with per-prompt movement
- Reviewer agreement tracked as its own measure
- Converted decks scored for fidelity, version by version
- Pipeline health and failures on the same screen
- failures
- 22 → 3
- graded runs
- 8
- counting rule
- closed incidents only
- precision
- reported with coverage
- deck fidelity
- 95% match
Integration
One script tag before the closing body tag installs the widget. Everything the widget does is also available over the public API with per-site tokens, domain whitelists and a scope boundary that is actually enforced — a chat key cannot post safety alarms, and one site's token cannot write into another's.
- Per-website and per-site API tokens, revealed once
- Domain whitelists per token
- Webhooks on incident opened and resolved
- Integration docs generated from your own configuration
- POST /v1/query
- scope: chat
- POST /v1/safety/alarms
- scope: safety
- POST /v1/pages/refresh
- re-index one page
- wrong scope
- wrong_key_scope
Tenancy and security
Each client gets its own database and its own vector collection — answers, brand kits, evidence images and incidents are never stored alongside another client's. Each product is enabled per client with its own flag, so buying one does not expose the others. Bring your own model key and the usage lands on your bill instead of ours.
- Database and vector collection per client
- Roles, co-owners and invites, re-read on every request
- Per-product feature flags
- Your own OpenAI, Anthropic, Gemini, Azure or Groq key
- database
- one per client
- vector collection
- one per client
- features.aiChat
- on
- features.contentStudio
- per contract
- features.safetyVision
- per contract
Start with the product you need first
All three are flagged and billed separately. Adding another one later costs you a setting, not a migration.