The Feedbackzu widget is a self-contained <script> tag. Paste it into the
<head> (or just before </body>) of any page and a feedback button appears in
the corner. Clicking it opens a panel where visitors rate their experience and
leave a note — submissions flow straight into your workspace. It works in any
framework — React, Vue, plain HTML, Webflow, Framer, anything that lets you drop
in a script.
Embed snippet
Copy the ready-made snippet from your dashboard under Settings → Integrations, or build it yourself by dropping your Project ID into the tag:
<script src="https://cdn.jsdelivr.net/gh/intellizu/feedbackzu-widget@v0.3.0/widget.js"
data-project-id="YOUR_PROJECT_ID"
data-position="br"
data-accent="#6366f1"
async></script>
That’s the whole installation. The script renders its own button and panel — no
iframe — and posts submissions to https://api.feedbackzu.com/widget/submit.
Finding your Project ID
Your Project ID (also called the Workspace ID) is shown in the dashboard under Settings → Integrations, both as its own copyable field and pre-filled inside the embed snippet. It’s a stable UUID that never changes when you rename your workspace, so embeds you’ve already shipped keep working.
Configuration
Configure the widget with data-* attributes on the script tag:
| Attribute | Default | Description |
|---|---|---|
data-project-id | (required) | Your Workspace ID — identifies which workspace receives the feedback. |
data-position | br | Button corner: br, bl, tr, or tl. |
data-theme | light | light, dark, or auto (follows the visitor’s system). |
data-accent | #6C3AED | Accent color for the button and primary actions (any CSS color). |
data-base-url | https://feedbackzu.com | Base URL for the widget’s branding links and images. |
Changing an attribute takes effect the next time the page loads.
Single-page apps
The script self-initializes on page load and is idempotent: if it runs twice, the second invocation no-ops. You normally don’t need to re-mount it on client-side route changes.
If you’re using a framework that strips <script> tags from your <head>
during hydration (some SSR setups), inject the snippet from a useEffect or
onMount hook instead.
Content Security Policy
If your site uses a CSP, allow the widget to load its script and post feedback:
script-src 'self' https://cdn.jsdelivr.net;
style-src 'self' 'unsafe-inline';
connect-src 'self' https://api.feedbackzu.com;
img-src 'self' https://feedbackzu.com data:;
'unsafe-inline' for styles is required because the widget positions and styles
its button with inline style attributes. If you’d rather not allow inline
styles, get in touch — a stricter build is on the roadmap.