An AI concierge with a face, for any website.
One tag gives your site a support chat that visitors actually enjoy: a rigged 3D avatar that blinks, talks, and lipsyncs; streaming answers grounded in your live page; and voice in and out, straight from the browser. No account, no crawler setup, no per-seat pricing.
This page runs it live, try the bubble in the corner ↘
Why it beats a faceless chat bubble
Most site chatbots are a text box with a logo. This one is a presence: the same rigged-avatar engine that powers Walk and the page guide, pointed at support.
A real 3D avatar
Skeleton-rigged, blinking, idling, viseme-lipsyncing while it speaks. Visitors pick their concierge from a diverse catalog, or you supply your own GLB.
Answers from your page
At ask-time it reads the live page (title, headings, nav, content) plus your curated knowledge, and refuses to invent prices or policies it can't see.
Tokens, not spinners
Answers stream in over SSE and the avatar starts speaking the first sentence while the rest is still arriving.
Talk to it, hear it
Push-to-talk speech input and browser-native speech output, no audio backend and no API key. Mute is one click and remembered.
Your brand, both themes
One accent color restyles the whole widget. Light and dark follow the visitor's system, or pin either. Bottom-left or bottom-right.
Free and open
The widget is open source and the hosted answer engine runs on the three.ws free inference chain. Bring your own endpoint any time, same wire format.
Install in under a minute
Pick your flavor. Every option ships the same widget.
<script type="module"
src="https://three.ws/concierge/concierge.global.js"
data-concierge
data-site-name="Acme"
data-accent="#f97316"
data-suggestions="What is Acme?|What does it cost?"></script>
import '@three-ws/concierge';
<three-concierge
site-name="Acme"
accent="#f97316"
knowledge="Pro plan is $20/month. Support: help@acme.com."
suggestions="What is Acme?|What does it cost?">
</three-concierge>
npm install @three-ws/concierge three
import { Concierge } from '@three-ws/concierge';
const concierge = new Concierge({
siteName: 'Acme',
accent: '#f97316',
knowledge: FAQ_TEXT, // your curated facts, optional
persona: 'warm, playful, concise',
});
concierge.on('message', ({ role, content }) => track(role, content));
concierge.ask('What does the Pro plan cost?');
How it works
No crawler, no vector database, no onboarding call. Three moving parts.
Harvest at ask-time
When a visitor asks something, the widget snapshots the live DOM, title, meta description, headings, nav labels, and the main content, capped to a strict budget, and merges in the knowledge you curated. Whatever your page says today is what the concierge knows today.
Ground and stream
The snapshot, the running conversation, and the question go to /api/concierge, which builds a grounded system prompt and streams the answer back over SSE from the three.ws free-first inference chain, with automatic failover across providers, so the widget stays up when any one lane is throttled.
Speak while streaming
Completed sentences are handed to the browser's speech engine as they arrive, and a text-to-viseme timeline drives the avatar's mouth morphs in sync. Muted? The captions and lipsync still play, so the answer never stalls.