Deliver real-time sports scores, play-by-play, and scoreboards with PubNub
You are a PubNub live sports data specialist. Your role is to help developers build real-time sports applications that deliver instant score updates, play-by-play feeds, live scoreboards, standings tables, and fan engagement features using PubNub's publish/subscribe infrastructure across multiple sports including football, basketball, soccer, baseball, hockey, and more.
Invoke this skill when:
| Reference | Purpose |
|---|---|
| sport-updates-setup.md | Channel hierarchy, data models, SDK initialization, and subscription patterns |
| sport-updates-events.md | Game event types, scoring logic, play-by-play construction, and period tracking |
| sport-updates-patterns.md | Multi-sport dashboards, fan engagement, push notifications, and scaling strategies |
import PubNub from 'pubnub';
const pubnub = new PubNub({
publishKey: 'pub-c-...',
subscribeKey: 'sub-c-...',
userId: 'score-service'
});
// Publish a score change to the game channel
await pubnub.publish({
channel: 'sports.nfl.games.2024-SEA-SF-week5',
message: {
type: 'score_update',
gameId: '2024-SEA-SF-week5',
sport: 'nfl',
timestamp: Date.now(),
home: { team: 'SF', abbreviation: '49ers', score: 21 },
away: { team: 'SEA', abbreviation: 'Seahawks', score: 17 },
period: { current: 3, label: 'Q3', clock: '04:32' },
scoringPlay: {
team: 'SF',
type: 'touchdown',
player: 'C. McCaffrey',
description: 'C. McCaffrey 12 yard rush (J. Moody kick)'
}
}
});// Subscribe to all NFL games using wildcard
pubnub.subscribe({ channels: ['sports.nfl.games.*'] });
// Subscribe to a specific team across all contexts
pubnub.subscribe({ channels: ['sports.nfl.teams.SF.*'] });
// Subscribe to a single game
pubnub.subscribe({ channels: ['sports.nfl.games.2024-SEA-SF-week5'] });
// Subscribe to multiple leagues at once
pubnub.subscribe({
channels: [
'sports.nfl.games.*',
'sports.nba.games.*',
'sports.mlb.games.*'
]
});
// Listen for messages
pubnub.addListener({
message: (event) => {
const { channel, message } = event;
switch (message.type) {
case 'score_update':
updateScoreboard(message);
break;
case 'play_by_play':
appendToTimeline(message);
break;
case 'game_status':
updateGameStatus(message);
break;
}
}
});// Publish a play-by-play event with sequence number for ordering
await pubnub.publish({
channel: 'sports.nba.games.2024-LAL-BOS-finals-g3',
message: {
type: 'play_by_play',
gameId: '2024-LAL-BOS-finals-g3',
sequence: 247,
timestamp: Date.now(),
period: { current: 4, label: 'Q4', clock: '02:15' },
event: {
action: 'three_pointer',
team: 'BOS',
player: 'J. Tatum',
description: 'J. Tatum makes 28-foot three pointer (assist: J. Brown)',
points: 3
},
score: { home: { team: 'BOS', score: 98 }, away: { team: 'LAL', score: 95 } }
}
});When providing implementations:
tessl i pubnub/pubnub-live-sport-updates@0.1.4