--- name: pubnub-live-auctions description: Build real-time auction platforms with PubNub bidding and countdowns license: PubNub metadata: author: pubnub version: "0.1.2" domain: real-time triggers: pubnub, auction, bidding, countdown, bid validation, live auction, reserve price role: specialist scope: implementation output-format: code --- # 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: - Building a real-time auction platform with live bidding - Implementing countdown timers synchronized across all participants - Adding server-side bid validation with PubNub Functions - Creating outbid notifications and bid activity feeds - Managing auction lifecycles (scheduled, active, closing, completed) - Implementing reserve prices, auto-extend timers, or proxy bidding ## 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](references/auction-setup.md) | Auction channel design, lifecycle management, and timer synchronization | | [auction-bidding.md](references/auction-bidding.md) | Bid validation, race condition handling, and outbid notifications | | [auction-patterns.md](references/auction-patterns.md) | Reserve prices, auto-extend, proxy bidding, and analytics | ## Key Implementation Requirements ### Auction Channel Setup ```javascript 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 ```javascript 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 ```javascript // 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 - Always validate bids server-side using PubNub Functions; never trust client-submitted bid amounts alone - Use server-authoritative time for countdown synchronization; do not rely on client clocks - Implement idempotent bid processing to handle duplicate messages from network retries - Store bid history using PubNub message persistence for audit trails and dispute resolution - Enforce minimum bid increments server-side to prevent micro-bid spam - Handle auction channel cleanup after completion to avoid stale subscriptions ## Related Skills - **pubnub-functions** - PubNub Functions runtime for server-side bid validation - **pubnub-security** - Access Manager for separating bidder and admin permissions - **pubnub-scale** - Channel groups and optimization for high-traffic auctions - **pubnub-presence** - Tracking active bidders in auction rooms ## 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