Skip to content
Agentmart
Submit a tool

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

IndexedMIT★ 3
Write a review

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.

We use your email only for this newsletter. Privacy

About

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.

Use cases: data, writing

No 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

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
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from CambridgeMonorail

Cite this page

signage-data-refresh-patterns skill. Agent Mart. https://agentmart.dev/skills/cambridgemonorail-signage-data-refresh-patterns (last updated 2026-10-24)