Early Access module

Collect signups with the Early Access widget

Add an accessible waitlist or signup form to your site or product with a single script tag. No cookies, WCAG-minded, with an API and CSV export.

Live demo

The inline form below is rendered by the real /early-access.js using the test key demo_key_for_testing_12345678.

Loading the live form…

Note: this demo uses a shared test key, so submissions go to a public Fluister demo project that you cannot see in your own dashboard. Want signups you can actually view and manage? Create a project and embed the widget with your own project key (data-project). No cookies are set.

Install

Paste this script just before the closing </body> tag. By default a floating button opens the form in a modal.

<script src="https://fluister.dev/early-access.js"
        data-project="YOUR_PROJECT_KEY" defer></script>

Inline in your page

Use data-mode="inline" with a data-target to render the form straight into a container (like the demo above).

<div id="signup"></div>
<script src="https://fluister.dev/early-access.js"
        data-project="YOUR_PROJECT_KEY"
        data-mode="inline"
        data-target="#signup" defer></script>

πŸ’‘ Only data-project is required. A default form is auto-created on first use.

Configuration

Customize the widget with data attributes.

AttributeDescription
data-projectYour project API key (required).
data-mode"modal" (default, floating button) or "inline".
data-targetInline only: CSS selector of the container to render the form into.
data-formOptional: a specific form id; otherwise the default form is used.
data-colorAccent color (hex), default #5B5FC7. Text color is auto-picked for contrast.
data-trigger-labelModal only: trigger button text, default "Get early access".

API & CSV export

Manage signups programmatically with your developer API key (Bearer token). Public signups use the project key via the X-API-Key header.

MethodEndpointDescription
POST/api/early-access/signupPublic signup (widget). Auth via X-API-Key.
GET/api/v1/early-accessList signups (developer key). Filters: project_id, status, since, limit.
PATCH/api/v1/early-access/[id]Update status: new, contacted, invited, rejected, converted.
GET/api/v1/early-access/exportCSV export of all signups (developer key).

List signups

curl "https://fluister.dev/api/v1/early-access?project_id=YOUR_PROJECT_ID&status=new" \
  -H "Authorization: Bearer YOUR_DEVELOPER_API_KEY"

Export to CSV

Download every signup as CSV (columns: email, name, company, message, status, source_url, created_at). You can also use the export button in the dashboard.

curl "https://fluister.dev/api/v1/early-access/export?project_id=YOUR_PROJECT_ID" \
  -H "Authorization: Bearer YOUR_DEVELOPER_API_KEY" -o signups.csv

Accessibility & privacy

Accessibility (WCAG-minded)

  • Every field has a visible label linked via label/htmlFor.
  • Errors are linked with aria-describedby and announced (role="alert"/aria-live).
  • Fully keyboard-usable; Escape closes the modal and focus returns to the trigger.
  • The modal uses role="dialog", aria-modal, and a focus trap.
  • Contrast β‰₯ 4.5:1 and touch targets of at least 44Γ—44px; color is never the only cue.
  • Respects prefers-reduced-motion and exposes loading state with aria-busy.

Privacy

  • No cookies and no tracking β€” the widget works without a consent banner.
  • IP addresses are stored hashed, never raw (same as feedback).
  • A honeypot field blocks bots without a captcha; input is validated server-side.
  • Duplicate signups return a success-ish response so an existing email is never revealed.