Add the widget

Static & marketing sites

No login and no server? Enable anonymous submissions and drop the widget straight in.

When to use this

Portfolios, landing pages, docs, and other marketing sites usually have no user accounts and no server to compute a customerHash. For those, FeatureFast can accept anonymous submissions — you render the widget with just a projectId and nothing else.

If your app does have authenticated users, prefer the React & Next.js guide instead, so submissions are tied to a verified customer.

1. Enable anonymous submissions

In your dashboard, open the project's Settings and turn on Allow anonymous submissions. Without this, the API rejects requests that don't include a valid customerHash.

2. Set allowed origins

Still in Settings, add your site's domain(s) to Allowed origins. This restricts who can submit on behalf of your project — recommended for anonymous projects since there's no per-customer verification. Leaving the list empty allows any origin.

3. Drop in the widget

Render <FeatureFast /> with only your projectId — no customer fields.

src/App.tsxtsx
import { FeatureFast } from "@featurefast/react";

export function App() {
  return (
    <>
      {/* …your site… */}
      <FeatureFast projectId="<your projectId>" />
    </>
  );
}

Content-Security-Policy

If your site sends a Content-Security-Policy, allow-list FeatureFast in the same two directives — otherwise the browser silently blocks the widget.
  • script-src https://cdn.featurefast.ai — loads the widget.
  • connect-src https://<your-deployment>.convex.site — submits prompts (note the .convex.site host, not .convex.cloud).
Content-Security-Policytext
script-src  'self' https://cdn.featurefast.ai;
connect-src 'self' https://<your-deployment>.convex.site;
Not appearing? See troubleshooting for the decision tree and error reference.