A drop-in AI chat bubble for your own site — pointed at a model you control.
No subscription. The download link is yours to keep — re-download any time.
Everything below is in the app you download — no add-ons, no upsell.
Paste a snippet into your page. No framework, no bundler, no CDN — the widget is one HTML file and a config.
Answers arrive token by token from an Ollama-compatible endpoint you host; the model name and the endpoint are yours to set.
The widget sends no credentials. Your proxy adds the key, so a visitor can never read it out of the page.
Replies are parsed and formatted safely — every fragment is escaped before it is rendered.
The panel fills the screen at 390 px, the launcher gets out of the way, and Escape closes it.
The whole package, nothing hidden behind a plan:
CHANGELOG.md
LICENSE
README.md
VERSION
docs/USAGE.md
src/config.example.js
src/widget.html
Any static host, plus an Ollama-compatible endpoint your own server controls.
No hosted service, no model and no key are included — the widget is the front end, you supply the endpoint.
CORS must allow your site's origin, or the browser will refuse the request.
No conversation history and no storage: each request carries the system prompt plus the current question.
Straight answers, including the ones that cost a sale.
The widget itself (instant download) plus personal setup: your system prompt, your colours, your language, one revision round, and 30 days of help by e-mail.
You need an endpoint that speaks the Ollama generate API. That can be a small proxy in front of any provider — the point is that the key lives there, not in the page.
It is one file with no external requests until a visitor opens the bubble. No fonts, no icon library, no analytics.
Everything visible is in config.js: title, accent colour, welcome message, quick-reply chips, and the model.
Every id and class is wx- prefixed and all CSS is scoped to the widget root, so it neither inherits nor leaks styles.
A bug, a missing feature, a question before you buy — this goes to the operator, not to a ticket system. How feedback works →