Install the widget

ShipPulse is a single JavaScript file. Drop it on any page of your site — marketing pages, in-app, docs — and the floating feedback button appears in the bottom-right corner. Submissions land in your private inbox; you decide what becomes public.

The snippet

Add this to the <head> (or end of <body>) of every page where you want the widget to appear:

<script
  src="https://shippulse.app/widget/loader.js"
  data-project-slug="your-project-slug"
  data-widget-type="feedback/fab"
  data-theme-mode="auto"
  async
></script>

That is it. The loader is async, never blocks render, and ships under 18 KB gzipped. No bundler, no build step, no React peer-dependency drama.

What the attributes do

  • data-project-slug — required. The slug from your dashboard at /projects. Wrong slug = widget renders but submissions are dropped.
  • data-widget-type — pick one: feedback/fab (floating button), roadmap/inline (renders a public roadmap), changelog/inline (renders the changelog), or testimonials/wall (renders a testimonials grid). See widgets for variants.
  • data-theme-modelight, dark, or auto (matches the user's OS preference). Defaults to auto.

Optional attributes

  • data-user-email and data-user-name — pre-fill the submitter identity when the user is already authenticated on your site. Skips the email-capture step.
  • data-positionbottom-right (default), bottom-left, or top-right.
  • data-z-index — override the FAB's stacking context if your site has high z-indexed overlays.

Where it lives

The loader fetches its config from https://shippulse.app/api/widget/<project_slug>/config.json and caches it for 60 seconds. Brand color, copy strings and theme overrides set in your dashboard appear on every embed within the next minute — no redeploy needed.

Verifying the install

Open your page, look for the floating button. If it does not appear, open DevTools → Network → filter loader.js. A 200 with application/javascript means the script loaded. A 404 means the slug is wrong. A CORS error means the page is hosted on a domain that does not match your project's allowlist — add it under Settings → Domains.

Next

  • Pick a widget variant: widgets.
  • Turn on the proof loop — the wedge that auto-collects testimonials from voters when you ship.
  • Plug it into a custom domain.