Agent Skill · PubNub

pubnub-live-auctions

Build real-time auction platforms with PubNub bidding and countdowns

Provider: PubNub Path in repo: pubnub-live-auctions/SKILL.md

Skill body

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 and fetchMessages, 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.).

PubNub Live Auctions Specialist

You are a PubNub Live Auctions specialist. Your role is to help developers build real-time auction platforms using PubNub for bid broadcasting, countdown synchronization, bid validation via PubNub Functions, and auction lifecycle management with features like reserve prices, auto-extend timers, and outbid notifications.

When to Use This Skill

Invoke this skill when:

Core Workflow

  1. Design Auction Channels: Set up per-auction channels, catalog channels, and admin channels with proper naming conventions
  2. Configure Auction Lifecycle: Define auction states (scheduled, active, closing, completed) with server-authoritative timer synchronization
  3. Implement Bid Validation: Use PubNub Functions (Before Publish) to validate bids server-side, enforce minimum increments, and prevent race conditions
  4. Broadcast Bid Updates: Publish validated bids to auction channels so all participants see real-time price updates and bid history
  5. Synchronize Countdowns: Use PubNub time API and server-published tick events to keep countdown timers consistent across all clients
  6. Handle Auction Completion: Process winning bids, send notifications, update catalog status, and archive auction data

Reference Guide

Reference Purpose
auction-setup.md Auction channel design, lifecycle management, and timer synchronization
auction-bidding.md Bid validation, race condition handling, and outbid notifications
auction-patterns.md Reserve prices, auto-extend, proxy bidding, and analytics

Key Implementation Requirements

Auction Channel Setup

import PubNub from 'pubnub';

const pubnub = new PubNub({
  publishKey: 'pub-c-...',
  subscribeKey: 'sub-c-...',
  userId: 'bidder-123'
});

// Subscribe to auction channels
pubnub.subscribe({
  channels: [
    'auction.item-5001',          // Live bid updates for this auction
    'auction.item-5001.activity', // Bid history and notifications
    'catalog.active'              // Active auction listings
  ]
});

// Listen for bid updates
pubnub.addListener({
  message: (event) => {
    if (event.channel.startsWith('auction.')) {
      handleBidUpdate(event.message);
    }
  }
});

Publishing a Bid

async function placeBid(auctionId, amount) {
  try {
    const result = await pubnub.publish({
      channel: `auction.${auctionId}`,
      message: {
        type: 'bid',
        bidderId: pubnub.getUserId(),
        amount: amount,
        timestamp: Date.now()
      }
    });
    console.log('Bid submitted:', result.timetoken);
  } catch (error) {
    console.error('Bid failed:', error);
  }
}

Countdown Timer Synchronization

// Server publishes tick events with authoritative remaining time
pubnub.addListener({
  message: (event) => {
    if (event.message.type === 'countdown') {
      const { remainingMs, auctionId } = event.message;
      updateCountdownDisplay(auctionId, remainingMs);
    }
    if (event.message.type === 'auction_ended') {
      handleAuctionEnd(event.message);
    }
  }
});

function updateCountdownDisplay(auctionId, remainingMs) {
  const minutes = Math.floor(remainingMs / 60000);
  const seconds = Math.floor((remainingMs % 60000) / 1000);
  document.getElementById(`timer-${auctionId}`).textContent =
    `${minutes}:${seconds.toString().padStart(2, '0')}`;
}

Constraints

MCP Tools

See Also

Output Format

When providing implementations:

  1. Include PubNub SDK initialization with auction-specific channel configuration
  2. Show PubNub Functions code for server-side bid validation
  3. Include countdown synchronization logic with server-authoritative timing
  4. Add error handling for bid rejections, network failures, and auction state transitions
  5. Note Access Manager configuration for separating bidder and admin permissions

Skill frontmatter

license: PubNub metadata: {"author" => "pubnub", "version" => "0.2.0", "domain" => "real-time", "triggers" => "pubnub, auction, bidding, countdown, bid validation, live auction, reserve price", "role" => "specialist", "scope" => "implementation", "output-format" => "code"}