docsOne script tag. No plugin, no build step, no framework — the widget draws itself into a shadow root, so the theme cannot reach in and it cannot leak out.
In WordPress: Appearance → Editor → Footer, add a Custom HTML block, paste this.
<script src="https://chat.italix.org/embed.js" data-bot="docs" defer></script>
Add a Custom HTML block where the chat should appear, containing an empty element and the tag. The panel stays open and takes the width it is given.
<div id="ix-chat"></div>
<script src="https://chat.italix.org/embed.js" data-bot="docs" data-mount="#ix-chat" defer></script>
https://www.italix.nethttps://chat.italix.org
Exact matches only — scheme, host and port. https://example.org
does not cover https://www.example.org, and that is
deliberate: a suffix test would also match
https://evilwww.italix.net.
Adding one is a line in .env on this server.
https://chat.italix.org/api/chat/docs/widget.json for the labels;/api/chat/docs/message, at most
6 times a minute per visitor;localStorage, so a
reload continues the same thread. Anyone holding that id can read that
transcript — right for an anonymous documentation bot, and not for
anything touching an account.The corner button is this bot, loaded by exactly the snippet above — the same script, the same shadow root, the same cross-origin request path a WordPress page takes. A page that only *described* the embed would be describing something nobody had run.
The Alpine renderings are at /demo/docs — same wire contract, server-rendered rather than embedded.