To let people vote from inside your product, VoteFirst.voteButton puts one feature's vote control on the page where somebody is already thinking about it. Every other widget here brings a board to your site; this one brings a single question.
If you have an export screen with no scheduling, the moment a person most wants scheduled exports is while they are standing on the export screen. A vote button there asks while the thought is still present, instead of asking them to remember it, navigate to a board, and find the right card.
What is the line you paste?
<link rel="stylesheet" href="https://app.votefirst.app/embed/votefirst.css">
<script src="https://app.votefirst.app/embed/votefirst.js"></script>
<script>
VoteFirst.init({ project: 'your-project-slug', key: 'your-embed-key' });
VoteFirst.voteButton('#vote', { feature: 1234 });
</script>
<div id="vote"></div>
The feature number is the one in the address of that request on your own board. The same call under a different name, VoteFirst.badge, draws the vote control with the feature's title beside it, which is what you want when the surrounding page does not already make clear what is being voted on. Both are documented with every option they take.
Do I have to name which feature it votes on?
No. Name a feature and it draws that one, which is the usual case. Leave it out, or pass feature: 'first', and the widget asks for the top twenty features and picks the first that is actually open for votes, so a button dropped on a page with no configuration still asks a real question. If none of the twenty takes a vote it falls back to the first of them and draws the count read only. If the project has no public features at all, the widget says so in those words rather than drawing an empty box.
What if the feature is in a column that does not take votes?
You get the number without the button. Voting is set per column on your board, and this widget honours it: point it at something sitting in a column where voting is off, and the visitor sees the count rather than a control that would refuse them. If you have hidden vote counts entirely, the number goes and the control stays. If neither can be drawn, the widget says voting is closed rather than rendering nothing, because an empty space where a control should be reads as your site being broken.
Does the visitor need an account?
No. A signed out visitor gets an anonymous identity minted in their own browser's storage the first time they vote. There are no cookies and nothing is sent with credentials. The token is signed and tied to your project, so it cannot be replayed against a different board.
If you want the vote attributed to your own signed in user instead, signing them in with a token is on the PRO plan. That is worth doing here specifically, because a vote from inside your product is a vote where you usually already know who the person is.
Does this count towards weighted voting?
Yes. If you have weighted voting on and the voter belongs to a tier, the vote carries that tier's multiplier exactly as it would on the public board, and the number on the button is the weighted total rather than the headcount.
What happens when somebody presses it twice?
The second press takes the vote back, and the button shows which state it is in. It carries a pressed state a screen reader can read and a label naming the feature, and it disables itself while the request is in flight so an impatient double press cannot fire twice. A returning visitor arrives with their vote already showing. If a vote is refused, the reason is shown to the visitor.
Can the vote feed my own analytics?
Yes. Every vote raises an event carrying the feature, whether the person now has a vote on it, and what the server sent back; every refusal raises one carrying the error and which widget it came from. Subscribe on the widget's own handle, or once on VoteFirst.on for every widget on the page. No analytics are built into the script itself, so nothing here counts impressions or conversions on its own; the events are what a host's own tooling reads instead.
What does it cost?
Nothing beyond your plan. No widget is held back for the higher plan, so this works on the nine dollar plan. 14 days, a card at signup, then $9 or $39 a month.
How do I install it?
One script tag with your project and your public key, and a container where the control should go. Name a feature on it if you want a specific one; calls made before the script has loaded queue rather than fail, which matters more for this widget than the others because it usually sits inside an application rather than on a static page.
Where to put it
Next to the thing it is about. A vote button in a footer is a worse version of a link to your board. A vote button on the screen with the missing feature asks at the right moment, which is the reason to use this rather than the board widget.