A tiny embed.js on your site plus a hosted iframe overlay — About, feedback, and changelog without building your own support stack.
Visitors click a floating launcher on your page. A fullscreen overlay opens and loads a separate app
in an iframe — isolated from your CSS and JS. Configuration (copy, links, feature flags, theme) is passed over
postMessage.
You keep your site static or minimal; you do not add routes or a backend just to ship “help / feedback / what’s new”.
Open demo.html after running pnpm build and
pnpm demo (served over HTTP, not file://). You’ll see a sample host page and the
floating widget.
On Netlify, the same demo is published at /demo.html next to this page once the site build
finishes.
Host your built embed.js, host the overlay app, then:
<script src="https://projectmate.uft1.com/embed.js"></script>
<script>
ProjectMate.init({
projectId: "my-tool",
appUrl: "https://projectmate.uft1.com/overlay/",
about: { title: "My tool", description: "…" },
features: { chat: false, feedback: true, updates: true, issues: false, about: true },
});
</script>
Open from a link (optional): set autoOpen so a hash, query string, or path opens the overlay without clicking the launcher. Each rule is optional; if more than one is set, any match (OR) will open.
autoOpen: {
hash: "help", // matches #help
query: { name: "pm", value: "1" }, // matches ?pm=1
path: "/support", // pathname (default: prefix match, e.g. /support and /support/…)
pathMatch: "prefix", // or "exact"
}
Hide the floating button and open the overlay from your own UI (a regular link, a button, or programmatically):
ProjectMate.init({
projectId: "my-tool",
appUrl: "https://projectmate.uft1.com/overlay/",
launcher: { hidden: true },
autoOpen: { hash: "help" }, // optional
});
// Anywhere on your page
<a href="#help">Open help</a>
<button onclick="ProjectMate.open()">Open help</button>
Full options (changelog, links, accent, web3forms, feedbackEndpoint, …) are in the
repo README and packages/shared-types.