FeatureVoter

Documentation

Quick Start

  1. Sign up for a free account
  2. Create a project in the dashboard
  3. Copy the embed code from project settings
  4. Paste the script tag into your website

Embed Code

Add this script tag to your HTML, just before the closing body tag:

<script src="https://featurevoter.com/widget.js" data-project="YOUR_PROJECT_ID"></script>

Configuration

AttributeRequiredDescription
data-projectYesYour project ID from the dashboard
data-themeNo"light" (default) or "dark"
data-apiNoCustom API endpoint (for self-hosting)

How Voting Works

  • Each user gets one vote per feature request
  • Votes are tracked by browser fingerprint (anonymous) or email
  • Users can remove their vote at any time
  • Vote counts update in real-time for all viewers

Status Badges

Feature requests can have one of five statuses:

Under ReviewDefault status for new requests
PlannedAccepted and added to your roadmap
In ProgressCurrently being worked on
ShippedFeature has been released
DeclinedWon't be implemented

Admin Dashboard

  • View all requests sorted by votes, date, or status
  • Change request statuses
  • Add admin comments (visible to users in the widget)
  • Merge duplicate requests
  • Hide spam requests
  • View analytics (votes, new requests, most-voted)

Email Notifications

  • Get an email whenever a new feature request is submitted
  • Opt into a weekly digest summarizing votes and new requests
  • Receive a warning when you approach your plan's vote or project limits
  • Manage notification preferences from your account settings

Content Security Policy (CSP)

The widget works on any domain out of the box. However, if your site sets a strict Content Security Policy, you need to allowlist featurevoter.com in two directives:

DirectiveRequiredPurpose
script-srcYesAllows the browser to load widget.js from FeatureVoter
frame-srcYesAllows the widget iframe hosted on featurevoter.com
connect-srcNoNot needed — all API calls happen inside the iframe

Example HTTP header:

Content-Security-Policy: script-src 'self' https://featurevoter.com; frame-src https://featurevoter.com;

The same directives apply if you use a <meta http-equiv="Content-Security-Policy"> tag instead of an HTTP header.

If the widget does not appear, open the browser console and look for Refused to load or Refused to frame errors — these indicate a missing CSP directive.

Troubleshooting

Widget not appearing

Check the CSP directives above. Also verify that the data-project value in your embed code matches the project ID in your dashboard.

Votes not persisting

Aggressive browser privacy settings or extensions may block the iframe's localStorage. In that case the widget falls back to a session-only identifier and votes will not persist across page reloads.

Widget overlapping site elements

The widget uses position: fixed, z-index: 999999, and is pinned to the bottom-right corner. If it overlaps important UI, you can adjust its position with CSS targeting #featurevoter-widget.