signage-data-refresh-patterns
Generate polling, backoff, and non-blocking data update patterns for digital signage that refreshes content without page reloads or visual disruption.
Skill by CambridgeMonorail
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/cambridgemonorail-signage-data-refresh-patterns
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: data, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/signage-data-refresh-patterns
What's inside
- Skill name
signage-data-refresh-patterns- Description
- Generate polling, backoff, and non-blocking data update patterns for digital signage that refreshes content without page reloads or visual disruption. Use when building signage apps that consume live data feeds, APIs, or dynamic content sources.
- License
- MIT
- Metadata
- author: CambridgeMonorail · version: 1.0
- Instructions
- 152 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- examples.md · references/
SKILL.md (first lines)
# Signage Data Refresh Patterns Skill
## Purpose
Use this skill to implement data refresh strategies that keep signage content live without disrupting the viewer experience.
Web developers rely on page reloads, loading spinners, and error boundaries. Signage screens must refresh data silently in the background, never flash, never blank, and degrade gracefully when APIs fail. This skill encodes the patterns that make continuous data updates invisible to the viewer.
## When to Use
Use this skill when you need to:
- implement periodic data polling for a signage screen
- refresh content without visible loading states
- handle API failures during background refresh
- implement retry and backoff strategies for unreliable data sources
- swap content smoothly when new data arrives
## Do Not Use When
Do not use this skill when:
- the signage screen displays only static content with no external data
- the task is about the initial boot/load sequence (use `signage-state-machine`)
- the task is about what to show when data is missing (use `signage-content-fallbacks`)
## Core Principle
**Data refresh must be invisible to the viewer. The screen should never flash, blank, or stutter during an update.**
## Refresh Strategy Rules
### Polling Intervals
| Content Type | Recommended Interval | Notes |
| -------------------------------- | -------------------- | ------------------------------ |
| Real-time data (stocks, transit) | 15–30 seconds | Balance freshness vs. API load |
| Menu / pricing | 60–120 seconds | Changes are infrequent |
| Weather / news | 300–600 seconds | Slow-changing content |
| Promotional content | 600–3600 seconds | Often schedule-driven |
| Static configuration | On boot + hourly | Emergency overrides |
### Refresh Timing
- Stagger refresh intervals when multiple data sources are polled to avoid simultaneous network bursts.
- Add jitter (±10% of interval) to prevent thundering herd if multiple players poll the same API.
- Align refresh cycles with content rotation timing when possible.
## Non-Blocking Update Pattern
The viewer must never see the refresh happening.
```
Current content visible
└→ Background fetch starts
├→ Success:
│ └→ Validate new data
│ ├→ Valid → Stage new data → Swap on next render cycle
│ └→ Invalid → Keep current data, log warning
└→ Failure:
└→ Keep current data, schedule retry with backoff
```
### Key Rules
1. **Never unmount visible content to show a loading state during refresh.**
2. **Validate new data before swapping.** Bad data is worse than stale data.
3. **Stage new data in memory before rendering.** Avoid partial updates.
4. **Use transitions when swapping content.** A subtle fade or crossfade prevents jarring visual changes.
## Retry and Backoff Strategy
When a data fetch fails, use exponential backoff with a ceiling:
| Attempt | Delay | Notes |
| ---------- | --------------------- | ------------------------------------- |
| 1st retry | 5 seconds | Quick retry for transient errors |
| 2nd retry | 15 seconds | |
| 3rd retry | 30 seconds | |
| 4th retry | 60 seconds | |
| 5th+ retry | 120 seconds (ceiling) | Continue retrying at ceiling interval |
### Backoff Rules
- Reset backoff counter on successful fetch.
- Do not retry immediately on failure — even a 1-second delay prevents tight failure loops.
- Log failures with timestamps for diagnostics but do not surface errors to the viewer.
- After sustained failure (e.g., 10 minutes), transition to `signage-state-machine` offline/fallback state.
## Implementation Patterns
### `useSignageData` Hook
The core polling hook maintains current data while fetching, validates before swapping, implements exponential backoff on failure, and never returns `undefined` after the first successful fetch.
See the [data refresh implementation examples](references/examples.md) for the complete implementation with types, backoff ladder, jitter, and offline detection.
### Data Swap Pattern
```typescript
// ✅ Good: stage and swap
const newData = await fetchData();
if (isValid(newData)) {
setData(newData); // Single state update, no flicker
}
// ❌ Bad: clear and reload
setData(null); // Viewer sees blank/loading
const newData = await fetchData();
setData(newData); // Viewer sees content return
```
### Multi-Source Coordination
When a screen depends on multiple data sources:
- Fetch independently on offset intervals.
- Render with whatever data is available — do not wait for all sources.
- Show placeholder or last-known data for any source that is stale.From CambridgeMonorail/WallRun, MIT.
More from CambridgeMonorail/WallRun
- 0.454score
brightsign-deploy-local
CambridgeMonorail
Deploy React apps to local BrightSign OS 9.x players via HTTP API for rapid development iteration.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-fleet-deploy
CambridgeMonorail
Build, version, and publish React apps to GitHub Releases for fleet-wide BrightSign player updates.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
shadcnui-component-review
CambridgeMonorail
End-to-end review of shadcn/ui components in a component library.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-package
CambridgeMonorail
Build and package React apps for BrightSign OS 9.x players with autorun.brs bootstrap, IIFE bundles, and optimised Vite configuration.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
signage-content-fallbacks
CambridgeMonorail
Ensure digital signage screens always display content by implementing fallback chains for API failures, missing data, and feed outages.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
instructions-detox
CambridgeMonorail
Audit Copilot instruction files for bloat, overlap, stale rules, and weak applyTo scope.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-signage-build
CambridgeMonorail
Build a BrightSign-targeted digital signage app by combining full-screen layout design, BrightSign runtime constraints, packaging expectations, and…
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
signage-menu-board
CambridgeMonorail
Build food and service menu-board systems for large displays using clear templates, price hierarchy rules, structured inputs, and screen planning.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
chrome-devtools-webapp-debug
CambridgeMonorail
Investigate broken pages, failing user journeys, console errors, network failures, and frontend performance regressions using Chrome DevTools MCP.
SkillDFreshness: D★ 3Claude Code +9 - 0.450score
brightsign-debug
CambridgeMonorail
Diagnose and troubleshoot BrightSign OS 9.x player issues using device info APIs, remote Chrome DevTools inspector, log analysis, and file verification.
SkillDFreshness: D★ 3Claude Code +9 - 0.449score
signage-performance-budget
CambridgeMonorail
Audit and validate bundle size, image weight, font loading, and frame-rate budgets for digital signage running on embedded hardware like BrightSign players.
SkillDFreshness: D★ 3Claude Code +9 - 0.449score
brightsign-runtime
CambridgeMonorail
Explain how to build and adapt web applications that run reliably on BrightSign players.
SkillDFreshness: D★ 3Claude Code +9
Signals
- Stars
- 3
- Forks
- 0
- Open issues
- 19
- Last commit (this folder)
- Mar 15, 2026 (7 months ago)
From GitHub (fetched Oct 24, 2026).
Details
- Version
- 1.0
- License
- MIT
- Repository
- github.com/CambridgeMonorail/WallRun
- Website
- wallrun.dev/
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from CambridgeMonorail
- 0.454score
instructions-detox
CambridgeMonorail
Audit Copilot instruction files for bloat, overlap, stale rules, and weak applyTo scope.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-signage-build
CambridgeMonorail
Build a BrightSign-targeted digital signage app by combining full-screen layout design, BrightSign runtime constraints, packaging expectations, and…
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-deploy-local
CambridgeMonorail
Deploy React apps to local BrightSign OS 9.x players via HTTP API for rapid development iteration.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-fleet-deploy
CambridgeMonorail
Build, version, and publish React apps to GitHub Releases for fleet-wide BrightSign player updates.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
brightsign-package
CambridgeMonorail
Build and package React apps for BrightSign OS 9.x players with autorun.brs bootstrap, IIFE bundles, and optimised Vite configuration.
SkillDFreshness: D★ 3Claude Code +9 - 0.454score
chrome-devtools-webapp-debug
CambridgeMonorail
Investigate broken pages, failing user journeys, console errors, network failures, and frontend performance regressions using Chrome DevTools MCP.
SkillDFreshness: D★ 3Claude Code +9
Cite this page
signage-data-refresh-patterns skill. Agent Mart. https://agentmart.dev/skills/cambridgemonorail-signage-data-refresh-patterns (last updated 2026-10-24)