SiteGuide is a drop-in chat assistant for any website. You paste one <script> tag, point it at a JSON file that describes your brand, and your site gets a Claude-powered guide that answers questions in your voice — with your colors, your knowledge, your quick actions.
Runs anywhere HTML runs. WordPress, Squarespace, Wix, Webflow, Shopify, Framer, static HTML, React, Vue, Svelte, Astro, Next.js, plain Notion embed. If the page has a <body>, the widget works. No SDK, no npm install, no build step.
Below, swap tenants live to see it work. Same widget script, wildly different brands. The whole product is one page.
<script src="/widget.js" data-site="atlas" defer></script>
<script> tag can go
Pick any of 8 tenants below. The site preview reloads in that brand's design, the widget in the corner re-skins to match, and the JSON config + embed snippet update on the right.
sites/. Swap it to see how the widget adapts.loading…
Pick a starter template, tune the colors, tone, and knowledge. The mock widget and JSON below update live. Copy or download when you're done — that's the real file you'd save as sites/your-brand.json.
loading…
sites/your-brand.json in your SiteGuide project./v1/sites to confirm it picked up the new tenant).<script src="https://siteguide.your-domain.com/widget.js" data-site="your-brand" defer></script>Three files. Zero build step. One HTTP endpoint. Here's the entire integration.
Drop one file in sites/. Name, tone, system prompt, knowledge chunks, quick actions, theme.
// sites/atlas.json { "id": "atlas", "name": "ATLAS", "tone": "sparse, lowercase...", "knowledge": [ ... ], "theme": { "primary": "#0a0a0a" } }
WordPress custom-HTML block, Squarespace code injection, a React app's index.html, a Wix HTML embed, a Notion embed, plain .html on a webserver. Same tag every time.
<!-- works on ANY host --> <script src="/widget.js" data-site="atlas" defer></script>
When someone asks, the server assembles a prompt-cached system message, streams Claude's reply as SSE, widget renders it.
// POST /v1/chat { "site_id": "atlas", "message": "how do drops work?" } → event-stream data: { "text": "we release..." }
Eight demo tenants. Deliberately different visual languages — the widget adapts to all of them.