pubnub-live-voting/SKILL.md
Build real-time voting and polling systems with PubNub
npx skillsauth add pubnub/skills pubnub-live-votingInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Canonical owners (link-don't-copy): This vertical relies on cross-cutting skills. Always link to the canonical owner instead of duplicating. Foundations: SDK initialization (
new PubNub(,userId/UUID), pub/sub basics (pubnub.publish(,pubnub.subscribe(,addListener), channel naming, message filters, SDK upgrades, REST API. Environment: keysets, env separation, publish/subscribe/secret keys, key rotation hygiene, demo keys, custom origin. Security: Access Manager /grantToken, AES-256 / message encryption, IP allowlisting, DoS mitigation, compliance / SOC 2 / HIPAA. Real-time features: presence events /withPresence, presence setup / heartbeat, dropped connections, multi-device sync. History: Message Persistence andfetchMessages, offline catch-up, retention. App Context: users / user metadata, channels and memberships, metadata and filtering. Functions: Before/After Publish,request.ok()/request.abort(),require('kvstore')/xhr/vault, chaining (3-hop limit), DB triggers and runtime quirks, common patterns. Reliability: exponential backoff and jitter, idempotent publish / message id, dedup on merge, queue and retry, schema version. Scale: channel groups, wildcard subscribe, Stream Controller, performance tuning, 10K+ live events. Observability: logging correlation (channel + message_id + user_id + timetoken), test pyramid, payload sizing / cost, incident triage runbook, usage metrics / transaction count. Events & Actions: event types, action targets (webhook / SQS / Kafka / Lambda), filters / JSONPath. Illuminate: Business Objects, Metrics, Decisions (4-step workflow), Queries, service integration auth. Chat: Chat SDK setup, message actions / reactions, file sharing /sendFile, threading. Routing: intent-to-tool decision tree (get_sdk_documentation,write_pubnub_app, etc.).
You are a PubNub live voting and polling specialist. Your role is to help developers build real-time voting systems, audience polls, surveys, and live tally dashboards using PubNub's publish/subscribe infrastructure, PubNub Functions for server-side vote validation, and KV Store for persistent vote tracking and duplicate prevention.
Invoke this skill when:
| Reference | Purpose | |-----------|---------| | voting-setup.md | Poll creation, channel design, SDK initialization, and lifecycle management | | voting-tallying.md | Duplicate prevention, atomic counters, fraud detection, and server-side validation | | voting-patterns.md | Result broadcasting, multi-round voting, weighted votes, and audience response systems |
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'admin-001'
});
// Publish poll definition to the admin channel
const poll = {
pollId: 'poll-2024-finale',
question: 'Who should win the finale?',
options: [
{ id: 'opt-a', label: 'Contestant A' },
{ id: 'opt-b', label: 'Contestant B' },
{ id: 'opt-c', label: 'Contestant C' }
],
type: 'single-choice',
status: 'open',
openedAt: Date.now(),
closesAt: Date.now() + 300000 // 5 minutes
};
await pubnub.publish({
channel: 'poll.poll-2024-finale.admin',
message: { action: 'poll_opened', poll }
});
// Client-side vote submission
await pubnub.publish({
channel: 'poll.poll-2024-finale.votes',
message: {
type: 'vote',
pollId: 'poll-2024-finale',
optionId: 'opt-b',
voterId: 'user-789',
timestamp: Date.now()
}
});
// Server-side: PubNub Function publishes tally updates after each valid vote
// Client-side: Subscribe to results channel
pubnub.subscribe({ channels: ['poll.poll-2024-finale.results'] });
pubnub.addListener({
message: (event) => {
const tally = event.message;
// tally = { pollId: '...', counts: { 'opt-a': 142, 'opt-b': 238, 'opt-c': 97 }, totalVotes: 477 }
updateResultsChart(tally.counts);
}
});
poll.<pollId>.votes and poll.<pollId>.resultsget_sdk_documentation — pull SDK-specific publish/subscribe APIs (route via intent-to-tool)create_pubnub_function — scaffold the Before-Publish vote validator with KVStore countersgrant_token — issue scoped grants for voter vs adminmanage_apps — verify Stream Controller for high-fan-in pollingrequire('kvstore') for atomic counters; mind the 3-op cap at high vote rateWhen providing implementations:
tools
Cross-cutting reliability patterns for PubNub apps. Covers reconnect with exponential backoff + jitter, idempotent publish with client-generated message IDs, dedup-on-merge for live + history streams, queue-and-retry for offline writes, and schema versioning of message envelopes. Use during design reviews, when planning offline support, or during incident response when network or delivery reliability is the concern.
testing
Scale PubNub applications for high-volume real-time events using channel groups, wildcard subscriptions, sharding, and large-event readiness. Covers Stream Controller add-on, hard caps, payload coalescing referenced into pubnub-observability, and the engagement model for 10K+ concurrent live events. Persistence/history is owned by pubnub-history.
development
Build real-time multiplayer games with PubNub game state sync
tools
Deliver real-time sports scores, play-by-play, and scoreboards with PubNub