Try the live demo
Type or talk to the AI overlay running on this page. No setup, no API key.
Try the live demoStatic-site AI support overlay
Browser-local STT and TTS. No server, no API key, no Web Speech.
Drop one <script> into your static site.
Get started in 3 steps
Type or talk to the AI overlay running on this page. No setup, no API key.
Try the live demoOpen the visual Flow Builder, drag nodes, and export a config bundle (JSON).
Open Flow BuilderDrop the bundle and one script tag on any static host. Works on GitHub Pages.
StartWhat it is
Plain HTML. Works in Astro, Next export, Hugo, a CMS page, or a raw index.html.
Transformers.js onnx-community/distil-small.en q4 for STT and Piper WASM for TTS.
The assistant can run only the actions your page registers. No arbitrary scripts or hidden DOM control.
Live demo
This landing page runs the same overlay bundle you ship. Text support works immediately. Voice support uses WASM STT/TTS after you press Prepare.
The overlay is mounted from ./dist/website-ai-call-center.iife.js.
Guide users through output device, mute, and browser permission checks.
Show the correct panel and prefill a help query without guessing selectors.
No checks have run yet.
Call scenario catalog
Each card comes from validated scenarios/*.yml: intent, workflow route,
sample phrase, match terms, assistant reply, and the safe actions the page may run.
How it works
User grants microphone access only after a click.
Transformers.js transcribes through a worker-backed browser model.
Local rules or an HTTP adapter choose the next safe guidance step.
The assistant speaks locally after the voice model is prepared.
Architecture
website
├─ dist/website-ai-call-center.iife.js
├─ dist/workers/stt-worker.js
├─ dist/workers/tts-worker.js
├─ registered page actions
└─ local engine or HTTP AI adapter
browser
├─ Transformers.js WASM STT
├─ Piper WASM TTS
└─ CacheStorage / OPFS when available
<link rel="stylesheet" href="./dist/website-ai-call-center.css">
<script src="./dist/website-ai-call-center.iife.js"></script>
const sdk = window.WebsiteAICallCenter;
const center = sdk.createWebsiteCallCenter({
engine: sdk.createLocalRuleEngine({ scenarios }),
stt: sdk.createWasmSttAdapter(),
tts: sdk.createPiperTtsAdapter({
fallback: sdk.createNoopTtsAdapter()
})
});
const actions = sdk.createSafeActionRegistry()
.register({
id: 'show-account',
label: 'Show account settings',
run: () => document
.querySelector('#account')
?.scrollIntoView({ block: 'center' })
});
Human test path
If all five boxes pass on your phone over LTE, the static demo is ready to share.
Required for microphone access. GitHub Pages provides HTTPS.
Required by Transformers.js and Piper browser inference.
Required to keep model work off the main UI thread.
Model downloads should be cacheable after first load.
Permission is requested only after the user starts voice mode.
Get started
npm install
npm run site:build
python3 -m http.server 4173 -d _site
The vanilla example contains the concrete page actions, scenario engine, and WASM speech adapters.
Open examples/vanillaFAQ
No. The default speech path uses WASM STT and Piper WASM TTS. The fallback is no-op so audio is never silently sent to browser-vendor speech services.
Yes for the static overlay, text path, workers, and non-threaded WASM. Models are downloaded lazily from their configured CDNs.
Yes. Swap the local scenario engine for the HTTP adapter and keep the same registered action boundary.
Model binaries are large and should stay out of the repo. First-load downloads are cached by the browser where supported.