Skip to content
Back to skills

Skill

ASecurity

Builds a Canvas 2D checkerboard in which three flat scenes replace each other by conveyor, each of nine rows sliding one full screen width on a measured whip curve a beat after the row above, so the next scene rides in from the edge seam and all, with palettes that crossfade only while the board is at rest. Use when someone asks for a checkerboard animation, a tile or pixel transition, a staggered row wipe, a conveyor or flag-wave effect, or a looping geometric background.

  • 258 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 11, 2026
ai-agentstypescriptgoreactnode

Works with

  • cli

Security analysis

A100/100

Pro scans all 7 files and shows the line behind each finding

Scanned November 11, 2026

npx -y skills add arla6ka/design.how --skill skill --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Skill?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Skill
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/arla6ka-skill-5e87b4b3/badge)](https://www.skillsdirectory.com/skills/arla6ka-skill-5e87b4b3)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: checker-conveyor
description: Builds a Canvas 2D checkerboard in which three flat scenes replace each other by conveyor, each of nine rows sliding one full screen width on a measured whip curve a beat after the row above, so the next scene rides in from the edge seam and all, with palettes that crossfade only while the board is at rest. Use when someone asks for a checkerboard animation, a tile or pixel transition, a staggered row wipe, a conveyor or flag-wave effect, or a looping geometric background.
---

# Checker conveyor

Nine rows of checker cells whip sideways one after another, and each pulse carries in the next scene. See it live at https://design.how/vault/checker-conveyor.

## What to build

The card is a checkerboard nine rows tall, with the cell size set by the height, and a rectangle of checker cells twelve wide across rows 2 to 6, centred. There are three scenes. The first is the ground alone, the second fills the rectangle with two new colours over the same ground, and the third swaps every colour at once. The loop goes first, second, third and back.

A scene never fades in. During a pulse each row is a strip of [this scene's row][next scene's row] laid end to end, and the row slides by exactly the visible width, so the next scene arrives from the edge with its seam showing. Where the two scenes meet, two lights or two darks can touch. That break is kept: scenes are absolute patterns, not state carried across.

The motion is measured. Every row follows one whip curve, a 26-entry table of normalised displacement with about a quarter of the travel in the windup, then half the distance in a few frames, then a long settle. It is read through a monotone cubic so the cliff in the middle never overshoots its landing cell. Each row starts from its own fitted frame, about 3.6 frames at 30 fps after the row above, with the source's jitter kept, and the three pulses take 51, 50 and 42 frames.

Two scalings make it fit a scrolling page. The rests between pulses are cut to 0.42 of their length and the pulses play 1.45 times faster, through a piecewise-linear map from clock time to measured time. Palettes cycle every 2.2 seconds, but only at a rest, when no row is moving, and every tile crossfades in place over 0.34 seconds. Some palettes run right, fire bottom to top, or split odd rows against even ones.

## Workflow

1. Copy `assets/template/` into the project, for example to `components/checker-conveyor/`. It is React and TypeScript: `params.ts`, `engine.ts`, `card.tsx`, plus `runtime/`, the small helpers they import.
2. Read the FIXED steps below before touching the code. They are what makes the effect; keep them.
3. Change only the VARIABLE values in the params file, or pass them as props where the card takes them.
4. Mount the card in a box with a fixed aspect ratio of 1344 / 620, so the page never shifts when it paints.
5. Read `references/perf.md` before changing the engine or mounting several visuals on one page.
6. Run `node scripts/check.mjs components/checker-conveyor` on the copied folder, fix every line it prints, and rerun until it prints ok.

## FIXED

- Size the cell as the canvas height over ROWS, and cover the width in whole cells; centre the rectangle on the fractional width.
- For each row, find which pulse it is in from its fitted start frame, and its progress k through that pulse.
- Ease k through the whip table with monotone cubic tangents, and offset the row by eased k times the visible width.
- Fill the row as [current scene][next scene] end to end, rounding every edge to a device pixel so neighbours share boundaries.
- Map clock time to measured time with rests scaled by DWELL_SCALE and pulses by PULSE_RATE, so the loop stays seamless.
- Swap palettes only when every row is at rest, and crossfade each tile in place over FADE_SECONDS.
- Under reduced motion, pin the first palette, stop cycling and draw the second scene at rest once.

## VARIABLE

| Name | Default | What it changes |
|-|-|-|
| `PALETTES` | primary, duplex, plaster, monochrome, acid, dusk | Colour worlds of exactly three scenes each, with a direction (left, right or split) and an optional bottom-up cascade. |
| `PALETTE_SECONDS` | 2.2 | How long a palette holds before the next rest swaps it. |
| `DWELL_SCALE` | 0.42 | How much of each rest to keep. 1 is the measured original. |
| `PULSE_RATE` | 1.45 | How much faster the pulses play than measured. 1 is the original. |
| `FADE_SECONDS` | 0.34 | The palette crossfade. Keep it shorter than the shortest rest. |
| `RECT_COLS, RECT_ROW_START, RECT_ROW_END` | 12, 2, 6 | The centred rectangle's width and rows. |

Files in this skill

  • SKILL.md4.5 KB
  • assets/template/card.tsx2.1 KB
  • assets/template/engine.ts9 KB
  • assets/template/params.ts3.5 KB
  • assets/template/runtime/use-pause.ts1.6 KB
  • references/perf.md2.3 KB
  • scripts/check.mjs5.8 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

View all in ai-agents →

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.